From b86d457d5c74e76b8e0d993ae3f77253d76b5a93 Mon Sep 17 00:00:00 2001 From: nkey Date: Wed, 23 Nov 2016 19:28:06 +0300 Subject: [PATCH 1/3] fix body writer error reporting message --- .../main/java/org/apache/cxf/jaxrs/client/AbstractClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 82e30a606de..c8a76ba7447 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 @@ -794,7 +794,7 @@ protected String convertParamValue(Object pValue, Class pClass, Annotation[] } protected static void reportMessageHandlerProblem(String name, Class cls, MediaType ct, Throwable ex) { - String errorMessage = JAXRSUtils.logMessageHandlerProblem("NO_MSG_WRITER", cls, ct); + String errorMessage = JAXRSUtils.logMessageHandlerProblem(name, cls, ct); Throwable actualEx = ex instanceof Fault ? ((Fault)ex).getCause() : ex; throw new ProcessingException(errorMessage, actualEx); } From 87845ceacf42cd37da16b86a0d3efc138c5c729e Mon Sep 17 00:00:00 2001 From: nkey Date: Thu, 8 Dec 2016 16:06:08 +0300 Subject: [PATCH 2/3] fix to allow response auto close to be correctly used with StreamingOutput and Reader --- .../apache/cxf/jaxrs/impl/ResponseImpl.java | 55 +++++++------------ .../cxf/jaxrs/client/AbstractClient.java | 20 +++---- 2 files changed, 28 insertions(+), 47 deletions(-) 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 12127b98263..96eed8a37b1 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 @@ -19,6 +19,21 @@ package org.apache.cxf.jaxrs.impl; +import org.apache.cxf.helpers.IOUtils; +import org.apache.cxf.jaxrs.provider.ProviderFactory; +import org.apache.cxf.jaxrs.utils.HttpUtils; +import org.apache.cxf.jaxrs.utils.InjectionUtils; +import org.apache.cxf.jaxrs.utils.JAXRSUtils; +import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageUtils; + +import javax.ws.rs.ProcessingException; +import javax.ws.rs.client.ResponseProcessingException; +import javax.ws.rs.core.*; +import javax.ws.rs.core.Response.Status.Family; +import javax.ws.rs.ext.ReaderInterceptor; +import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate; +import javax.xml.stream.XMLStreamReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -27,39 +42,7 @@ import java.lang.reflect.Type; import java.net.URI; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; - -import javax.ws.rs.ProcessingException; -import javax.ws.rs.client.ResponseProcessingException; -import javax.ws.rs.core.EntityTag; -import javax.ws.rs.core.GenericType; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Link; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.NewCookie; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status.Family; -import javax.ws.rs.ext.ReaderInterceptor; -import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate; -import javax.xml.stream.XMLStreamReader; - -import org.apache.cxf.helpers.IOUtils; -import org.apache.cxf.jaxrs.provider.ProviderFactory; -import org.apache.cxf.jaxrs.utils.HttpUtils; -import org.apache.cxf.jaxrs.utils.InjectionUtils; -import org.apache.cxf.jaxrs.utils.JAXRSUtils; -import org.apache.cxf.message.Message; -import org.apache.cxf.message.MessageUtils; +import java.util.*; public final class ResponseImpl extends Response { @@ -440,7 +423,11 @@ private void reportMessageHandlerProblem(String name, Class cls, MediaType ct } protected void autoClose(Class cls, boolean exception) { - if (!entityBufferred && cls != InputStream.class + boolean isStreamingOutputType = (cls != InputStream.class) + && (cls != StreamingOutput.class) + && (cls != Reader.class); + + if (!entityBufferred && isStreamingOutputType && (exception || MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close")))) { close(); } 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 c8a76ba7447..a06da1bd779 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 @@ -18,10 +18,7 @@ */ package org.apache.cxf.jaxrs.client; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.ParameterizedType; @@ -46,15 +43,8 @@ import javax.ws.rs.ProcessingException; import javax.ws.rs.WebApplicationException; import javax.ws.rs.client.InvocationCallback; -import javax.ws.rs.core.Cookie; -import javax.ws.rs.core.EntityTag; -import javax.ws.rs.core.Form; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; +import javax.ws.rs.core.*; import javax.ws.rs.core.Response.ResponseBuilder; -import javax.ws.rs.core.UriBuilder; import javax.ws.rs.ext.ParamConverter; import javax.ws.rs.ext.WriterInterceptor; import javax.xml.stream.XMLStreamWriter; @@ -525,7 +515,11 @@ protected T readBody(Response r, Message outMessage, Class cls, } protected boolean responseStreamCanBeClosed(Message outMessage, Class cls) { - return cls != InputStream.class + boolean isStreamingOutputType = (cls != InputStream.class) + && (cls != StreamingOutput.class) + && (cls != Reader.class); + + return isStreamingOutputType && MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close")); } From 9c615cda2b127295abc063203431a11012f24e3a Mon Sep 17 00:00:00 2001 From: nkey Date: Thu, 8 Dec 2016 16:20:12 +0300 Subject: [PATCH 3/3] correctly renamed variables --- .../src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java | 4 ++-- .../main/java/org/apache/cxf/jaxrs/client/AbstractClient.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 96eed8a37b1..ad8cc04465e 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 @@ -423,11 +423,11 @@ private void reportMessageHandlerProblem(String name, Class cls, MediaType ct } protected void autoClose(Class cls, boolean exception) { - boolean isStreamingOutputType = (cls != InputStream.class) + boolean isNotStreamingOutputType = (cls != InputStream.class) && (cls != StreamingOutput.class) && (cls != Reader.class); - if (!entityBufferred && isStreamingOutputType + if (!entityBufferred && isNotStreamingOutputType && (exception || MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close")))) { close(); } 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 a06da1bd779..9bf2b86062f 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 @@ -515,11 +515,11 @@ protected T readBody(Response r, Message outMessage, Class cls, } protected boolean responseStreamCanBeClosed(Message outMessage, Class cls) { - boolean isStreamingOutputType = (cls != InputStream.class) + boolean isNotStreamingOutputType = (cls != InputStream.class) && (cls != StreamingOutput.class) && (cls != Reader.class); - return isStreamingOutputType + return isNotStreamingOutputType && MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close")); }