You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2008/05/26 04:10:47 UTC

svn commit: r660076 - in /cxf/trunk: rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/ rt/core/src/main/java/org/apache/cxf/wsdl11/ rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/ rt/frontend/jaxws/src/main/java/org/apache/...

Author: bimargulies
Date: Sun May 25 19:10:46 2008
New Revision: 660076

URL: http://svn.apache.org/viewvc?rev=660076&view=rev
Log:
Regress CXF-1603 in preparation for a real test of the JAX-WS 
DynamicClientFactory. Rename the Jaxws dynamic client  factory to 
JaxWsDynamicClientFactory.

Added:
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLRuntimeException.java   (with props)
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/JaxWsDynamicClientFactory.java
      - copied, changed from r659889, cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/DynamicClientFactory.java
    cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl   (with props)
Removed:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/DynamicClientFactory.java
Modified:
    cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/Messages.properties
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLDefinitionBuilder.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java

Modified: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java?rev=660076&r1=660075&r2=660076&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java (original)
+++ cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java Sun May 25 19:10:46 2008
@@ -72,6 +72,54 @@
         bfm.registerBindingFactory(ns, bindingFactory);
         return bfm;
     }
+    
+    @Test
+    public void testNoBodyParts() throws Exception {
+        Definition d = createDefinition("/wsdl/no_body_parts.wsdl");
+        Bus bus = getMockBus();
+
+        BindingFactoryManager bfm = getBindingFactoryManager(WSDLConstants.NS_SOAP11, bus);
+
+        bus.getExtension(BindingFactoryManager.class);
+        expectLastCall().andReturn(bfm).anyTimes();
+        
+        DestinationFactoryManager dfm = control.createMock(DestinationFactoryManager.class);
+        expect(bus.getExtension(DestinationFactoryManager.class)).andStubReturn(dfm);
+        
+        control.replay();
+
+        WSDLServiceBuilder builder = new WSDLServiceBuilder(bus);
+        ServiceInfo serviceInfo = builder
+            .buildServices(d, new QName("urn:cxf:no_body_parts/wsdl", 
+                                        "NoBodyParts"))
+            .get(0);
+
+        BindingInfo bi = serviceInfo.getBindings().iterator().next();
+
+        assertTrue(bi instanceof SoapBindingInfo);
+
+        SoapBindingInfo sbi = (SoapBindingInfo)bi;
+        assertEquals("document", sbi.getStyle());
+        assertTrue(WSDLConstants.NS_SOAP11_HTTP_TRANSPORT.equalsIgnoreCase(sbi.getTransportURI()));
+        assertTrue(sbi.getSoapVersion() instanceof Soap11);
+
+        BindingOperationInfo boi = sbi.getOperation(new QName("urn:cxf:no_body_parts/wsdl",
+                                                              "convertMime"));
+
+        assertNotNull(boi);
+        SoapOperationInfo sboi = boi.getExtensor(SoapOperationInfo.class);
+        assertNotNull(sboi);
+        assertNull(sboi.getStyle());
+        assertEquals("", sboi.getAction());
+
+        BindingMessageInfo input = boi.getInput();
+        SoapBodyInfo bodyInfo = input.getExtensor(SoapBodyInfo.class);
+        assertNull(bodyInfo.getUse());
+
+        List<MessagePartInfo> parts = bodyInfo.getParts();
+        assertNotNull(parts);
+        assertEquals(0, parts.size());
+    }
 
     @Test
     public void testFactory() throws Exception {        

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/Messages.properties?rev=660076&r1=660075&r2=660076&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/Messages.properties (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/Messages.properties Sun May 25 19:10:46 2008
@@ -27,3 +27,5 @@
 SERVICE_CREATION_MSG = Failed to create service.
 NO_SUCH_SERVICE_EXC = Could not find definition for service {0}.
 FAIL_TO_CREATE_WSDL_DEFINITION = Fail to create wsdl definition from : {0}\r\nCaused by : {1} 
+MISSING_DESTINATION_FACTORY = Cannot find the destination factory, check the port //wsdl:port[@name='{0}']
+MISSING_SERVICE= No definition of service {0} in the WSDL.

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLDefinitionBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLDefinitionBuilder.java?rev=660076&r1=660075&r2=660076&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLDefinitionBuilder.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLDefinitionBuilder.java Sun May 25 19:10:46 2008
@@ -153,7 +153,7 @@
                                       LOG,
                                       wsdlURL,
                                       we.getMessage());
-            throw new RuntimeException(msg.toString(), we);
+            throw new WSDLRuntimeException(msg, we);
         }
     }
 

Added: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLRuntimeException.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLRuntimeException.java?rev=660076&view=auto
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLRuntimeException.java (added)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLRuntimeException.java Sun May 25 19:10:46 2008
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.wsdl11;
+
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.i18n.UncheckedException;
+
+/**
+ * This exception is thrown for problems processing WSDL
+ * structures. 
+ */
+public class WSDLRuntimeException extends UncheckedException {
+
+    public WSDLRuntimeException(Message msg, Throwable t) {
+        super(msg, t);
+    }
+
+    public WSDLRuntimeException(Message msg) {
+        super(msg);
+    }
+
+    public WSDLRuntimeException(Throwable cause) {
+        super(cause);
+    }
+}

Propchange: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLRuntimeException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLRuntimeException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?rev=660076&r1=660075&r2=660076&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java Sun May 25 19:10:46 2008
@@ -146,6 +146,13 @@
 
     private List<ServiceInfo> buildServices(Definition d, QName name, DescriptionInfo description) {
         Service service = d.getService(name);
+        if (service == null) {
+            org.apache.cxf.common.i18n.Message msg = 
+                new org.apache.cxf.common.i18n.Message("MISSING_SERVICE",
+                                                       LOG,
+                                                       name);
+            throw new WSDLRuntimeException(msg);
+        }
         return buildServices(d, service, description);
     }
 
@@ -356,8 +363,12 @@
                 }
             }
             if (ns == null) {
-                throw new RuntimeException("Can non find the destination factory, check the port "
-                                           + " //wsdl:port[@name='" + port.getName() + "']");
+                
+                org.apache.cxf.common.i18n.Message msg = new 
+                    org.apache.cxf.common.i18n.Message("MISSING_DESTINATION_FACTORY",
+                                                       LOG,
+                                                       port.getName());
+                throw new WSDLRuntimeException(msg);
             }
             try {
                 factory = bus.getExtension(DestinationFactoryManager.class).getDestinationFactory(ns);

Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java?rev=660076&r1=660075&r2=660076&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/endpoint/dynamic/DynamicClientFactory.java Sun May 25 19:10:46 2008
@@ -75,8 +75,17 @@
 import org.apache.cxf.service.model.SchemaInfo;
 import org.apache.cxf.service.model.ServiceInfo;
 /**
+ * This class reads a WSDL and creates a dynamic client from it.
  * 
+ * Use {@link #newInstance} to obtain an instance, and then
+ * {@link #createClient(String)} (or other overloads) to create a client.
+ * 
+ * It uses the JAXB data binding. It does not set up complex interceptors for 
+ * features such as attachments. 
+ * See {@link org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory}
+ * for an alternative that sets up JAX-WS endpoints.
  *
+ * This class may be subclassed to allow for other endpoints or behaviors.
  */
 public class DynamicClientFactory {
 

Copied: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/JaxWsDynamicClientFactory.java (from r659889, cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/DynamicClientFactory.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/JaxWsDynamicClientFactory.java?p2=cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/JaxWsDynamicClientFactory.java&p1=cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/DynamicClientFactory.java&r1=659889&r2=660076&rev=660076&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/DynamicClientFactory.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/endpoint/dynamic/JaxWsDynamicClientFactory.java Sun May 25 19:10:46 2008
@@ -22,14 +22,23 @@
 import org.apache.cxf.Bus;
 import org.apache.cxf.bus.CXFBusFactory;
 import org.apache.cxf.endpoint.EndpointImplFactory;
+import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
 import org.apache.cxf.jaxws.support.JaxWsEndpointImplFactory;
 
 /**
- * This class creates dynamic clients with JAX-WS endpoints.
- */
-public class DynamicClientFactory extends org.apache.cxf.endpoint.dynamic.DynamicClientFactory {
+ * This class reads a WSDL and creates a dynamic client from it with JAX-WS
+ * functionality.
+ * This provides support for attachments and other useful things that 
+ * come with JAX-WS.
+ * 
+ * Use {@link #newInstance} to obtain an instance, and then
+ * {@link #createClient(String)} (or other overloads) to create a client.
+ * 
+ * This factory uses the JAXB data binding. 
+ **/
+public class JaxWsDynamicClientFactory extends DynamicClientFactory {
 
-    protected DynamicClientFactory(Bus bus) {
+    protected JaxWsDynamicClientFactory(Bus bus) {
         super(bus);
     }
 
@@ -45,8 +54,8 @@
      *            instance
      * @return the new instance
      */
-    public static DynamicClientFactory newInstance(Bus b) {
-        return new DynamicClientFactory(b);
+    public static JaxWsDynamicClientFactory newInstance(Bus b) {
+        return new JaxWsDynamicClientFactory(b);
     }
 
     /**
@@ -55,8 +64,8 @@
      * @return the new instance
      * @see CXFBusFactory#getDefaultBus()
      */
-    public static DynamicClientFactory newInstance() {
+    public static JaxWsDynamicClientFactory newInstance() {
         Bus bus = CXFBusFactory.getThreadDefaultBus();
-        return new DynamicClientFactory(bus);
+        return new JaxWsDynamicClientFactory(bus);
     }
 }

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java?rev=660076&r1=660075&r2=660076&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java Sun May 25 19:10:46 2008
@@ -124,8 +124,8 @@
         wsdlUrl = wsdl.toURI().toString();
         CXFBusFactory busFactory = new CXFBusFactory(); 
         Bus bus = busFactory.createBus();
-        org.apache.cxf.jaxws.endpoint.dynamic.DynamicClientFactory dynamicClientFactory = 
-            org.apache.cxf.jaxws.endpoint.dynamic.DynamicClientFactory.newInstance(bus);
+        org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory dynamicClientFactory = 
+            org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory.newInstance(bus);
         Client client = dynamicClientFactory.createClient(wsdlUrl);
         assertNotNull(client);
     }

Added: cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl?rev=660076&view=auto
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl (added)
+++ cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl Sun May 25 19:10:46 2008
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
+             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
+             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
+             xmlns:tns="urn:cxf:no_body_parts/wsdl"
+             xmlns:types="urn:cxf:no_body_parts/types"
+             targetNamespace="urn:cxf:no_body_parts/wsdl"
+             name="no_body_parts">
+<types>
+<xsd:schema xmlns:tns="http://ws-i.org/profiles/basic/1.1/xsd" 
+            elementFormDefault="qualified" 
+            targetNamespace="http://ws-i.org/profiles/basic/1.1/xsd"> 
+	<xsd:simpleType name="swaRef"> 
+		<xsd:restriction base="xsd:anyURI"/> 
+	</xsd:simpleType> 
+</xsd:schema>
+
+<xsd:schema xmlns:tns="urn:cxf:no_body_parts/types" 
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
+            xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd" 
+            elementFormDefault="qualified" 
+            targetNamespace="urn:cxf:no_body_parts/types">
+
+    <xsd:element name="convertMime">        
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="targetType" type="xsd:string" nillable="true"/>
+                <xsd:element name="optionString" type="xsd:string" minOccurs="0" maxOccurs="1"/>
+            </xsd:sequence>
+        </xsd:complexType>            
+    </xsd:element>
+    <xsd:element name="convertMimeResponse"> 
+        <xsd:complexType>
+            <xsd:sequence>    
+                <xsd:element name="status" type="xsd:string" nillable="true"/>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+
+</xsd:schema>
+</types>
+
+<message name="convertMimeRequest">
+    <part name="parameters" element="types:convertMime"/>
+    <part name="mimeAttachment" type="xsd:base64Binary"/>
+</message>
+<message name="convertMimeResponse">
+    <part name="result" element="types:convertMimeResponse"/>
+    <part name="mimeAttachment" type="xsd:base64Binary"/>
+</message>
+
+<portType name="NoBodyPartsSEI">
+    <operation name="convertMime">
+        <input message="tns:convertMimeRequest"/>
+        <output message="tns:convertMimeResponse"/>
+    </operation>    
+</portType>
+
+<binding name="NoBodyPartsSEIBinding" type="tns:NoBodyPartsSEI">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" 
+                  style="document"/>
+    <operation name="convertMime">
+        <soap:operation soapAction=""/>
+        <input>
+            <mime:multipartRelated>
+                <mime:part>
+                    <soap:body use="literal"/>
+                </mime:part>
+                <mime:part>
+                    <mime:content part="mimeAttachment" type="application/octet-stream"/>
+                </mime:part>
+            </mime:multipartRelated>
+        </input>
+        <output>
+            <mime:multipartRelated> 
+                <mime:part>
+                    <soap:body use="literal"/>
+                </mime:part>
+                <mime:part>
+                    <mime:content part="mimeAttachment" type="application/octet-stream"/>
+                </mime:part>
+            </mime:multipartRelated>        
+        </output>        
+    </operation>
+</binding>
+
+<service name="NoBodyParts">
+    <port name="NoBodyPartsPort" binding="tns:NoBodyPartsSEIBinding">
+      <soap:address location="http://localhost/NoBodyParts" />
+    </port>
+</service>
+
+</definitions>
+

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/testutils/src/main/resources/wsdl/no_body_parts.wsdl
------------------------------------------------------------------------------
    svn:mime-type = text/xml