You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2007/03/30 07:04:27 UTC

svn commit: r523939 - in /incubator/cxf/trunk: integration/jbi/src/main/java/org/apache/cxf/jbi/transport/ rt/core/src/main/java/org/apache/cxf/endpoint/ rt/transports/http/src/main/java/org/apache/cxf/transport/http/ rt/transports/http/src/main/resour...

Author: jliu
Date: Thu Mar 29 22:04:25 2007
New Revision: 523939

URL: http://svn.apache.org/viewvc?view=rev&rev=523939
Log:
CXF-499: updated router interceptor to use local transport. The transport loaded by transportId can be replaced by local transport when the publishing address is a local transport protocol, eg: Endpoint.publish("local://SoapContext/version2/SoapPort", implementor2);

Modified:
    incubator/cxf/trunk/integration/jbi/src/main/java/org/apache/cxf/jbi/transport/JBITransportFactory.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java
    incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-servlet.xml
    incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java
    incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/cxf/cxf-extension-local.xml
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/Server.java

Modified: incubator/cxf/trunk/integration/jbi/src/main/java/org/apache/cxf/jbi/transport/JBITransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/integration/jbi/src/main/java/org/apache/cxf/jbi/transport/JBITransportFactory.java?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/integration/jbi/src/main/java/org/apache/cxf/jbi/transport/JBITransportFactory.java (original)
+++ incubator/cxf/trunk/integration/jbi/src/main/java/org/apache/cxf/jbi/transport/JBITransportFactory.java Thu Mar 29 22:04:25 2007
@@ -80,13 +80,13 @@
             return;
         }
         ConduitInitiatorManager cim = bus.getExtension(ConduitInitiatorManager.class);
-        if (null != cim) {
+        if (null != cim && null != activationNamespaces) {
             for (String ns : activationNamespaces) {
                 cim.registerConduitInitiator(ns, this);
             }
         }
         DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
-        if (null != dfm) {
+        if (null != dfm && null != activationNamespaces) {
             for (String ns : activationNamespaces) {
                 dfm.registerDestinationFactory(ns, this);
             }

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ServerImpl.java Thu Mar 29 22:04:25 2007
@@ -54,9 +54,20 @@
         this.bus = bus;
 
         EndpointInfo ei = endpoint.getEndpointInfo();
+        
+        //Treat local transport as a special case, transports loaded by transportId can be replaced
+        //by local transport when the publishing address is a local transport protocol. 
+        //Of course its not an ideal situation here to use a hard-coded prefix. To be refactored.
         if (destinationFactory == null) {
-            destinationFactory = bus.getExtension(DestinationFactoryManager.class)
-                .getDestinationFactory(ei.getTransportId());
+            if (ei.getAddress() != null && ei.getAddress().indexOf("local://") != -1) {
+                destinationFactory = bus.getExtension(DestinationFactoryManager.class)
+                    .getDestinationFactoryForUri(ei.getAddress());
+            }
+
+            if (destinationFactory == null) {
+                destinationFactory = bus.getExtension(DestinationFactoryManager.class)
+                    .getDestinationFactory(ei.getTransportId());
+            }
         }
             
         destination = destinationFactory.getDestination(ei);

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java Thu Mar 29 22:04:25 2007
@@ -90,13 +90,15 @@
             return;
         }
         ConduitInitiatorManager cim = bus.getExtension(ConduitInitiatorManager.class);
-        if (null != cim) {
+
+        //Note, activationNamespaces can be null
+        if (null != cim && null != activationNamespaces) {
             for (String ns : activationNamespaces) {
                 cim.registerConduitInitiator(ns, this);
             }
         }
         DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
-        if (null != dfm) {
+        if (null != dfm && null != activationNamespaces) {
             for (String ns : activationNamespaces) {
                 dfm.registerDestinationFactory(ns, this);
             }

Modified: incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-servlet.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-servlet.xml?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-servlet.xml (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/resources/META-INF/cxf/cxf-servlet.xml Thu Mar 29 22:04:25 2007
@@ -27,6 +27,7 @@
         <property name="bus" ref="cxf"/>
         <property name="transportIds">
             <set>
+                <value>http://cxf.apache.org/bindings/xformat</value>
                 <value>http://schemas.xmlsoap.org/soap/http</value>
                 <value>http://schemas.xmlsoap.org/wsdl/http/</value>
                 <value>http://schemas.xmlsoap.org/wsdl/soap/http</value>

Modified: incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/transports/local/src/main/java/org/apache/cxf/transport/local/LocalTransportFactory.java Thu Mar 29 22:04:25 2007
@@ -28,6 +28,9 @@
 import java.util.Set;
 import java.util.logging.Logger;
 
+import javax.annotation.Resource;
+
+import org.apache.cxf.Bus;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.AbstractTransportFactory;
 import org.apache.cxf.transport.Conduit;
@@ -52,15 +55,24 @@
     }
     
     private Map<String, Destination> destinations = new HashMap<String, Destination>();
-
-    
+    private Bus bus;
+     
     public LocalTransportFactory() {
         super();
         List<String> ids = new ArrayList<String>();
         ids.add(TRANSPORT_ID);
         setTransportIds(ids);
     }
+    
+    @Resource(name = "bus")
+    public void setBus(Bus b) {
+        bus = b;
+    }
 
+    public Bus getBus() {
+        return bus;
+    }
+    
     public Destination getDestination(EndpointInfo ei) throws IOException {
         return getDestination(ei, createReference(ei));
     }

Modified: incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/cxf/cxf-extension-local.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/cxf/cxf-extension-local.xml?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/cxf/cxf-extension-local.xml (original)
+++ incubator/cxf/trunk/rt/transports/local/src/main/resources/META-INF/cxf/cxf-extension-local.xml Thu Mar 29 22:04:25 2007
@@ -24,6 +24,7 @@
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
     
     <bean class="org.apache.cxf.transport.local.LocalTransportFactory" lazy-init="true">
+        <property name="bus" ref="cxf"/>
         <property name="transportIds">
             <list>
                 <value>http://cxf.apache.org/transports/local</value>

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java Thu Mar 29 22:04:25 2007
@@ -23,7 +23,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
-import java.util.logging.Logger;
 
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamConstants;
@@ -48,7 +47,6 @@
 
 
 public class MediatorInInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
-    private static final Logger LOG = Logger.getLogger(MediatorInInterceptor.class.getName());
 
     public MediatorInInterceptor() {
         super();
@@ -57,25 +55,19 @@
     }
 
     public void handleMessage(SoapMessage message) {
-        if (isGET(message)) {
-            LOG.info("StaxInInterceptor skipped in HTTP GET method");
-            return;
-        }
-
         String schemaNamespace = "";
         InterceptorChain chain = message.getInterceptorChain();
 
+        //scan the incoming message for its schema namespace
         try {
-            //create a buffered stream so that we can roll back to original stream after finishing scaning
+            //create a buffered stream so that we get back the original stream after scaning
             InputStream is = message.getContent(InputStream.class);
             BufferedInputStream pis = new BufferedInputStream(is);
             pis.mark(pis.available());
             message.setContent(InputStream.class, pis);
 
-            //TODO: need to process attachements
+            //TODO: process attachements
 
-            
-            //Scan the schema namespace, which is used to indicate the service version
             String encoding = (String)message.get(Message.ENCODING);
             XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(pis, encoding);
             DepthXMLStreamReader xmlReader = new DepthXMLStreamReader(reader);
@@ -83,15 +75,14 @@
             if (xmlReader.nextTag() == XMLStreamConstants.START_ELEMENT) {
                 String ns = xmlReader.getNamespaceURI();
                 SoapVersion soapVersion = SoapVersionFactory.getInstance().getSoapVersion(ns);
+                //advance just past header
                 StaxUtils.toNextTag(xmlReader, soapVersion.getBody());
-
-                // advance just past body.
+                //past body.
                 xmlReader.nextTag();
             }
 
             schemaNamespace = xmlReader.getName().getNamespaceURI();
 
-            //Roll back to the original inputStream
             pis.reset();
         } catch (IOException e) {
             e.printStackTrace();
@@ -99,27 +90,31 @@
             e.printStackTrace();
         }
 
+        //Look up for all available endpoints registered on the bus
         Bus bus = CXFBusFactory.getDefaultBus();
         ServerRegistry serverRegistry = bus.getExtension(ServerRegistry.class);
         List<Server> servers = serverRegistry.getServers();
 
+        //if the incoming message has a namespace contained "2007/03/21", we redirect the message
+        //to the new version of service on endpoint "local://localhost:9027/SoapContext/version2/SoapPort"
         Server targetServer = null;
         for (Server server : servers) {
             targetServer = server;
             String address = server.getEndpoint().getEndpointInfo().getAddress();
             if (schemaNamespace.indexOf("2007/03/21") != -1) {
-                if (address.indexOf("SoapContext2") != -1) {
+                if (address.indexOf("version2") != -1) {
                     break;
                 }
-            } else if (address.indexOf("SoapContext1") != -1) {
+            } else if (address.indexOf("version1") != -1) {
                 break;
             }
         }
 
         //Redirect the request
-        MessageObserver ob = targetServer.getMessageObserver();
-        ob.onMessage(message);
+        MessageObserver mo = targetServer.getMessageObserver();
+        mo.onMessage(message);
 
+        //Now the response has been put in the message, abort the chain 
         chain.abort();
     }
 

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/Server.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/Server.java?view=diff&rev=523939&r1=523938&r2=523939
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/Server.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/Server.java Thu Mar 29 22:04:25 2007
@@ -29,12 +29,13 @@
 public class Server extends AbstractBusTestServerBase {
 
     protected void run() {
+        //implementor1 and implementor2 are published using local transport
         Object implementor1 = new GreeterImplMixedStyle();
-        String address1 = "http://localhost:9027/SoapContext1/SoapPort";
+        String address1 = "local://SoapContext/version1/SoapPort";
         Endpoint.publish(address1, implementor1);
 
         Object implementor2 = new GreeterImplMixedStyle();
-        String address2 = "http://localhost:9027/SoapContext2/SoapPort";
+        String address2 = "local://SoapContext/version2/SoapPort";
         Endpoint.publish(address2, implementor2);
         
         //A dummy service that acts as a routing mediator