You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2007/03/02 13:26:58 UTC

svn commit: r513731 - in /incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src: main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java test/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilderTestCase.java

Author: antelder
Date: Fri Mar  2 04:26:57 2007
New Revision: 513731

URL: http://svn.apache.org/viewvc?view=rev&rev=513731
Log:
Interim checkin of Axis2 binding with more 1.0 spec SCDL fixes - doesn't work perfectly yet

Modified:
    incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
    incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/test/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilderTestCase.java

Modified: incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java?view=diff&rev=513731&r1=513730&r2=513731
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java Fri Mar  2 04:26:57 2007
@@ -19,7 +19,6 @@
 package org.apache.tuscany.binding.axis2;
 
 import java.net.URI;
-import java.net.URISyntaxException;
 
 import javax.wsdl.Port;
 import javax.wsdl.PortType;
@@ -33,6 +32,7 @@
 import org.apache.tuscany.idl.wsdl.WSDLServiceContract;
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.builder.BuilderConfigException;
+import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.ReferenceBinding;
 import org.apache.tuscany.spi.component.ServiceBinding;
@@ -146,7 +146,7 @@
             }
 
             if (wsBinding.isSpec10Compliant()) {
-                wsBinding.setActualURI(computeActualURI(wsBinding, BASE_URI, parent.getName(), serviceDefinition.getName()));
+                wsBinding.setActualURI(computeActualURI(wsBinding, BASE_URI, serviceDefinition.getTarget(), serviceDefinition.getName(), parent));
             }
 
             ServiceBinding serviceBinding =
@@ -212,7 +212,7 @@
         }
 
         if (wsBinding.isSpec10Compliant()) {
-            wsBinding.setActualURI(computeActualURI(wsBinding, BASE_URI, parent.getName(), boundReferenceDefinition.getName()));
+            wsBinding.setActualURI(computeActualURI(wsBinding, BASE_URI, null, boundReferenceDefinition.getName(), null));
         }
 
         return new Axis2ReferenceBinding(boundReferenceDefinition.getName(), parent, wsBinding,
@@ -241,56 +241,84 @@
      * 4. The implicit URI as defined by in section 1.7 in the SCA Assembly spec 
      * If the <binding.ws> has no wsdlElement but does have a uri attribute then the uri takes precidence
      * over any implicitly used WSDL.
+     * @param parent 
      */
-    protected URI computeActualURI(WebServiceBindingDefinition wsBinding, String baseURI, String compositeName, String name) {
-        try {
-
-            URI portURI = null;         
-            if ((wsBinding.getServiceName() != null || wsBinding.getPortName() == null) && wsBinding.getBindingName() == null) {
-                // <binding.ws> explicitly points at a wsdl port, may be a relative URI
-                portURI = wsBinding.getPortURI();
+    protected URI computeActualURI(WebServiceBindingDefinition wsBinding, String baseURI, URI componentURI, String bindingName, CompositeComponent parent) {
+        URI wsdlURI = null;         
+        if (wsBinding.getServiceName() != null && wsBinding.getBindingName() == null) {
+            // <binding.ws> explicitly points at a wsdl port, may be a relative URI
+            wsdlURI = wsBinding.getPortURI();
+        }
+        if (wsdlURI != null && wsdlURI.isAbsolute()) {
+            if (wsBinding.getURI() != null && (wsBinding.getServiceName() != null && wsBinding.getBindingName() == null)) {
+                throw new IllegalArgumentException("binding URI cannot be used with absolute WSDL endpoint URI");
             }
-            if (portURI != null && portURI.isAbsolute()) {
-                return new URI(portURI.toString());
+            return URI.create(wsdlURI.toString());
+        }
+        
+        // there is no wsdl port endpoint URI or that URI is relative
+        
+        URI bindingURI = null;
+        if (wsBinding.getURI() != null) {
+            bindingURI = URI.create(wsBinding.getURI());
+        }
+
+        if (bindingURI != null && bindingURI.isAbsolute()) {
+            if (wsdlURI != null) {
+                return URI.create(bindingURI + "/" + wsdlURI).normalize();
+            } else {
+                return bindingURI;
             }
-            
-            URI explicitURI = null;
-            if (wsBinding.getURI() != null) {
-                explicitURI = new URI(wsBinding.getURI());
+        }
+        
+        if (componentURI == null) { // null for references
+            wsdlURI = wsBinding.getPortURI();
+            if (bindingURI != null) {
+                return URI.create(wsdlURI + "/" + bindingURI).normalize();
+            } else {
+                return wsdlURI;
             }
+        }
+        
 
-            String actualURI = "";
-            if (explicitURI == null || !explicitURI.isAbsolute()) {
-                actualURI = baseURI + "/" + compositeName + "/" + name + "/";
-            }
+        // TODO: TUSCANY-xxx, how to tell if component has multiple services using <binding.ws>?
+        //        boolean singleService = (parent != null) && (((Component)parent.getChild(componentURI.toString())).getInboundWires().size() == 1);
+        //        if (bindingURI == null && !singleService) {
 
-            if (explicitURI != null) {
-                if (portURI != null) {
-                    actualURI = actualURI + explicitURI.toString() + "/" + portURI.toString();
-                } else {
-                    if (explicitURI != null) {
-                        actualURI = actualURI + explicitURI;
-                    }
-                    if (portURI != null) {
-                        actualURI = actualURI + portURI;
-                    }
-                }
+        if (bindingURI == null) {
+            bindingURI = URI.create(bindingName);
+        }
+
+        if (componentURI.isAbsolute()) {
+            if (bindingURI == null && wsdlURI == null) {
+                return componentURI;
+            } else if (wsdlURI == null) {
+                return URI.create(componentURI + "/" + bindingURI).normalize();
+            } else if (bindingURI == null) {
+                return URI.create(componentURI + "/" + wsdlURI).normalize();
             } else {
-                if (portURI != null) {
-                    actualURI = actualURI + portURI.toString();
-                }
-            }
-            
-            if (actualURI.endsWith("/")) {
-                actualURI = actualURI.substring(0, actualURI.length() -1);
+                return URI.create(componentURI + "/" + bindingURI + "/" + wsdlURI).normalize();
             }
-            
-            // normalize to handle any . or .. occurances 
-            return new URI(actualURI).normalize();
+        }
+                
+        String actualURI = "";
 
-        } catch (URISyntaxException e) {
-            throw new Axis2BindingBuilderRuntimeException(e);
+        if (bindingURI == null) {
+            actualURI = baseURI + "/" + componentURI + "/";
+        } else {
+            actualURI = baseURI + "/" + componentURI + "/" + bindingURI + "/";
+        }
+
+        if (wsdlURI != null) {
+            actualURI = actualURI + wsdlURI.toString();
+        }
+
+        if (actualURI.endsWith("/")) {
+            actualURI = actualURI.substring(0, actualURI.length() -1);
         }
+        
+        // normalize to handle any . or .. occurances 
+        return URI.create(actualURI).normalize();
     }
 
 }

Modified: incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/test/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/test/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilderTestCase.java?view=diff&rev=513731&r1=513730&r2=513731
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/test/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilderTestCase.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/extensions/axis2/binding/src/test/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilderTestCase.java Fri Mar  2 04:26:57 2007
@@ -24,6 +24,7 @@
 
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -36,50 +37,65 @@
 
 import junit.framework.TestCase;
 
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.CompositeComponent;
+
 /**
  * Tests for the WebServicebindingLoader class
  */
 @SuppressWarnings("deprecation")
 public class Axis2BindingBuilderTestCase extends TestCase {
 
+    private CompositeComponent parent;
+
     private static final String NAME = "MyService";
-    private static final String COMPOSITE_NAME = "MyComposite";
+    private static final URI COMPOSITE_NAME = URI.create("MyComposite");
+    private static final URI COMPOSITE_NAME2 = URI.create("MyComposite2");
     private static final String BASE_URI = "http://localhost/services";
 
     public void testDefaultURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition(null, null, null, null, null, null);
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://localhost/services/MyComposite/MyService", uri.toString());
     }
 
+    public void testDefaultURIMultiServices() throws Exception {
+        Axis2BindingBuilder builder = new Axis2BindingBuilder();
+        WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition(null, null, null, null, null, null);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME2, NAME, parent);
+        assertEquals("http://localhost/services/MyComposite2/MyService", uri.toString());
+    }
+
     public void testExplicitURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition(null, null, null, null, null, "http://foo/bar");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://foo/bar", uri.toString());
     }
     
     public void testExplicitWSDL() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("http://my/wsdl/uri"), "myService", "myPort", null, null);
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://my/wsdl/uri", uri.toString());
     }
     
     public void testExplicitWSDLExplicitURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("http://my/wsdl/uri"), "myService", "myPort", null, "foo");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
-
-        // explicit URI 'foo' should be ignored
-        assertEquals("http://my/wsdl/uri", uri.toString());
+        try {
+            builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
+            fail();
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
     }
 
     public void testExplicitWSDLBindingExplicitURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDLBinding("http://my/wsdl/uri"), null, null, "myBinding", "http://my/uri");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
 
         // explicit URI should be used as the WSDL binding is used not the wsdl service/port
         assertEquals("http://my/uri", uri.toString());
@@ -88,70 +104,78 @@
     public void testExplicitWSDLBindingExplicitRelativeURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDLBinding("http://my/wsdl/uri"), null, null, "myBinding", "x/y");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
-
-        // explicit URI should be used as the WSDL binding is used not the wsdl service/port
-        assertEquals("http://localhost/services/MyComposite/MyService/x/y", uri.toString());
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
+        assertEquals("http://localhost/services/MyComposite/x/y", uri.toString());
     }
 
     public void testExplicitWSDLBindingExplicitRelativeURIWithDot() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDLBinding("http://my/wsdl/uri"), null, null, "myBinding", "x/./y");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
-
-        // explicit URI should be used as the WSDL binding is used not the wsdl service/port
-        assertEquals("http://localhost/services/MyComposite/MyService/x/y", uri.toString());
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
+        assertEquals("http://localhost/services/MyComposite/x/y", uri.toString());
     }
 
     public void testExplicitWSDLBindingExplicitRelativeURIWithDots() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
-        WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDLBinding("http://my/wsdl/uri"), null, null, "myBinding", "../../x/y");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
-
-        // explicit URI should be used as the WSDL binding is used not the wsdl service/port
+        WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDLBinding("http://my/wsdl/uri"), null, null, "myBinding", "../x/y");
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://localhost/services/x/y", uri.toString());
     }
 
     public void testExplicitRelativeWSDL() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("foo/bar"), "myService", "myPort", null, null);
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://localhost/services/MyComposite/MyService/foo/bar", uri.toString());
     }
 
+    public void testExplicitRelativeWSDLMultiServices() throws Exception {
+        Axis2BindingBuilder builder = new Axis2BindingBuilder();
+        WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("foo/bar"), "myService", "myPort", null, null);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME2, NAME, parent);
+        assertEquals("http://localhost/services/MyComposite2/MyService/foo/bar", uri.toString());
+    }
+
     public void testExplicitRelativeWSDLWithDots() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("../foo/bar"), "myService", "myPort", null, null);
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://localhost/services/MyComposite/foo/bar", uri.toString());
     }
 
+    public void testExplicitRelativeWSDLWithDotsMultiService() throws Exception {
+        Axis2BindingBuilder builder = new Axis2BindingBuilder();
+        WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("../foo/bar"), "myService", "myPort", null, null);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME2, NAME, parent);
+        assertEquals("http://localhost/services/MyComposite2/foo/bar", uri.toString());
+    }
+
     public void testExplicitRelativeWSDLExplicitURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("foo/bar"), "myService", "myPort", null, "http://my/wsdl/uri");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://my/wsdl/uri/foo/bar", uri.toString());
     }
 
     public void testExplicitRelativeWSDLWithDotsExplicitURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("../foo/bar"), "myService", "myPort", null, "http://my/wsdl/uri");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
         assertEquals("http://my/wsdl/foo/bar", uri.toString());
     }
 
     public void testExplicitRelativeWSDLExplicitRelativeURI() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("foo/bar"), "myService", "myPort", null, "x/y");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
-        assertEquals("http://localhost/services/MyComposite/MyService/x/y/foo/bar", uri.toString());
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
+        assertEquals("http://localhost/services/MyComposite/x/y/foo/bar", uri.toString());
     }
 
     public void testExplicitRelativeWSDLExplicitRelativeURIWithDots() throws Exception {
         Axis2BindingBuilder builder = new Axis2BindingBuilder();
         WebServiceBindingDefinition wsBinding = new WebServiceBindingDefinition("myNS", createMockWSDL("foo/bar"), "myService", "myPort", null, "../x/y");
-        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME);
-        assertEquals("http://localhost/services/MyComposite/x/y/foo/bar", uri.toString());
+        URI uri = builder.computeActualURI(wsBinding, BASE_URI, COMPOSITE_NAME, NAME, parent);
+        assertEquals("http://localhost/services/x/y/foo/bar", uri.toString());
     }
 
     protected Definition createMockWSDL(String endpoint) {
@@ -183,5 +207,23 @@
         Definition mockDef = createMock(Definition.class);
         replay(mockDef);
         return mockDef;
+    }
+    
+    protected void setUp() {
+        parent = createMock(CompositeComponent.class);
+        Component comp1 = createMock(Component.class);
+        Component comp2 = createMock(Component.class);
+        Collection wires1 = new ArrayList();
+        wires1.add("dummy1");
+        Collection wires2 = new ArrayList();
+        wires2.add("dummy1");
+        wires2.add("dummy2");
+        expect(comp1.getInboundWires()).andReturn(wires1);
+        expect(comp2.getInboundWires()).andReturn(wires2);
+        expect(parent.getChild(COMPOSITE_NAME.toString())).andReturn(comp1);
+        expect(parent.getChild(COMPOSITE_NAME2.toString())).andReturn(comp2);
+        replay(comp1);
+        replay(comp2);
+        replay(parent);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org