1515 */
1616package com .marklogic .client .impl ;
1717
18+ import java .io .Closeable ;
1819import java .io .File ;
1920import java .io .InputStream ;
21+ import java .io .IOException ;
2022import java .io .PrintStream ;
2123import java .io .Reader ;
2224import 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