Wsdl2java not creating service interface method signatures right for wrapped 
document literal
---------------------------------------------------------------------------------------------

                 Key: CXF-956
                 URL: https://issues.apache.org/jira/browse/CXF-956
             Project: CXF
          Issue Type: Bug
    Affects Versions: 2.0.1
         Environment: Windows XP, Java 1.5
            Reporter: Ben Brown
            Priority: Minor


Created the following WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
        xmlns:tns="http://bar.org";
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"; name="MyWebService"
        targetNamespace="http://bar.org";>
        
        <!-- T Y P E S -->
        <wsdl:types>
            <xsd:schema targetNamespace="http://foo.org/Transaction";
            elementFormDefault="qualified"
            xmlns="http://foo.org/Transaction";
            xmlns:xsd="http://www.w3.org/2001/XMLSchema";>

                    <xsd:element name="Transaction" type="TransactionType"/>
                
                    <xsd:complexType name="TransactionType">
                        <xsd:sequence>
                            <xsd:element name="Source" type="xsd:double"/>
                            <xsd:element name="Dest" type="xsd:double"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:schema>
            
            <xsd:schema targetNamespace="http://bar.org/TransactionResponse";
            elementFormDefault="qualified"
            xmlns="http://bar.org/TransactionResponse";
            xmlns:xsd="http://www.w3.org/2001/XMLSchema";>

                        <xsd:element name="TransactionResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="SettlementToken" type="xsd:int"/>
                                                <xsd:element 
name="SettlementTime" type="xsd:dateTime"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                </xsd:schema>
            
                <xsd:schema targetNamespace="http://bar.org";
                    xmlns:ns0="http://foo.org/Transaction";
                    xmlns:ns1="http://bar.org/TransactionResponse";
                    xmlns="http://bar.org";>

                        <xsd:import namespace="http://foo.org/Transaction"/>
                        <xsd:import 
namespace="http://bar.org/TransactionResponse"/>
                        
                        <xsd:element name="processTransaction">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element ref="ns0:Transaction"/>
                                    <xsd:element name="TransactionTime" 
type="xsd:dateTime"/>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                        
                        <xsd:element name="processTransactionResponse">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element ref="ns1:TransactionResponse"/>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                </xsd:schema>
        </wsdl:types>
        
        <!-- M E S S A G E S -->
        <wsdl:message name="processTransactionRequest">
                <wsdl:part element="tns:processTransaction" name="parameters"/>
        </wsdl:message>
        <wsdl:message name="ProcessTransactionResponse">
                <wsdl:part element="tns:processTransactionResponse" 
name="parameters"/>
        </wsdl:message>
        
        <!-- P O R T   T Y P E -->
        <wsdl:portType name="MyWebServicePortType">
                <wsdl:operation name="processTransaction">
                        <wsdl:input message="tns:processTransactionRequest"/>
                        <wsdl:output message="tns:ProcessTransactionResponse"/>
                </wsdl:operation>
        </wsdl:portType>
        
        <!-- B I N D I N G -->
        <wsdl:binding name="MyWebServiceSOAP" type="tns:MyWebServicePortType">
                <soap:binding style="document"
                        transport="http://schemas.xmlsoap.org/soap/http"; />
                <wsdl:operation name="processTransaction">
                        <soap:operation soapAction=""/>
                        <wsdl:input>
                                <soap:body use="literal"/>
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal"/>
                        </wsdl:output>
                </wsdl:operation>
        </wsdl:binding>
        
        <!-- S E R V I C E -->
        <wsdl:service name="MyWebService">
                <wsdl:port binding="tns:MyWebServiceSOAP" 
name="MyWebServiceSOAP">
                        <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
                </wsdl:port>
        </wsdl:service>
</wsdl:definitions>

Ran with following command: "wsdl2java -verbose MyWebService.wsdl"

Got:
@WebService(targetNamespace = "http://bar.org";, name = "MyWebServicePortType")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)

public interface MyWebServicePortType {

    @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
    @WebResult(targetNamespace = "http://bar.org";, partName = "parameters", 
name = "processTransactionResponse")
    @WebMethod
    public org.bar.ProcessTransactionResponse processTransaction(
        @WebParam(targetNamespace = "http://bar.org";, partName = "parameters", 
name = "processTransaction")
        org.bar.ProcessTransaction parameters
    );
}

I think should get something similar to:

@WebService(name = "MyWebServicePortType", targetNamespace = "http://bar.org";)
@XmlSeeAlso({
    org.bar.transactionresponse.ObjectFactory.class,
    org.bar.ObjectFactory.class,
    org.foo.transaction.ObjectFactory.class
})
public interface MyWebServicePortType {


    /**
     * 
     * @param transaction
     * @param transactionTime
     * @return
     *     returns org.bar.transactionresponse.TransactionResponse
     */
    @WebMethod
    @WebResult(name = "TransactionResponse", targetNamespace = 
"http://bar.org/TransactionResponse";)
    @RequestWrapper(localName = "processTransaction", targetNamespace = 
"http://bar.org";, className = "org.bar.ProcessTransaction")
    @ResponseWrapper(localName = "processTransactionResponse", targetNamespace 
= "http://bar.org";, className = "org.bar.ProcessTransactionResponse")
    public TransactionResponse processTransaction(
        @WebParam(name = "Transaction", targetNamespace = 
"http://foo.org/Transaction";)
        TransactionType transaction,
        @WebParam(name = "TransactionTime", targetNamespace = "")
        XMLGregorianCalendar transactionTime);

}

-- 
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