Author: rmannibucau
Date: Tue Mar 19 11:17:37 2013
New Revision: 1458224
URL: http://svn.apache.org/r1458224
Log:
using app classloader instead of class classloader for cxf webservices to be
sure to get the right initial context - in embedded mode class classloader is
often appclassloader
Modified:
tomee/tomee/trunk/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/AxisService.java
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java
tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
Modified:
tomee/tomee/trunk/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/AxisService.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/AxisService.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/AxisService.java
(original)
+++
tomee/tomee/trunk/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/AxisService.java
Tue Mar 19 11:17:37 2013
@@ -102,7 +102,7 @@ public class AxisService extends WsServi
}
}
- protected HttpListener createPojoWsContainer(URL moduleBaseUrl, PortData
port, String serviceId, Class target, Context context, String contextRoot,
Map<String, Object> bdgs, ServiceConfiguration serviceInfos) throws Exception {
+ protected HttpListener createPojoWsContainer(ClassLoader loader, URL
moduleBaseUrl, PortData port, String serviceId, Class target, Context context,
String contextRoot, Map<String, Object> bdgs, ServiceConfiguration
serviceInfos) throws Exception {
ClassLoader classLoader = target.getClassLoader();
// todo build JaxRpcServiceInfo in assembler
Modified:
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
(original)
+++
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
Tue Mar 19 11:17:37 2013
@@ -197,9 +197,9 @@ public class CxfRsHttpListener implement
}
@Override
- public void deployPojo(String contextRoot, String fullContext, Class<?>
loadedClazz, Application app, Collection<Injection> injections,
+ public void deployPojo(ClassLoader loader, String contextRoot, String
fullContext, Class<?> loadedClazz, Application app, Collection<Injection>
injections,
Context context, WebBeansContext owbCtx,
Collection<Object> additionalProviders, ServiceConfiguration configuration) {
- deploy(contextRoot, loadedClazz, fullContext, new
OpenEJBPerRequestPojoResourceProvider(loadedClazz, injections, context, owbCtx),
+ deploy(contextRoot, loadedClazz, fullContext, new
OpenEJBPerRequestPojoResourceProvider(loader, loadedClazz, injections, context,
owbCtx),
null, app, null, additionalProviders,
configuration);
}
@@ -325,7 +325,7 @@ public class CxfRsHttpListener implement
final Object proxy = ProxyEJB.subclassProxy(bc);
factory.setResourceProvider(clazz, new
NoopResourceProvider(bc.getBeanClass(), proxy));
} else {
- factory.setResourceProvider(clazz, new
OpenEJBPerRequestPojoResourceProvider(clazz, injections, context, owbCtx));
+ factory.setResourceProvider(clazz, new
OpenEJBPerRequestPojoResourceProvider(classLoader, clazz, injections, context,
owbCtx));
}
}
Modified:
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
(original)
+++
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
Tue Mar 19 11:17:37 2013
@@ -65,10 +65,10 @@ public class OpenEJBPerRequestPojoResour
private BeanCreator creator;
private final Collection<Class<?>> contextTypes = new HashSet<Class<?>>();
- public OpenEJBPerRequestPojoResourceProvider(final Class<?> clazz, final
Collection<Injection> injectionCollection, final Context initialContext, final
WebBeansContext owbCtx) {
+ public OpenEJBPerRequestPojoResourceProvider(final ClassLoader loader,
final Class<?> clazz, final Collection<Injection> injectionCollection, final
Context initialContext, final WebBeansContext owbCtx) {
injections = injectionCollection;
webbeansContext = owbCtx;
- classLoader = clazz.getClassLoader();
+ classLoader = loader;
context = (Context) Proxy.newProxyInstance(classLoader, new
Class<?>[]{Context.class}, new InitialContextWrapper(initialContext));
constructor = ResourceUtils.findResourceConstructor(clazz, true);
Modified:
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
(original)
+++
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
Tue Mar 19 11:17:37 2013
@@ -68,7 +68,7 @@ public class CxfService extends WsServic
}
}
- protected HttpListener createPojoWsContainer(URL moduleBaseUrl, PortData
port, String serviceId, Class target, Context context, String contextRoot,
Map<String, Object> bdgs, ServiceConfiguration services) {
+ protected HttpListener createPojoWsContainer(ClassLoader loader, URL
moduleBaseUrl, PortData port, String serviceId, Class target, Context context,
String contextRoot, Map<String, Object> bdgs, ServiceConfiguration services) {
Bus bus = CxfUtil.getBus();
final ClassLoader oldLoader =
Thread.currentThread().getContextClassLoader();
@@ -76,7 +76,7 @@ public class CxfService extends WsServic
try {
CxfCatalogUtils.loadOASISCatalog(bus, moduleBaseUrl,
"META-INF/jax-ws-catalog.xml");
- PojoWsContainer container = new PojoWsContainer(bus, port,
context, target, bdgs, services);
+ PojoWsContainer container = new PojoWsContainer(loader, bus, port,
context, target, bdgs, services);
container.start();
wsContainers.put(serviceId, container);
return container;
Modified:
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
(original)
+++
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
Tue Mar 19 11:17:37 2013
@@ -44,7 +44,7 @@ import static org.apache.openejb.Injecti
public class PojoEndpoint extends CxfEndpoint {
private InjectionProcessor<Object> injectionProcessor;
- public PojoEndpoint(Bus bus, PortData port, Context context, Class<?>
instance,
+ public PojoEndpoint(ClassLoader loader, Bus bus, PortData port, Context
context, Class<?> instance,
HTTPTransportFactory httpTransportFactory,
Map<String, Object> bindings, ServiceConfiguration
config) {
super(bus, port, context, instance, httpTransportFactory, config);
@@ -65,7 +65,9 @@ public class PojoEndpoint extends CxfEnd
service = serviceFactory.create();
- // instantiate and inject resources into service
+ // instantiate and inject resources into service using the app
classloader to be sure to get the right InitialContext
+ final ClassLoader old = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(loader);
try {
injectionProcessor = new InjectionProcessor<Object>(instance,
port.getInjections(), null, null, unwrap(context), bindings);
injectionProcessor.createInstance();
@@ -74,6 +76,8 @@ public class PojoEndpoint extends CxfEnd
injectCxfResources(implementor);
} catch (Exception e) {
throw new WebServiceException("Service resource injection failed",
e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(old);
}
service.setInvoker(new JAXWSMethodInvoker(implementor));
Modified:
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
(original)
+++
tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
Tue Mar 19 11:17:37 2013
@@ -29,17 +29,19 @@ public class PojoWsContainer extends Cxf
private final Context context;
private final Class target;
private final Map<String, Object> bindings;
+ private final ClassLoader loader;
- public PojoWsContainer(Bus bus, PortData port, Context context, Class
target,
+ public PojoWsContainer(ClassLoader loader, Bus bus, PortData port, Context
context, Class target,
Map<String, Object> bdgs, ServiceConfiguration
configuration) {
super(bus, port, configuration);
if (target == null) throw new NullPointerException("target is null");
this.context = context;
this.target = target;
this.bindings = bdgs;
+ this.loader = loader;
}
protected PojoEndpoint createEndpoint() {
- return new PojoEndpoint(bus, port, context, target,
httpTransportFactory, bindings, serviceConfiguration);
+ return new PojoEndpoint(loader, bus, port, context, target,
httpTransportFactory, bindings, serviceConfiguration);
}
}
Modified:
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
(original)
+++
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
Tue Mar 19 11:17:37 2013
@@ -678,7 +678,7 @@ public abstract class RESTService implem
final RsRegistry.AddressInfo address =
rsRegistry.createRsHttpListener(web, listener, classLoader,
nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
services.add(new DeployedService(address.complete, contextRoot,
loadedClazz.getName()));
- listener.deployPojo(contextRoot, getFullContext(address.base,
contextRoot), loadedClazz, app, injections, context, owbCtx,
+ listener.deployPojo(classLoader, contextRoot,
getFullContext(address.base, contextRoot), loadedClazz, app, injections,
context, owbCtx,
additionalProviders, config);
LOGGER.info("REST Service: " + address.complete + " -> Pojo " +
loadedClazz.getName());
Modified:
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java
(original)
+++
tomee/tomee/trunk/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java
Tue Mar 19 11:17:37 2013
@@ -32,8 +32,9 @@ public interface RsHttpListener extends
void deploySingleton(String webContext, String fullContext, Object o,
Application appInstance,
Collection<Object> additionalProviders,
ServiceConfiguration serviceInfos);
- void deployPojo(String webContext, String fullContext, Class<?>
loadedClazz, Application app, Collection<Injection> injections,
- Context context, WebBeansContext owbCtx,
Collection<Object> additionalProviders, ServiceConfiguration serviceInfos);
+ void deployPojo(ClassLoader classloader, String webContext, String
fullContext, Class<?> loadedClazz, Application app,
+ Collection<Injection> injections, Context context,
WebBeansContext owbCtx,
+ Collection<Object> additionalProviders,
ServiceConfiguration serviceInfos);
void deployEJB(String webContext, String fullContext, BeanContext
beanContext, Collection<Object> additionalProviders, ServiceConfiguration
serviceInfos);
Modified:
tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java?rev=1458224&r1=1458223&r2=1458224&view=diff
==============================================================================
---
tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
(original)
+++
tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
Tue Mar 19 11:17:37 2013
@@ -207,7 +207,9 @@ public abstract class WsService implemen
protected abstract void destroyEjbWsContainer(String deploymentId);
- protected abstract HttpListener createPojoWsContainer(URL moduleBaseUrl,
PortData port, String serviceId, Class target, Context context, String
contextRoot, Map<String, Object> bindings, ServiceConfiguration configuration)
throws Exception;
+ protected abstract HttpListener createPojoWsContainer(ClassLoader loader,
URL moduleBaseUrl, PortData port, String serviceId,
+ Class target,
Context context, String contextRoot,
+ Map<String, Object>
bindings, ServiceConfiguration configuration) throws Exception;
protected abstract void destroyPojoWsContainer(String serviceId);
@@ -370,7 +372,7 @@ public abstract class WsService implemen
pojoConfiguration = PojoUtil.findPojoConfig(pojoConfiguration,
appInfo, webApp);
- final HttpListener container =
createPojoWsContainer(moduleBaseUrl, port, portInfo.serviceLink,
+ final HttpListener container =
createPojoWsContainer(classLoader, moduleBaseUrl, port, portInfo.serviceLink,
target,
context, webApp.contextRoot, bindings,
new
ServiceConfiguration(PojoUtil.findConfiguration(pojoConfiguration,
target.getName()), appInfo.services));