[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