Author: mriou
Date: Mon Aug 18 16:35:02 2008
New Revision: 686897

URL: http://svn.apache.org/viewvc?rev=686897&view=rev
Log:
Fix for JMS transport to keep the default behavior of Axis2 when it's enabled 
server wide.

Modified:
    
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
    
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java

Modified: 
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?rev=686897&r1=686896&r2=686897&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
 Mon Aug 18 16:35:02 2008
@@ -321,13 +321,10 @@
     }
 
     public ODEService createService(ProcessConf pconf, QName serviceName, 
String portName) throws AxisFault {
-        Definition wsdlDefinition = pconf.getDefinitionForService(serviceName);
-
         // Since multiple processes may provide services at the same (JMS) 
endpoint, qualify
         // the (JMS) endpoint-specific NCName with a process-relative URI, if 
necessary.
-        QName uniqueServiceName = new QName(serviceName.getNamespaceURI(),
-                ODEAxisService.extractServiceName(wsdlDefinition, serviceName, 
portName,
-                        ODEAxisService.deriveBaseServiceUri(pconf)));
+        QName uniqueServiceName = new QName(
+                       ODEAxisService.extractServiceName(pconf, serviceName, 
portName));
 
         destroyService(uniqueServiceName, portName);
 

Modified: 
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java?rev=686897&r1=686896&r2=686897&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java
 Mon Aug 18 16:35:02 2008
@@ -19,17 +19,21 @@
 
 package org.apache.ode.axis2.hooks;
 
+import java.io.File;
 import java.io.FileNotFoundException;
-import java.io.InputStream;
 import java.io.IOException;
-import java.io.File;
+import java.io.InputStream;
 import java.net.URI;
 import java.net.URL;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 
-import javax.wsdl.*;
+import javax.wsdl.Definition;
+import javax.wsdl.Operation;
+import javax.wsdl.Part;
+import javax.wsdl.Port;
+import javax.wsdl.Service;
 import javax.wsdl.extensions.soap.SOAPAddress;
 import javax.xml.namespace.QName;
 
@@ -122,8 +126,11 @@
                 }
             }
             
-            // Set the JMS destination name on the Axis Service (used only if 
endpoint is JMS)  
-            axisService.addParameter(new Parameter(JMSConstants.DEST_PARAM, 
extractJMSDestinationName(axisServiceName)));
+            // Set the JMS destination name on the Axis Service
+            if (isJmsEndpoint(pconf, wsdlServiceName, portName)) {
+                   axisService.addParameter(new 
Parameter(JMSConstants.DEST_PARAM, 
+                               extractJMSDestinationName(axisServiceName, 
deriveBaseServiceUri(pconf))));
+            }
 
             return axisService;
         } catch (Exception e) {
@@ -136,18 +143,18 @@
      * @param serviceName the name of the axis service
      * @return the corresponding JMS destination name
      */
-    private static String extractJMSDestinationName(String serviceName) {
+    private static String extractJMSDestinationName(String serviceName, String 
baseUri) {
        String destinationPrefix = "dynamicQueues/";
         int index = serviceName.indexOf(destinationPrefix);
         if (index == -1) {
                destinationPrefix = "dynamicTopics/";
                index = serviceName.indexOf(destinationPrefix);
         }
-        if (index != -1) {
-            return serviceName.substring(index);
+        if (index == -1) {
+               destinationPrefix = baseUri + "/";
+               index = serviceName.indexOf(destinationPrefix);
         }
-       
-               return null;
+        return (index != -1) ? serviceName.substring(index) : serviceName;
        }
 
        public static AxisService createService(AxisConfiguration axisConfig, 
QName serviceQName, String port,
@@ -168,8 +175,9 @@
         return axisService;
     }
 
-    public static String extractServiceName(Definition wsdlDefinition, QName 
wsdlServiceName, String portName, String baseUri)
-            throws AxisFault {
+       private static String extractEndpointUri(ProcessConf pconf, QName 
wsdlServiceName, String portName) 
+                       throws AxisFault {
+       Definition wsdlDefinition = 
pconf.getDefinitionForService(wsdlServiceName);
         String url = null;
         Service service = wsdlDefinition.getService(wsdlServiceName);
         if (service == null) {
@@ -187,8 +195,19 @@
         if (url == null) {
             throw new OdeFault("Could not extract any soap:address from 
service WSDL definition " + wsdlServiceName
                     + " (necessary to establish the process target address)!");
-        }
-        String serviceName = parseURLForService(url, baseUri);
+        }              
+        return url;
+       }
+       
+       private static boolean isJmsEndpoint(ProcessConf pconf, QName 
wsdlServiceName, String portName) 
+                       throws AxisFault {
+               String url = extractEndpointUri(pconf, wsdlServiceName, 
portName);
+               return url.startsWith("jms:");
+       }
+       
+    public static String extractServiceName(ProcessConf pconf, QName 
wsdlServiceName, String portName)
+            throws AxisFault {
+        String serviceName = parseURLForService(extractEndpointUri(pconf, 
wsdlServiceName, portName), deriveBaseServiceUri(pconf));
         if (serviceName == null) {
             throw new OdeFault("The soap:address used for service WSDL 
definition " + wsdlServiceName + " and port "
                     + portName + " should be of the form 
http://hostname:port/ode/processes/myProcessEndpointName";);


Reply via email to