[jboss-cvs] JBossAS SVN: r108085 - branches/JBPAPP_5_0_1_GA_JBPAPP-5053/webservices/src/main/org/jboss/wsf/container/jboss50/invocation.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Sep 9 13:10:57 EDT 2010
Author: darran.lofthouse at jboss.com
Date: 2010-09-09 13:10:56 -0400 (Thu, 09 Sep 2010)
New Revision: 108085
Modified:
branches/JBPAPP_5_0_1_GA_JBPAPP-5053/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java
Log:
[JBPAPP-5053] Introduce ThreadLocal aware WebServiceContext.
Modified: branches/JBPAPP_5_0_1_GA_JBPAPP-5053/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java
===================================================================
--- branches/JBPAPP_5_0_1_GA_JBPAPP-5053/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java 2010-09-09 16:03:13 UTC (rev 108084)
+++ branches/JBPAPP_5_0_1_GA_JBPAPP-5053/webservices/src/main/org/jboss/wsf/container/jboss50/invocation/InvocationHandlerJSE.java 2010-09-09 17:10:56 UTC (rev 108085)
@@ -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 org.jboss.wsf.common.JavaUtils;
import org.jboss.wsf.common.injection.InjectionHelper;
@@ -37,6 +40,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.
@@ -83,6 +87,9 @@
}
InjectionHelper.injectResources(targetBean, ep.getAttachment(InjectionsMetaData.class));
+ ResourceInjector injector = resourceInjectorFactory.newResourceInjector();
+ injector.inject(targetBean, ThreadLocalAwareWebServiceContext.getInstance());
+
InjectionHelper.callPostConstructMethod(targetBean);
ep.addAttachment(PreDestroyHolder.class, new PreDestroyHolder(targetBean));
}
@@ -100,8 +107,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());
@@ -112,6 +118,10 @@
{
handleInvocationException(e);
}
+ finally
+ {
+ ThreadLocalAwareWebServiceContext.getInstance().setMessageContext(null);
+ }
}
protected Method getImplMethod(Class<?> implClass, Method seiMethod) throws ClassNotFoundException, NoSuchMethodException
@@ -132,4 +142,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