15
15
*/
16
16
package com .marklogic .client .impl ;
17
17
18
+ import java .io .Closeable ;
18
19
import java .io .File ;
19
20
import java .io .InputStream ;
21
+ import java .io .IOException ;
20
22
import java .io .PrintStream ;
21
23
import java .io .Reader ;
22
24
import java .util .ArrayList ;
@@ -813,6 +815,7 @@ private boolean getDocumentImpl(RequestLogger reqlog,
813
815
contentBase .receiveContent ((reqlog != null ) ? reqlog
814
816
.copyContent (contentEntity ) : contentEntity );
815
817
818
+ try { entity .close (); } catch (IOException e ) {}
816
819
response .close ();
817
820
818
821
return true ;
@@ -3771,7 +3774,8 @@ private ServiceResultIterator makeResults(RequestLogger reqlog,
3771
3774
return null ;
3772
3775
}
3773
3776
3774
- return new JerseyResultIterator (reqlog , response , partList );
3777
+ Closeable closeable = new MultipartCloseable (response , entity );
3778
+ return new JerseyResultIterator (reqlog , response , partList , closeable );
3775
3779
}
3776
3780
3777
3781
private boolean isStreaming (Object value ) {
@@ -3826,6 +3830,20 @@ private int calculateDelay(Random rand, int i) {
3826
3830
return min + randRetry .nextInt (range );
3827
3831
}
3828
3832
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
+
3829
3847
public class JerseyResult implements ServiceResult {
3830
3848
private RequestLogger reqlog ;
3831
3849
private BodyPart part ;
@@ -3895,9 +3913,10 @@ public class JerseyResultIterator implements ServiceResultIterator {
3895
3913
private RequestLogger reqlog ;
3896
3914
private ClientResponse response ;
3897
3915
private Iterator <BodyPart > partQueue ;
3916
+ private Closeable closeable ;
3898
3917
3899
3918
public JerseyResultIterator (RequestLogger reqlog ,
3900
- ClientResponse response , List <BodyPart > partList ) {
3919
+ ClientResponse response , List <BodyPart > partList , Closeable closeable ) {
3901
3920
super ();
3902
3921
if (response != null ) {
3903
3922
if (partList != null && partList .size () > 0 ) {
@@ -3906,9 +3925,14 @@ public JerseyResultIterator(RequestLogger reqlog,
3906
3925
this .partQueue = new ConcurrentLinkedQueue <BodyPart >(
3907
3926
partList ).iterator ();
3908
3927
} else {
3909
- response .close ();
3928
+ if ( closeable != null ) {
3929
+ try { closeable .close (); } catch (IOException e ) {}
3930
+ } else if ( response != null ) {
3931
+ response .close ();
3932
+ }
3910
3933
}
3911
3934
}
3935
+ this .closeable = closeable ;
3912
3936
}
3913
3937
3914
3938
@ Override
@@ -3944,12 +3968,11 @@ public void remove() {
3944
3968
3945
3969
@ Override
3946
3970
public void close () {
3947
- if (response != null ) {
3948
- response .close ();
3949
- response = null ;
3950
- }
3951
3971
partQueue = null ;
3952
3972
reqlog = null ;
3973
+ if ( closeable != null ) {
3974
+ try { closeable .close (); } catch (IOException e ) {}
3975
+ }
3953
3976
}
3954
3977
3955
3978
@ Override
0 commit comments