You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/08/02 23:55:15 UTC
svn commit: r1509879 - in /cxf/branches/2.7.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/
Author: sergeyb
Date: Fri Aug 2 21:55:15 2013
New Revision: 1509879
URL: http://svn.apache.org/r1509879
Log:
Merged revisions 1508512,1509863-1509864 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1508512 | sergeyb | 2013-07-30 17:30:17 +0100 (Tue, 30 Jul 2013) | 1 line
[CXF-5144] Closing async Response objects when possible too
........
r1509863 | sergeyb | 2013-08-02 22:11:34 +0100 (Fri, 02 Aug 2013) | 1 line
Protecting a bit against the spec requirement to auto-close Response original stream if the requested entity is not InputStream
........
r1509864 | sergeyb | 2013-08-02 22:12:34 +0100 (Fri, 02 Aug 2013) | 1 line
Auto-closing async response only if a property is set
........
Modified:
cxf/branches/2.7.x-fixes/ (props changed)
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JaxrsClientCallback.java
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/trunk:r1508512,1509863-1509864
Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java?rev=1509879&r1=1509878&r2=1509879&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java Fri Aug 2 21:55:15 2013
@@ -523,7 +523,7 @@ public abstract class AbstractClient imp
return null;
}
- private boolean responseStreamCanBeClosed(Message outMessage, Class<?> cls) {
+ protected boolean responseStreamCanBeClosed(Message outMessage, Class<?> cls) {
return cls != InputStream.class
&& MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close"));
}
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JaxrsClientCallback.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JaxrsClientCallback.java?rev=1509879&r1=1509878&r2=1509879&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JaxrsClientCallback.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/JaxrsClientCallback.java Fri Aug 2 21:55:15 2013
@@ -44,6 +44,10 @@ class JaxrsClientCallback<T> extends Cli
this.outType = outGenericType;
this.responseClass = responseClass;
}
+
+ public InvocationCallback<T> getHandler() {
+ return handler;
+ }
public Type getOutGenericType() {
return outType;
@@ -64,6 +68,33 @@ class JaxrsClientCallback<T> extends Cli
public Future<T> createFuture() {
return new JaxrsResponseCallback<T>(this);
}
+
+ @SuppressWarnings("unchecked")
+ public void handleResponse(Map<String, Object> ctx, Object[] res) {
+ context = ctx;
+ result = res;
+ if (handler != null) {
+ handler.completed((T)res[0]);
+ }
+ done = true;
+ synchronized (this) {
+ notifyAll();
+ }
+ }
+
+ @Override
+ public void handleException(Map<String, Object> ctx, final Throwable ex) {
+ context = ctx;
+ exception = ex;
+ if (handler != null) {
+ handler.failed(new ClientException(exception));
+ }
+ done = true;
+ synchronized (this) {
+ notifyAll();
+ }
+ }
+
static class JaxrsResponseCallback<T> implements Future<T> {
JaxrsClientCallback<T> callback;
public JaxrsResponseCallback(JaxrsClientCallback<T> cb) {
@@ -115,31 +146,4 @@ class JaxrsClientCallback<T> extends Cli
return callback.isDone();
}
}
-
-
- @SuppressWarnings("unchecked")
- public void handleResponse(Map<String, Object> ctx, Object[] res) {
- context = ctx;
- result = res;
- if (handler != null) {
- handler.completed((T)res[0]);
- }
- done = true;
- synchronized (this) {
- notifyAll();
- }
- }
-
- @Override
- public void handleException(Map<String, Object> ctx, final Throwable ex) {
- context = ctx;
- exception = ex;
- if (handler != null) {
- handler.failed(new ClientException(exception));
- }
- done = true;
- synchronized (this) {
- notifyAll();
- }
- }
-}
\ No newline at end of file
+}
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=1509879&r1=1509878&r2=1509879&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Fri Aug 2 21:55:15 2013
@@ -998,11 +998,17 @@ public class WebClient extends AbstractC
cb.handleException(message, convertToWebApplicationException(r));
} else {
cb.handleResponse(message, new Object[] {r.getEntity()});
+ closeAsyncResponseIfPossible(r, message, cb);
}
}
private void handleAsyncFault(Message message) {
}
+ private void closeAsyncResponseIfPossible(Response r, Message outMessage, JaxrsClientCallback<?> cb) {
+ if (responseStreamCanBeClosed(outMessage, cb.getResponseClass())) {
+ r.close();
+ }
+ }
//TODO: retry invocation will not work in case of async request failures for the moment
@Override
Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java?rev=1509879&r1=1509878&r2=1509879&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java Fri Aug 2 21:55:15 2013
@@ -51,6 +51,7 @@ import org.apache.cxf.jaxrs.provider.Pro
import org.apache.cxf.jaxrs.utils.HttpUtils;
import org.apache.cxf.jaxrs.utils.JAXRSUtils;
import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageUtils;
public final class ResponseImpl extends Response {
private int status;
@@ -326,7 +327,9 @@ public final class ResponseImpl extends
InputStream.class.cast(entity),
mediaType,
responseMessage);
- InputStream.class.cast(entity).close();
+ if (responseStreamCanBeClosed(cls)) {
+ InputStream.class.cast(entity).close();
+ }
entity = newEntity;
entityBufferred = true;
@@ -340,6 +343,10 @@ public final class ResponseImpl extends
}
+ protected boolean responseStreamCanBeClosed(Class<?> cls) {
+ return cls != InputStream.class
+ && MessageUtils.isTrue(responseMessage.getContextualProperty("response.stream.auto.close"));
+ }
public boolean bufferEntity() throws MessageProcessingException {
checkEntityIsClosed();