[CXF2.2][wsdl2java][RPC/Lit] Unable to create stubs
---------------------------------------------------

                 Key: CXF-2136
                 URL: https://issues.apache.org/jira/browse/CXF-2136
             Project: CXF
          Issue Type: Bug
          Components: Tooling
    Affects Versions: 2.2
         Environment: Java 6
            Reporter: Gabo Manuel


Not sure how to attach so I am pasting the code here directly:

Error message:
WSDLToJava Error: Non unique body parts! In a port, operations must have unique 
operation signaure on the wire for successful dispatch. In port 
{http://domain.some/}MyObjectServicePort, Operations 
"{http://domain.some/}insertMyObject"; and "{http://domain.some/}updateMyObject"; 
have the same request body block {http://domain.some/}MyObject 

Command line:
D:\java\cxf\apache-cxf-2.2\bin>wsdl2java -ant -client -autoNameResolution -exsh 
true -d ClientDir MyObjects.wsdl 

MyObject.java:
package some.domain;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlType(name="MyObject")
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement(name="MyObject")
public class MyObject{
}

package-info.java:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://domain.some/";,
                                     elementFormDefault = 
javax.xml.bind.annotation.XmlNsForm.QUALIFIED
                                     )
package some.domain;

MyService.java:
package some.domain;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.jws.soap.SOAPBinding.Use;

import org.apache.log4j.Logger;

@WebService(serviceName="MyObjectService", portName="MyObjectServicePort")
@SOAPBinding(use=Use.LITERAL, style=Style.RPC)
public class MyService{
    private static Logger logger = Logger.getLogger(MyService.class);
        
    @WebMethod
        public int deleteMyObject( 
            @WebParam(name="longField1")
                long longField1){
                logger.info("delete MyObject received: " + longField1);
                return 1;
        }
    
    @WebMethod
        public MyObject getMyObject(
            @WebParam(name="longField1")
                long longField1){
                logger.info("get MyObject received: " + longField1);
        
        return generateMyObject();
        }

    @WebMethod
        public long insertMyObject(
            @WebParam(name="myObject")
                MyObject myObject){
                logger.info("insert MyObject Received: " + myObject);
                
                return 2;
        }

    @WebMethod
        public int updateMyObject(
            @WebParam(name="myObject")
                MyObject myObject){
                logger.info("update MyObject Received: " + myObject);

                return 3;
        }
        
    private static MyObject generateMyObject(){
        MyObject myObject = new MyObject();
        
        long tempLong = 1;
        
        myObject.setStringField1("S:"+tempLong++);
        myObject.setStringField2("S:"+tempLong++);
        myObject.setLongField1(tempLong++);
        myObject.setLongField2(tempLong++);
        
        return myObject;
    }
}

beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        xmlns:jaxws="http://cxf.apache.org/jaxws";
        xmlns:soap="http://cxf.apache.org/bindings/soap";
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://cxf.apache.org/bindings/soap 
        http://cxf.apache.org/schemas/configuration/soap.xsd
        http://cxf.apache.org/jaxws 
        http://cxf.apache.org/schemas/jaxws.xsd";>

        <import resource="classpath:META-INF/cxf/cxf.xml" />
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <jaxws:endpoint 
        id="mySoapService" 
        address="/soap/MyObjects"
        implementor="some.domain.MyService"
        >
    </jaxws:endpoint>
</beans>

MyObjects.wsdl:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="MyObjectService" 
targetNamespace="http://domain.some/"; 
xmlns:ns1="http://cxf.apache.org/bindings/xformat"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:tns="http://domain.some/"; xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
  <wsdl:types>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
targetNamespace="http://domain.some/"; xmlns:tns="http://domain.some/"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
<xs:element name="MyObject" type="tns:MyObject" />
<xs:complexType name="MyObject">
<xs:sequence>
<xs:element name="longField1" type="xs:long" />
<xs:element name="longField2" type="xs:long" />
<xs:element minOccurs="0" name="stringField1" type="xs:string" />
<xs:element minOccurs="0" name="stringField2" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
  </wsdl:types>
  <wsdl:message name="updateMyObject">
    <wsdl:part element="tns:MyObject" name="myObject">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="getMyObjectResponse">
    <wsdl:part element="tns:MyObject" name="return">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="getMyObject">
    <wsdl:part name="longField1" type="xsd:long">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="insertMyObjectResponse">
    <wsdl:part name="return" type="xsd:long">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="insertMyObject">
    <wsdl:part element="tns:MyObject" name="myObject">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="deleteMyObjectResponse">
    <wsdl:part name="return" type="xsd:int">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="updateMyObjectResponse">
    <wsdl:part name="return" type="xsd:int">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="deleteMyObject">
    <wsdl:part name="longField1" type="xsd:long">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="MyService">
    <wsdl:operation name="updateMyObject">
      <wsdl:input message="tns:updateMyObject" name="updateMyObject">
    </wsdl:input>
      <wsdl:output message="tns:updateMyObjectResponse" 
name="updateMyObjectResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="insertMyObject">
      <wsdl:input message="tns:insertMyObject" name="insertMyObject">
    </wsdl:input>
      <wsdl:output message="tns:insertMyObjectResponse" 
name="insertMyObjectResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="getMyObject">
      <wsdl:input message="tns:getMyObject" name="getMyObject">
    </wsdl:input>
      <wsdl:output message="tns:getMyObjectResponse" name="getMyObjectResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="deleteMyObject">
      <wsdl:input message="tns:deleteMyObject" name="deleteMyObject">
    </wsdl:input>
      <wsdl:output message="tns:deleteMyObjectResponse" 
name="deleteMyObjectResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="MyObjectServiceSoapBinding" type="tns:MyService">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"; 
/>
    <wsdl:operation name="updateMyObject">
      <soap:operation soapAction="" style="rpc" />
      <wsdl:input name="updateMyObject">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:input>
      <wsdl:output name="updateMyObjectResponse">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="insertMyObject">
      <soap:operation soapAction="" style="rpc" />
      <wsdl:input name="insertMyObject">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:input>
      <wsdl:output name="insertMyObjectResponse">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="getMyObject">
      <soap:operation soapAction="" style="rpc" />
      <wsdl:input name="getMyObject">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:input>
      <wsdl:output name="getMyObjectResponse">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="deleteMyObject">
      <soap:operation soapAction="" style="rpc" />
      <wsdl:input name="deleteMyObject">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:input>
      <wsdl:output name="deleteMyObjectResponse">
        <soap:body namespace="http://domain.some/"; use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="MyObjectService">
    <wsdl:port binding="tns:MyObjectServiceSoapBinding" 
name="MyObjectServicePort">
      <soap:address location="http://222.127.215.100:8030/soap/MyObjects"; />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Reference thread:
http://www.nabble.com/-CXF2.2--wsdl2java--RPC-Lit--Unable-to-create-stubs-td22698336.html

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to