You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2008/10/06 04:02:41 UTC

svn commit: r701913 - in /geronimo/server/trunk/plugins/axis2: geronimo-axis2-ejb/src/main/java/org/apache/geronimo/axis2/ejb/ geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/ geronimo...

Author: gawor
Date: Sun Oct  5 19:02:40 2008
New Revision: 701913

URL: http://svn.apache.org/viewvc?rev=701913&view=rev
Log:
get addressing somewhat working (GERONIMO-4327)

Modified:
    geronimo/server/trunk/plugins/axis2/geronimo-axis2-ejb/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java
    geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java
    geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOEndpointLifecycleManager.java
    geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContext.java
    geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/resources/META-INF/geronimo-axis2.xml

Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2-ejb/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2-ejb/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java?rev=701913&r1=701912&r2=701913&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2-ejb/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2-ejb/src/main/java/org/apache/geronimo/axis2/ejb/EJBMessageReceiver.java Sun Oct  5 19:02:40 2008
@@ -28,12 +28,16 @@
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.MessageReceiver;
 import org.apache.axis2.jaxws.ExceptionFactory;
+import org.apache.axis2.jaxws.context.factory.MessageContextFactory;
+import org.apache.axis2.jaxws.context.utils.ContextUtils;
 import org.apache.axis2.jaxws.core.MessageContext;
 import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.EndpointInterfaceDescription;
 import org.apache.axis2.jaxws.description.OperationDescription;
 import org.apache.axis2.jaxws.handler.SoapMessageContext;
 import org.apache.axis2.jaxws.i18n.Messages;
+import org.apache.axis2.jaxws.util.Constants;
+import org.apache.axis2.util.ThreadContextMigratorUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.openejb.ApplicationException;
@@ -61,12 +65,17 @@
         requestMsgCtx.setOperationName(requestMsgCtx.getAxisMessageContext().getAxisOperation().getName());
         requestMsgCtx.setEndpointDescription(getEndpointDescription(requestMsgCtx));
         
+        SoapMessageContext jaxwsContext =
+            MessageContextFactory.createSoapMessageContext(requestMsgCtx);
+        
         Method method = null;
         if (Provider.class.isAssignableFrom(this.serviceImplClass)) {
             method = getProviderMethod();
+            ContextUtils.addWSDLProperties_provider(requestMsgCtx, jaxwsContext);
         } else {
             requestMsgCtx.setOperationDescription(getOperationDescription(requestMsgCtx));
             method = getServiceMethod(requestMsgCtx);
+            ContextUtils.addWSDLProperties(requestMsgCtx, jaxwsContext);
         }
         
         if (LOG.isDebugEnabled()) {
@@ -74,8 +83,6 @@
         }
         
         EJBInterceptor interceptor = new EJBInterceptor(this.container, requestMsgCtx);
-
-        SoapMessageContext jaxwsContext = new SoapMessageContext(requestMsgCtx);
         EJBAddressingSupport wsaSupport = new EJBAddressingSupport(jaxwsContext);
         Object[] arguments = { jaxwsContext, interceptor, wsaSupport };
         
@@ -85,6 +92,9 @@
         
         method = getMostSpecificMethod(method, callInterface);
         
+        //This assumes that we are on the ultimate execution thread
+        ThreadContextMigratorUtil.performMigrationToThread(Constants.THREAD_CONTEXT_MIGRATOR_LIST_ID, 
+                                                           axisMsgCtx);        
         try {
             Object res = container.invoke(this.deploymentInfo.getDeploymentID(), callInterface, method, arguments, null);
             // TODO: update response message with new response value?
@@ -96,6 +106,9 @@
             }
         } catch (Exception e) {
             throw AxisFault.makeFault(e);
+        } finally {
+            ThreadContextMigratorUtil.performThreadCleanup(Constants.THREAD_CONTEXT_MIGRATOR_LIST_ID, 
+                                                           axisMsgCtx);
         }
     }
     

Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java?rev=701913&r1=701912&r2=701913&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java Sun Oct  5 19:02:40 2008
@@ -20,6 +20,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.PrintWriter;
 import java.net.HttpURLConnection;
+import java.net.URI;
 import java.net.URL;
 import java.util.List;
 
@@ -27,6 +28,7 @@
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
 import javax.xml.ws.Binding;
 import javax.xml.ws.WebServiceException;
 import javax.xml.ws.handler.Handler;
@@ -41,11 +43,14 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.TransportInDescription;
 import org.apache.axis2.description.TransportOutDescription;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.Handler.InvocationResponse;
-import org.apache.axis2.jaxws.binding.BindingImpl;
+import org.apache.axis2.jaxws.addressing.util.EndpointContextMap;
+import org.apache.axis2.jaxws.addressing.util.EndpointContextMapManager;
+import org.apache.axis2.jaxws.addressing.util.EndpointKey;
 import org.apache.axis2.jaxws.binding.BindingUtils;
 import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.impl.DescriptionUtils;
@@ -98,6 +103,7 @@
     protected Binding binding;
     protected JAXWSAnnotationProcessor annotationProcessor;
     protected Context context;
+    protected String address;
 
     public Axis2WebServiceContainer(PortInfo portInfo,
                                     String endpointClassName,
@@ -152,9 +158,25 @@
          * HandlerResolver.
          */        
         FactoryRegistry.setFactory(HandlerLifecycleManagerFactory.class, 
-                                   new GeronimoHandlerLifecycleManagerFactory());                                   
+                                   new GeronimoHandlerLifecycleManagerFactory());     
+        
+        configureAddressing();
+        
+        this.service.addParameter(new Parameter(org.apache.axis2.jaxws.spi.Constants.CACHE_CLASSLOADER, classLoader));
     }  
 
+    static String getBaseUri(URI request) {
+        return request.getScheme() + "://" + request.getHost() + ":" + request.getPort() + request.getPath();
+    }
+    
+    synchronized void updateAddress(Request request) {
+        if (this.address == null) {
+            String requestAddress = getBaseUri(request.getURI());
+            this.service.setEPRs(new String [] {requestAddress});
+            this.address = requestAddress;
+        }
+    }
+    
     protected AxisServiceGenerator createServiceGenerator() {
         return new AxisServiceGenerator();
     }
@@ -180,6 +202,8 @@
             LOG.debug("Target URI: " + request.getURI());
         }
 
+        updateAddress(request);
+        
         MessageContext msgContext = new MessageContext();
         msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTP);
         msgContext.setProperty(MessageContext.REMOTE_ADDR, request.getRemoteAddr());
@@ -429,14 +453,25 @@
         }
     }    
     
+    protected void configureAddressing() throws Exception {
+        EndpointDescription desc = AxisServiceGenerator.getEndpointDescription(this.service);
+        
+        QName serviceName = desc.getServiceQName();
+        QName portName = desc.getPortQName();
+        EndpointKey key = new EndpointKey(serviceName, portName);
+        
+        EndpointContextMapManager.setEndpointContextMap(null);
+        EndpointContextMap map = EndpointContextMapManager.getEndpointContextMap();
+        map.put(key, this.service);
+        
+        configurationContext.setProperty(org.apache.axis2.jaxws.Constants.ENDPOINT_CONTEXT_MAP, map);
+    }
+    
     /*
      * Gets the right handlers for the port/service/bindings and performs injection.
      */
     protected void configureHandlers() throws Exception {
         EndpointDescription desc = AxisServiceGenerator.getEndpointDescription(this.service);
-        if (desc == null) {
-            throw new RuntimeException("No EndpointDescription for service");
-        }
         
         String xml = this.portInfo.getHandlersAsXML();
         HandlerChainsType handlerChains = null;

Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOEndpointLifecycleManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOEndpointLifecycleManager.java?rev=701913&r1=701912&r2=701913&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOEndpointLifecycleManager.java (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOEndpointLifecycleManager.java Sun Oct  5 19:02:40 2008
@@ -19,12 +19,13 @@
 package org.apache.geronimo.axis2.pojo;
 
 import org.apache.axis2.context.ServiceContext;
+import org.apache.axis2.jaxws.context.WebServiceContextImpl;
 import org.apache.axis2.jaxws.context.factory.MessageContextFactory;
-import org.apache.axis2.jaxws.context.utils.ContextUtils;
 import org.apache.axis2.jaxws.core.MessageContext;
 import org.apache.axis2.jaxws.handler.SoapMessageContext;
 import org.apache.axis2.jaxws.server.endpoint.lifecycle.EndpointLifecycleException;
 import org.apache.axis2.jaxws.server.endpoint.lifecycle.EndpointLifecycleManager;
+import org.apache.axis2.jaxws.server.endpoint.lifecycle.impl.EndpointLifecycleManagerImpl;
 
 public class POJOEndpointLifecycleManager implements EndpointLifecycleManager {
         
@@ -37,19 +38,20 @@
         ServiceContext serviceContext = msgContext.getServiceContext();                
         Object instance = serviceContext.getProperty(ServiceContext.SERVICE_OBJECT);
         
+        SoapMessageContext soapMessageContext =
+            MessageContextFactory.createSoapMessageContext(context);
+        WebServiceContextImpl wsContext = new WebServiceContextImpl();
+        wsContext.setSoapMessageContext(soapMessageContext);
+        
         // associate JAX-WS MessageContext with the thread
-        POJOWebServiceContext.setMessageContext(createSOAPMessageContext(context)); 
+        POJOWebServiceContext.set(wsContext);
+        
+        // XXX: JUST A HACK
+        serviceContext.setProperty(EndpointLifecycleManagerImpl.WEBSERVICE_MESSAGE_CONTEXT, wsContext);
         
         return instance;
     }
     
-    private javax.xml.ws.handler.MessageContext createSOAPMessageContext(MessageContext mc) {
-        SoapMessageContext soapMessageContext =
-                (SoapMessageContext)MessageContextFactory.createSoapMessageContext(mc);
-        ContextUtils.addProperties(soapMessageContext, mc);
-        return soapMessageContext;
-    }
-  
     public void invokePostConstruct() throws EndpointLifecycleException { 
     }
 

Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContext.java?rev=701913&r1=701912&r2=701913&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContext.java (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/pojo/POJOWebServiceContext.java Sun Oct  5 19:02:40 2008
@@ -66,13 +66,11 @@
         return (wsContext == null) ? null : wsContext.getEndpointReference(clazz, referenceParameters);
     }
     
-    public static void setMessageContext(MessageContext ctx) {
-        WebServiceContextImpl wsContext = new WebServiceContextImpl();
-        wsContext.setSoapMessageContext(ctx);
-        context.set(wsContext);
+    static void set(WebServiceContextImpl ctx) {
+        context.set(ctx);
     }
 
-    public static void clear() {
+    static void clear() {
         context.set(null);
     }
     

Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/resources/META-INF/geronimo-axis2.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/resources/META-INF/geronimo-axis2.xml?rev=701913&r1=701912&r2=701913&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/resources/META-INF/geronimo-axis2.xml (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/resources/META-INF/geronimo-axis2.xml Sun Oct  5 19:02:40 2008
@@ -66,6 +66,10 @@
     <!-- Following parameter will set the host name for the epr-->
     <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
 
+    <threadContextMigrators>
+        <threadContextMigrator listId="JAXWS-ThreadContextMigrator-List" class="org.apache.axis2.jaxws.addressing.migrator.EndpointContextMapMigrator"/>
+    </threadContextMigrators>
+
     <!-- ================================================= -->
     <!-- Message Receivers -->
     <!-- ================================================= -->