[jboss-cvs] JBossAS SVN: r110692 - branches/JBPAPP_5_1_0_Final_JBPAPP-5943/webservices/src/main/org/jboss/wsf/container/jboss50/invocation.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Feb 17 00:38:52 EST 2011
Author: bmaxwell
Date: 2011-02-17 00:38:52 -0500 (Thu, 17 Feb 2011)
New Revision: 110692
Modified:
branches/JBPAPP_5_1_0_Final_JBPAPP-5943/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java
Log:
[JBPAPP-5943] Introduce ThreadLocal aware WebServiceContext.
Modified: branches/JBPAPP_5_1_0_Final_JBPAPP-5943/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java
===================================================================
--- branches/JBPAPP_5_1_0_Final_JBPAPP-5943/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java 2011-02-17 03:49:52 UTC (rev 110691)
+++ branches/JBPAPP_5_1_0_Final_JBPAPP-5943/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java 2011-02-17 05:38:52 UTC (rev 110692)
@@ -22,8 +22,11 @@
package org.jboss.wsf.container.jboss50.invocation;
import java.lang.reflect.Method;
+import java.security.Principal;
+import javax.xml.ws.EndpointReference;
import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
import javax.naming.Context;
import javax.naming.InitialContext;
@@ -41,6 +44,7 @@
import org.jboss.wsf.spi.invocation.ResourceInjector;
import org.jboss.wsf.spi.invocation.ResourceInjectorFactory;
import org.jboss.wsf.spi.metadata.injection.InjectionsMetaData;
+import org.w3c.dom.Element;
/**
* Handles invocations on JSE endpoints.
@@ -90,6 +94,9 @@
InjectionsMetaData injectionsMD = ep.getAttachment(InjectionsMetaData.class);
if (injectionsMD != null)
InjectionHelper.injectResources(targetBean, injectionsMD, ep.getJNDIContext());
+ ResourceInjector injector = resourceInjectorFactory.newResourceInjector();
+ injector.inject(targetBean, ThreadLocalAwareWebServiceContext.getInstance());
+
InjectionHelper.callPostConstructMethod(targetBean);
ep.addAttachment(PreDestroyHolder.class, new PreDestroyHolder(targetBean));
}
@@ -112,8 +119,7 @@
WebServiceContext wsContext = invContext.getAttachment(WebServiceContext.class);
if (wsContext != null)
{
- ResourceInjector injector = resourceInjectorFactory.newResourceInjector();
- injector.inject(targetBean, wsContext);
+ ThreadLocalAwareWebServiceContext.getInstance().setMessageContext(wsContext);
}
Method method = getImplMethod(targetBean.getClass(), epInv.getJavaMethod());
@@ -124,6 +130,10 @@
{
handleInvocationException(e);
}
+ finally
+ {
+ ThreadLocalAwareWebServiceContext.getInstance().setMessageContext(null);
+ }
}
protected Method getImplMethod(Class<?> implClass, Method seiMethod) throws ClassNotFoundException, NoSuchMethodException
@@ -144,4 +154,52 @@
Method implMethod = implClass.getMethod(methodName, paramTypes);
return implMethod;
}
+
+ private static final class ThreadLocalAwareWebServiceContext implements WebServiceContext
+ {
+ private static final ThreadLocalAwareWebServiceContext SINGLETON = new ThreadLocalAwareWebServiceContext();
+ private final ThreadLocal<WebServiceContext> contexts = new InheritableThreadLocal<WebServiceContext>();
+
+ private static ThreadLocalAwareWebServiceContext getInstance()
+ {
+ return SINGLETON;
+ }
+
+ private void setMessageContext(final WebServiceContext ctx)
+ {
+ this.contexts.set(ctx);
+ }
+
+ public EndpointReference getEndpointReference(Element... referenceParameters)
+ {
+ final WebServiceContext delegee = this.contexts.get();
+ return delegee == null ? null : delegee.getEndpointReference(referenceParameters);
+ }
+
+ public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, Element... referenceParameters)
+ {
+ final WebServiceContext delegee = this.contexts.get();
+ return delegee == null ? null : delegee.getEndpointReference(clazz, referenceParameters);
+ }
+
+ public MessageContext getMessageContext()
+ {
+ final WebServiceContext delegee = this.contexts.get();
+ return delegee == null ? null : delegee.getMessageContext();
+ }
+
+ public Principal getUserPrincipal()
+ {
+ final WebServiceContext delegee = this.contexts.get();
+ return delegee == null ? null : delegee.getUserPrincipal();
+ }
+
+ public boolean isUserInRole(String role)
+ {
+ final WebServiceContext delegee = this.contexts.get();
+ return delegee == null ? false : delegee.isUserInRole(role);
+ }
+
+ }
+
}
More information about the jboss-cvs-commits
mailing list