[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