Skip to content

Commit 3cdefe4

Browse files
committed
(ideas from ba5a475, but modified for this branch) fix #233 - call close() on MultiPart
1 parent a266c21 commit 3cdefe4

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

src/main/java/com/marklogic/client/impl/JerseyServices.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
*/
1616
package com.marklogic.client.impl;
1717

18+
import java.io.Closeable;
1819
import java.io.File;
1920
import java.io.InputStream;
21+
import java.io.IOException;
2022
import java.io.PrintStream;
2123
import java.io.Reader;
2224
import java.util.ArrayList;
@@ -813,6 +815,7 @@ private boolean getDocumentImpl(RequestLogger reqlog,
813815
contentBase.receiveContent((reqlog != null) ? reqlog
814816
.copyContent(contentEntity) : contentEntity);
815817

818+
try { entity.close(); } catch (IOException e) {}
816819
response.close();
817820

818821
return true;
@@ -3771,7 +3774,8 @@ private ServiceResultIterator makeResults(RequestLogger reqlog,
37713774
return null;
37723775
}
37733776

3774-
return new JerseyResultIterator(reqlog, response, partList);
3777+
Closeable closeable = new MultipartCloseable(response, entity);
3778+
return new JerseyResultIterator(reqlog, response, partList, closeable);
37753779
}
37763780

37773781
private boolean isStreaming(Object value) {
@@ -3826,6 +3830,20 @@ private int calculateDelay(Random rand, int i) {
38263830
return min + randRetry.nextInt(range);
38273831
}
38283832

3833+
public class MultipartCloseable implements Closeable {
3834+
private ClientResponse response;
3835+
private MultiPart multiPart;
3836+
3837+
public MultipartCloseable(ClientResponse response, MultiPart multiPart) {
3838+
this.response = response;
3839+
this.multiPart = multiPart;
3840+
}
3841+
public void close() throws IOException {
3842+
if ( multiPart != null ) multiPart.close();
3843+
if ( response != null ) response.close();
3844+
}
3845+
}
3846+
38293847
public class JerseyResult implements ServiceResult {
38303848
private RequestLogger reqlog;
38313849
private BodyPart part;
@@ -3895,9 +3913,10 @@ public class JerseyResultIterator implements ServiceResultIterator {
38953913
private RequestLogger reqlog;
38963914
private ClientResponse response;
38973915
private Iterator<BodyPart> partQueue;
3916+
private Closeable closeable;
38983917

38993918
public JerseyResultIterator(RequestLogger reqlog,
3900-
ClientResponse response, List<BodyPart> partList) {
3919+
ClientResponse response, List<BodyPart> partList, Closeable closeable) {
39013920
super();
39023921
if (response != null) {
39033922
if (partList != null && partList.size() > 0) {
@@ -3906,9 +3925,14 @@ public JerseyResultIterator(RequestLogger reqlog,
39063925
this.partQueue = new ConcurrentLinkedQueue<BodyPart>(
39073926
partList).iterator();
39083927
} else {
3909-
response.close();
3928+
if ( closeable != null ) {
3929+
try { closeable.close(); } catch (IOException e) {}
3930+
} else if ( response != null ) {
3931+
response.close();
3932+
}
39103933
}
39113934
}
3935+
this.closeable = closeable;
39123936
}
39133937

39143938
@Override
@@ -3944,12 +3968,11 @@ public void remove() {
39443968

39453969
@Override
39463970
public void close() {
3947-
if (response != null) {
3948-
response.close();
3949-
response = null;
3950-
}
39513971
partQueue = null;
39523972
reqlog = null;
3973+
if ( closeable != null ) {
3974+
try { closeable.close(); } catch (IOException e) {}
3975+
}
39533976
}
39543977

39553978
@Override

0 commit comments

Comments
 (0)