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/12/17 18:37:01 UTC
svn commit: r1551639 - in /cxf/branches/2.6.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
Author: sergeyb
Date: Tue Dec 17 17:37:01 2013
New Revision: 1551639
URL: http://svn.apache.org/r1551639
Log:
Merged revisions 1551632 via svnmerge from
https://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes
................
r1551632 | sergeyb | 2013-12-17 17:08:29 +0000 (Tue, 17 Dec 2013) | 9 lines
Merged revisions 1551612 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1551612 | sergeyb | 2013-12-17 16:41:06 +0000 (Tue, 17 Dec 2013) | 1 line
[CXF-5423] Setting correct bus and loader before the client invocation
........
................
Modified:
cxf/branches/2.6.x-fixes/ (props changed)
cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/branches/2.7.x-fixes:r1551632
Merged /cxf/trunk:r1551612
Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=1551639&r1=1551638&r2=1551639&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java Tue Dec 17 17:37:01 2013
@@ -44,6 +44,10 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.xml.stream.XMLStreamWriter;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.common.classloader.ClassLoaderUtils.ClassLoaderHolder;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.endpoint.Endpoint;
@@ -504,49 +508,63 @@ public class ClientProxyImpl extends Abs
int bodyIndex,
Exchange exchange,
Map<String, Object> invocationContext) throws Throwable {
-
- Message outMessage = createMessage(body, ori.getHttpMethod(), headers, uri,
- exchange, invocationContext, true);
-
- outMessage.getExchange().setOneWay(ori.isOneway());
- outMessage.setContent(OperationResourceInfo.class, ori);
- setPlainOperationNameProperty(outMessage, ori.getMethodToInvoke().getName());
- outMessage.getExchange().put(Method.class, ori.getMethodToInvoke());
-
- if (body != null) {
- outMessage.put("BODY_INDEX", bodyIndex);
- outMessage.getInterceptorChain().add(new BodyWriter());
- }
-
- Map<String, Object> reqContext = getRequestContext(outMessage);
- reqContext.put(OperationResourceInfo.class.getName(), ori);
- reqContext.put("BODY_INDEX", bodyIndex);
-
- // execute chain
- try {
- outMessage.getInterceptorChain().doIntercept(outMessage);
- } catch (Exception ex) {
- outMessage.setContent(Exception.class, ex);
- }
-
- Object[] results = preProcessResult(outMessage);
- if (results != null && results.length == 1) {
- // this can happen if a connection exception has occurred and
- // failover feature used this client to invoke on a different address
- return results[0];
- }
-
- Object response = null;
+ Bus configuredBus = getConfiguration().getBus();
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(configuredBus);
+ ClassLoaderHolder origLoader = null;
try {
- response = handleResponse(outMessage, ori.getClassResourceInfo().getServiceClass());
- return response;
- } catch (Exception ex) {
- response = ex;
- throw ex;
+ ClassLoader loader = configuredBus.getExtension(ClassLoader.class);
+ if (loader != null) {
+ origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
+ }
+ Message outMessage = createMessage(body, ori.getHttpMethod(), headers, uri,
+ exchange, invocationContext, true);
+
+ outMessage.getExchange().setOneWay(ori.isOneway());
+ outMessage.setContent(OperationResourceInfo.class, ori);
+ setPlainOperationNameProperty(outMessage, ori.getMethodToInvoke().getName());
+ outMessage.getExchange().put(Method.class, ori.getMethodToInvoke());
+
+ if (body != null) {
+ outMessage.put("BODY_INDEX", bodyIndex);
+ outMessage.getInterceptorChain().add(new BodyWriter());
+ }
+
+ Map<String, Object> reqContext = getRequestContext(outMessage);
+ reqContext.put(OperationResourceInfo.class.getName(), ori);
+ reqContext.put("BODY_INDEX", bodyIndex);
+
+ // execute chain
+ try {
+ outMessage.getInterceptorChain().doIntercept(outMessage);
+ } catch (Exception ex) {
+ outMessage.setContent(Exception.class, ex);
+ }
+
+ Object[] results = preProcessResult(outMessage);
+ if (results != null && results.length == 1) {
+ // this can happen if a connection exception has occurred and
+ // failover feature used this client to invoke on a different address
+ return results[0];
+ }
+
+ Object response = null;
+ try {
+ response = handleResponse(outMessage, ori.getClassResourceInfo().getServiceClass());
+ return response;
+ } catch (Exception ex) {
+ response = ex;
+ throw ex;
+ } finally {
+ completeExchange(response, outMessage.getExchange(), true);
+ }
} finally {
- completeExchange(response, outMessage.getExchange(), true);
+ if (origLoader != null) {
+ origLoader.reset();
+ }
+ if (origBus != configuredBus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
}
-
}
@Override
Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=1551639&r1=1551638&r2=1551639&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Tue Dec 17 17:37:01 2013
@@ -42,7 +42,10 @@ import javax.ws.rs.core.UriBuilder;
import javax.xml.stream.XMLStreamWriter;
import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.common.classloader.ClassLoaderUtils.ClassLoaderHolder;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor;
@@ -820,53 +823,69 @@ public class WebClient extends AbstractC
Exchange exchange,
Map<String, Object> invContext) {
//CHECKSTYLE:ON
- URI uri = getCurrentURI();
- Message m = createMessage(body, httpMethod, headers, uri, exchange,
- invContext, false);
-
- Map<String, Object> reqContext = getRequestContext(m);
- reqContext.put(Message.HTTP_REQUEST_METHOD, httpMethod);
- reqContext.put(REQUEST_CLASS, requestClass);
- reqContext.put(REQUEST_TYPE, inGenericType);
- reqContext.put(RESPONSE_CLASS, responseClass);
- reqContext.put(RESPONSE_TYPE, outGenericType);
-
- if (body != null) {
- m.getInterceptorChain().add(new BodyWriter());
- }
- setPlainOperationNameProperty(m, httpMethod + ":" + uri.toString());
-
- try {
- m.getInterceptorChain().doIntercept(m);
- } catch (Exception ex) {
- m.setContent(Exception.class, ex);
- }
- try {
- Object[] results = preProcessResult(m);
- if (results != null && results.length == 1) {
- // this can happen if a connection exception has occurred and
- // failover feature used this client to invoke on a different address
- return (Response)results[0];
- }
- } catch (Exception ex) {
- throw ex instanceof ServerWebApplicationException
- ? (ServerWebApplicationException)ex
- : ex instanceof ClientWebApplicationException
- ? new ClientWebApplicationException(ex) : new RuntimeException(ex);
- }
-
- Response response = null;
- Object entity = null;
+ Bus configuredBus = getConfiguration().getBus();
+ Bus origBus = BusFactory.getAndSetThreadDefaultBus(configuredBus);
+ ClassLoaderHolder origLoader = null;
try {
- response = handleResponse(m, responseClass, outGenericType);
- entity = response.getEntity();
- return response;
- } catch (RuntimeException ex) {
- entity = ex;
- throw ex;
+ ClassLoader loader = configuredBus.getExtension(ClassLoader.class);
+ if (loader != null) {
+ origLoader = ClassLoaderUtils.setThreadContextClassloader(loader);
+ }
+ URI uri = getCurrentURI();
+ Message m = createMessage(body, httpMethod, headers, uri, exchange,
+ invContext, false);
+
+ Map<String, Object> reqContext = getRequestContext(m);
+ reqContext.put(Message.HTTP_REQUEST_METHOD, httpMethod);
+ reqContext.put(REQUEST_CLASS, requestClass);
+ reqContext.put(REQUEST_TYPE, inGenericType);
+ reqContext.put(RESPONSE_CLASS, responseClass);
+ reqContext.put(RESPONSE_TYPE, outGenericType);
+
+ if (body != null) {
+ m.getInterceptorChain().add(new BodyWriter());
+ }
+ setPlainOperationNameProperty(m, httpMethod + ":" + uri.toString());
+
+ try {
+ m.getInterceptorChain().doIntercept(m);
+ } catch (Exception ex) {
+ m.setContent(Exception.class, ex);
+ }
+ try {
+ Object[] results = preProcessResult(m);
+ if (results != null && results.length == 1) {
+ // this can happen if a connection exception has occurred and
+ // failover feature used this client to invoke on a different address
+ return (Response)results[0];
+ }
+ } catch (Exception ex) {
+ throw ex instanceof ServerWebApplicationException
+ ? (ServerWebApplicationException)ex
+ : ex instanceof ClientWebApplicationException
+ ? new ClientWebApplicationException(ex) : new RuntimeException(ex);
+ }
+
+ Response response = null;
+ Object entity = null;
+ try {
+ response = handleResponse(m, responseClass, outGenericType);
+ entity = response.getEntity();
+ return response;
+ } catch (RuntimeException ex) {
+ entity = ex;
+ throw ex;
+ } finally {
+ completeExchange(entity, m.getExchange(), false);
+ }
} finally {
- completeExchange(entity, m.getExchange(), false);
- }
+ if (origLoader != null) {
+ origLoader.reset();
+ }
+ if (origBus != configuredBus) {
+ BusFactory.setThreadDefaultBus(origBus);
+ }
+ }
}
protected Response handleResponse(Message outMessage, Class<?> responseClass, Type genericType) {