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 2009/03/10 22:47:47 UTC
svn commit: r752280 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java
Author: sergeyb
Date: Tue Mar 10 21:47:47 2009
New Revision: 752280
URL: http://svn.apache.org/viewvc?rev=752280&view=rev
Log:
CXF-2085 : optionally setting a thread context loader to that of the service object class loader
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=752280&r1=752279&r2=752280&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Tue Mar 10 21:47:47 2009
@@ -57,7 +57,8 @@
public class JAXRSInvoker extends AbstractInvoker {
private static final Logger LOG = LogUtils.getL7dLogger(JAXRSServiceFactoryBean.class);
private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JAXRSInvoker.class);
-
+ private static final String SERVICE_LOADER_AS_CONTEXT = "org.apache.cxf.serviceloader-context";
+
private List<Object> resourceObjects;
public JAXRSInvoker() {
@@ -115,7 +116,11 @@
}
Object result = null;
+ ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
try {
+ if (setServiceLoaderAsContextLoader(exchange.getInMessage())) {
+ Thread.currentThread().setContextClassLoader(resourceObject.getClass().getClassLoader());
+ }
result = invoke(exchange, resourceObject, methodToInvoke, params);
} catch (Fault ex) {
Response excResponse = JAXRSUtils.convertFaultToResponse(ex.getCause(),
@@ -131,6 +136,8 @@
throw ex;
}
return new MessageContentsList(excResponse);
+ } finally {
+ Thread.currentThread().setContextClassLoader(contextLoader);
}
if (ori.isSubResourceLocator()) {
@@ -194,6 +201,11 @@
return result;
}
+ private boolean setServiceLoaderAsContextLoader(Message inMessage) {
+ Object en = inMessage.getContextualProperty(SERVICE_LOADER_AS_CONTEXT);
+ return Boolean.TRUE.equals(en) || "true".equals(en);
+ }
+
public Object getServiceObject(Exchange exchange) {
return getServiceObject(exchange, resourceObjects);
}
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java?rev=752280&r1=752279&r2=752280&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerStreamingTest.java Tue Mar 10 21:47:47 2009
@@ -20,6 +20,8 @@
package org.apache.cxf.systest.jaxrs;
import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
@@ -51,7 +53,9 @@
p.setEnableStreaming(true);
sf.setProvider(p);
sf.setAddress("http://localhost:9080/");
-
+ Map<String, Object> properties = new HashMap<String, Object>();
+ properties.put("org.apache.cxf.serviceloader-context", "true");
+ sf.setProperties(properties);
sf.create();
}