[jboss-cvs] JBossAS SVN: r65832 - in branches/Branch_4_2: ejb3/src/main/org/jboss/ejb3/stateless and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Oct 4 06:59:24 EDT 2007


Author: wolfc
Date: 2007-10-04 06:59:24 -0400 (Thu, 04 Oct 2007)
New Revision: 65832

Added:
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/webservice/
   branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/RemoteInterface.java
Modified:
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/stateless/StatelessBeanContext.java
   branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/webservice/WebServiceContextImpl.java
   branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceContextPropertyInjector.java
   branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/EndpointEJB.java
   branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/unit/ContextEJBTestCase.java
   branches/Branch_4_2/webservices/src/main/org/jboss/wsf/container/jboss42/InvocationHandlerEJB3.java
Log:
EJBTHREE-1055: injection of web service context at the right time

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/stateless/StatelessBeanContext.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/stateless/StatelessBeanContext.java	2007-10-04 08:45:15 UTC (rev 65831)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/stateless/StatelessBeanContext.java	2007-10-04 10:59:24 UTC (rev 65832)
@@ -24,40 +24,45 @@
 import javax.xml.ws.WebServiceContext;
 
 import org.jboss.ejb3.BaseContext;
-import org.jboss.injection.lang.reflect.BeanProperty;
 
-
 /**
- * Comment
+ * A stateless instance linked to its container with associated
+ * meta data.
  *
  * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
  * @version $Revision$
  */
 public class StatelessBeanContext extends BaseContext
 {
    private javax.xml.rpc.handler.MessageContext jaxrpcMessageContext;
-   private BeanProperty webServiceContextProperty;
+   private WebServiceContext webServiceContext;
    
    public javax.xml.rpc.handler.MessageContext getMessageContextJAXRPC()
    {
       return jaxrpcMessageContext;
    }
-
+   
+   /**
+    * Returns the web service context associated with this bean or null
+    * if no web service context is a associated.
+    * @return
+    */
+   public WebServiceContext getWebServiceContext()
+   {
+      return webServiceContext;
+   }
+   
    public void setMessageContextJAXRPC(javax.xml.rpc.handler.MessageContext rpcMessageContext)
    {
       this.jaxrpcMessageContext = rpcMessageContext;
    }
 
-   public BeanProperty getWebServiceContextProperty()
+   public void setWebServiceContext(WebServiceContext webServiceContext)
    {
-      return webServiceContextProperty;
+      this.webServiceContext = webServiceContext;
    }
-
-   public void setWebServiceContextProperty(BeanProperty webServiceContextProperty)
-   {
-      this.webServiceContextProperty = webServiceContextProperty;
-   }
-
+   
    public void remove()
    {
    }

Copied: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/webservice (from rev 59889, trunk/ejb3/src/main/org/jboss/ejb3/webservice)

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/webservice/WebServiceContextImpl.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/webservice/WebServiceContextImpl.java	2007-01-21 17:44:42 UTC (rev 59889)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/ejb3/webservice/WebServiceContextImpl.java	2007-10-04 10:59:24 UTC (rev 65832)
@@ -47,20 +47,28 @@
       this.ctx = ctx;
    }
    
+   protected WebServiceContext getDelegate()
+   {
+      WebServiceContext wsc = ctx.getWebServiceContext();
+      if(wsc == null)
+         throw new IllegalStateException("No web service context associated with this bean");
+      return wsc;
+   }
+   
    /* (non-Javadoc)
     * @see javax.xml.ws.WebServiceContext#getEndpointReference(org.w3c.dom.Element[])
     */
-   public EndpointReference getEndpointReference(Element... arg0)
+   public EndpointReference getEndpointReference(Element... referenceParameters)
    {
-      throw new UnsupportedOperationException();
+      return getDelegate().getEndpointReference(referenceParameters);
    }
 
    /* (non-Javadoc)
     * @see javax.xml.ws.WebServiceContext#getEndpointReference(java.lang.Class, org.w3c.dom.Element[])
     */
-   public <T extends EndpointReference> T getEndpointReference(Class<T> arg0, Element... arg1)
+   public <T extends EndpointReference> T getEndpointReference(Class<T> clazz, Element... referenceParameters)
    {
-      throw new UnsupportedOperationException();
+      return getDelegate().getEndpointReference(clazz, referenceParameters);
    }
 
    /* (non-Javadoc)
@@ -68,10 +76,7 @@
     */
    public MessageContext getMessageContext()
    {
-      MessageContext messageContext = ctx.getMessageContextJAXWS();
-      if(messageContext == null)
-         throw new IllegalStateException("No message context found");
-      return messageContext;
+      return getDelegate().getMessageContext();
    }
 
    /* (non-Javadoc)
@@ -79,15 +84,15 @@
     */
    public Principal getUserPrincipal()
    {
-      throw new UnsupportedOperationException();
+      return getDelegate().getUserPrincipal();
    }
 
    /* (non-Javadoc)
     * @see javax.xml.ws.WebServiceContext#isUserInRole(java.lang.String)
     */
-   public boolean isUserInRole(String arg0)
+   public boolean isUserInRole(String role)
    {
-      throw new UnsupportedOperationException();
+      return getDelegate().isUserInRole(role);
    }
 
 }

Modified: branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceContextPropertyInjector.java
===================================================================
--- branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceContextPropertyInjector.java	2007-10-04 08:45:15 UTC (rev 65831)
+++ branches/Branch_4_2/ejb3/src/main/org/jboss/injection/WebServiceContextPropertyInjector.java	2007-10-04 10:59:24 UTC (rev 65832)
@@ -21,17 +21,15 @@
  */
 package org.jboss.injection;
 
-import javax.ejb.EJBContext;
-
 import org.jboss.ejb3.BeanContext;
 import org.jboss.ejb3.stateless.StatelessBeanContext;
+import org.jboss.ejb3.webservice.WebServiceContextImpl;
 import org.jboss.injection.lang.reflect.BeanProperty;
 
 /**
  * Injects a WebServiceContext into a bean.
  *
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @author Thomas.Diesler at jboss.com
  * @version $Revision: $
  */
 public class WebServiceContextPropertyInjector implements Injector
@@ -53,9 +51,10 @@
    public void inject(BeanContext ctx)
    {
       if(!(ctx instanceof StatelessBeanContext))
+      {
          throw new RuntimeException("Can only inject on stateless bean context");
-      
-      ((StatelessBeanContext)ctx).setWebServiceContextProperty(property);
+      }
+      property.set(ctx.getInstance(), new WebServiceContextImpl((StatelessBeanContext) ctx));
    }
    
    public Class getInjectionClass()

Modified: branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/EndpointEJB.java
===================================================================
--- branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/EndpointEJB.java	2007-10-04 08:45:15 UTC (rev 65831)
+++ branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/EndpointEJB.java	2007-10-04 10:59:24 UTC (rev 65832)
@@ -38,7 +38,7 @@
 @WebService(endpointInterface = "org.jboss.ejb3.test.jaxws.EndpointInterface", serviceName = "TestService", targetNamespace = "http://org.jboss.ws/jaxws/context")
 @WebContext(contextRoot="jaxws-context", urlPattern="/testService")
 @Stateless
-public class EndpointEJB
+public class EndpointEJB implements RemoteInterface
 {
    @Resource
    WebServiceContext wsCtx;
@@ -93,4 +93,9 @@
       soapElement = (SOAPElement)soapElement.getChildElements().next();
       return soapElement.getValue();
    }
+   
+   public void someMethod()
+   {
+      wsCtx.getMessageContext();
+   }
 }

Added: branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/RemoteInterface.java
===================================================================
--- branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/RemoteInterface.java	                        (rev 0)
+++ branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/RemoteInterface.java	2007-10-04 10:59:24 UTC (rev 65832)
@@ -0,0 +1,34 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+  *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.test.jaxws;
+
+import javax.ejb.Remote;
+
+/**
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at Remote
+public interface RemoteInterface
+{
+   void someMethod();
+}


Property changes on: branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/RemoteInterface.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/unit/ContextEJBTestCase.java
===================================================================
--- branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/unit/ContextEJBTestCase.java	2007-10-04 08:45:15 UTC (rev 65831)
+++ branches/Branch_4_2/ejb3/src/test/org/jboss/ejb3/test/jaxws/unit/ContextEJBTestCase.java	2007-10-04 10:59:24 UTC (rev 65832)
@@ -27,6 +27,9 @@
 
 import org.jboss.ejb3.test.JBossWithKnownIssuesTestCase;
 import org.jboss.ejb3.test.jaxws.EndpointInterface;
+import org.jboss.ejb3.test.jaxws.RemoteInterface;
+
+import javax.ejb.EJBException;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Service;
 import javax.xml.ws.soap.SOAPFaultException;
@@ -95,6 +98,26 @@
       }
    }
    
+   public void testRemoteInterface() throws Exception
+   {
+      RemoteInterface bean = (RemoteInterface) getInitialContext().lookup("EndpointEJB/remote");
+      try
+      {
+         bean.someMethod();
+         fail("Accessing WebServiceContext outside a WS call is not valid");
+      }
+      catch(IllegalStateException e)
+      {
+         // perfect
+      }
+      catch(EJBException e)
+      {
+         assertNotNull(e.getCause());
+         assertTrue(e.getCause() instanceof IllegalStateException);
+         // less than perfect, but currently the case
+      }
+   }
+   
    public void testService2() throws Exception
    {
       log.info("In case of connection exception, there is a host name defined in the wsdl, which used to be '@jbosstest.host.name@'");

Modified: branches/Branch_4_2/webservices/src/main/org/jboss/wsf/container/jboss42/InvocationHandlerEJB3.java
===================================================================
--- branches/Branch_4_2/webservices/src/main/org/jboss/wsf/container/jboss42/InvocationHandlerEJB3.java	2007-10-04 08:45:15 UTC (rev 65831)
+++ branches/Branch_4_2/webservices/src/main/org/jboss/wsf/container/jboss42/InvocationHandlerEJB3.java	2007-10-04 10:59:24 UTC (rev 65832)
@@ -126,16 +126,12 @@
          StatelessBeanContext sbc = (StatelessBeanContext)beanCtx;
          sbc.setMessageContextJAXRPC(jaxrpcMessageContext);
 
-         BeanProperty beanProp = sbc.getWebServiceContextProperty();
-         if (beanProp != null)
-         {
-            EJBContext ejbCtx = beanCtx.getEJBContext();
-            SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
-            WebServiceContextFactory factory = spiProvider.getSPI(WebServiceContextFactory.class);
-            ExtensibleWebServiceContext wsContext = factory.newWebServiceContext(InvocationType.JAXWS_EJB3, jaxwsMessageContext);
-            wsContext.addAttachment(EJBContext.class, ejbCtx);
-            beanProp.set(beanCtx.getInstance(), wsContext);
-         }
+         EJBContext ejbCtx = beanCtx.getEJBContext();
+         SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
+         WebServiceContextFactory factory = spiProvider.getSPI(WebServiceContextFactory.class);
+         ExtensibleWebServiceContext wsContext = factory.newWebServiceContext(InvocationType.JAXWS_EJB3, jaxwsMessageContext);
+         wsContext.addAttachment(EJBContext.class, ejbCtx);
+         sbc.setWebServiceContext(wsContext);
       }
 
       public void released(BeanContext beanCtx)
@@ -143,9 +139,7 @@
          StatelessBeanContext sbc = (StatelessBeanContext)beanCtx;
          sbc.setMessageContextJAXRPC(null);
 
-         BeanProperty beanProp = sbc.getWebServiceContextProperty();
-         if (beanProp != null)
-            beanProp.set(beanCtx.getInstance(), null);
+         sbc.setWebServiceContext(null);
       }
    }
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list