Repository: cxf Updated Branches: refs/heads/3.1.x-fixes c7ce40356 -> 7d1a879f8
Avoiding auto-closing Reader and StreamingOutput, patch from Michail Nikolaev applied with minor updates, This closes #211 Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/7d1a879f Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/7d1a879f Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/7d1a879f Branch: refs/heads/3.1.x-fixes Commit: 7d1a879f8cb1eab0d13bc19e93ea907ddd03a1f2 Parents: c7ce403 Author: Sergey Beryozkin <[email protected]> Authored: Thu Dec 8 16:50:18 2016 +0000 Committer: Sergey Beryozkin <[email protected]> Committed: Thu Dec 8 16:51:36 2016 +0000 ---------------------------------------------------------------------- .../main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java | 2 +- .../src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java | 8 ++++++++ .../java/org/apache/cxf/jaxrs/client/AbstractClient.java | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/7d1a879f/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java index 12127b9..fa56e9f 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java @@ -440,7 +440,7 @@ public final class ResponseImpl extends Response { } protected void autoClose(Class<?> cls, boolean exception) { - if (!entityBufferred && cls != InputStream.class + if (!entityBufferred && !JAXRSUtils.isStreamingOutType(cls) && (exception || MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close")))) { close(); } http://git-wip-us.apache.org/repos/asf/cxf/blob/7d1a879f/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java index 5b87b64..442b50f 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java @@ -22,6 +22,7 @@ package org.apache.cxf.jaxrs.utils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.Reader; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -71,6 +72,7 @@ import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.SecurityContext; +import javax.ws.rs.core.StreamingOutput; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.ContextResolver; import javax.ws.rs.ext.MessageBodyReader; @@ -166,10 +168,16 @@ public final class JAXRSUtils { private static final String NO_CONTENT_EXCEPTION = "javax.ws.rs.core.NoContentException"; private static final String HTTP_CHARSET_PARAM = "charset"; private static final Annotation[] EMPTY_ANNOTATIONS = new Annotation[0]; + private static final Set<Class<?>> STREAMING_OUT_TYPES = new HashSet<Class<?>>( + Arrays.asList(InputStream.class, Reader.class, StreamingOutput.class)); private JAXRSUtils() { } + public static boolean isStreamingOutType(Class<?> type) { + return STREAMING_OUT_TYPES.contains(type); + } + public static List<PathSegment> getPathSegments(String thePath, boolean decode) { return getPathSegments(thePath, decode, true); } http://git-wip-us.apache.org/repos/asf/cxf/blob/7d1a879f/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java ---------------------------------------------------------------------- diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java index b97483e..b83989f 100644 --- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java +++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java @@ -525,7 +525,7 @@ public abstract class AbstractClient implements Client { } protected boolean responseStreamCanBeClosed(Message outMessage, Class<?> cls) { - return cls != InputStream.class + return !JAXRSUtils.isStreamingOutType(cls) && MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close")); }
