DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14400>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14400

wsdl2java generates stub using parameter names for operations

           Summary: wsdl2java generates stub using parameter names for
                    operations
           Product: Axis
           Version: 1.0
          Platform: PC
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: WSDL processing
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Hi,

We have been using wsdl2java to generate client stub from a wsdl (relevant 
fraction has been pasted at the end of this message).  Since beta3, we have 
found the client stub generated looks like this:
    public void changeUserPassword(java.lang.String name, java.lang.String 
password, java.lang.String username, java.lang.String userPassword, 
java.lang.String confirmPassword) throws java.rmi.RemoteException, 
com.cysive.alertportal.wsdlclient.FaultResponse {
        if (super.cachedEndpoint == null) {
            throw new org.apache.axis.NoEndPointException();
        }
        org.apache.axis.client.Call _call = createCall();
        _call.addParameter(new javax.xml.namespace.QName("my-web-
service", "name"), new javax.xml.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        _call.addParameter(new javax.xml.namespace.QName("my-web-
service", "password"), new javax.xml.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        _call.addParameter(new javax.xml.namespace.QName("my-web-
service", "username"), new javax.xml.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        _call.addParameter(new javax.xml.namespace.QName("my-web-
service", "user-password"), new javax.xml.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        _call.addParameter(new javax.xml.namespace.QName("my-web-
service", "confirm-password"), new javax.xml.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        _call.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID);
        _call.setUseSOAPAction(true);
        _call.setSOAPActionURI("ChangeUserPassword");
        _call.setOperationStyle("rpc");
        _call.setOperationName(new javax.xml.namespace.QName("alertportal-web-
service", "password"));

        java.lang.Object _resp = _call.invoke(new java.lang.Object[] {name, 
password, username, userPassword, confirmPassword});

        if (_resp instanceof java.rmi.RemoteException) {
            throw (java.rmi.RemoteException)_resp;
        }
    }

On the line where the client calls setOperationName, it is passing 
in "password" as the name, which however is actually one of the parameter names.

With the wsdl2java in beta2, the stub generated looked like this:

    public void changeUserPassword(java.lang.String name, java.lang.String 
password, java.lang.String username, java.lang.String userPassword, 
java.lang.String confirmPassword) throws java.rmi.RemoteException, 
com.cysive.alertportal.wsdlclient.FaultResponse{
        if (super.cachedEndpoint == null) {
            throw new org.apache.axis.NoEndPointException();
        }
        org.apache.axis.client.Call call = createCall();
        javax.xml.rpc.namespace.QName p0QName = new 
javax.xml.rpc.namespace.QName("my-web-service", "name");
        call.addParameter(p0QName, new javax.xml.rpc.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        javax.xml.rpc.namespace.QName p1QName = new 
javax.xml.rpc.namespace.QName("my-web-service", "password");
        call.addParameter(p1QName, new javax.xml.rpc.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        javax.xml.rpc.namespace.QName p2QName = new 
javax.xml.rpc.namespace.QName("my-web-service", "username");
        call.addParameter(p2QName, new javax.xml.rpc.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        javax.xml.rpc.namespace.QName p3QName = new 
javax.xml.rpc.namespace.QName("my-web-service", "user-password");
        call.addParameter(p3QName, new javax.xml.rpc.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        javax.xml.rpc.namespace.QName p4QName = new 
javax.xml.rpc.namespace.QName("my-web-service", "confirm-password");
        call.addParameter(p4QName, new javax.xml.rpc.namespace.QName
("http://www.w3.org/2001/XMLSchema";, "string"), java.lang.String.class, 
javax.xml.rpc.ParameterMode.IN);
        call.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID);
        call.setUseSOAPAction(true);
        call.setSOAPActionURI("ChangeUserPassword");
        call.setOperationStyle("rpc");
        call.setOperationName(new javax.xml.rpc.namespace.QName("alertportal-
web-service", "changeUserPassword"));

        Object resp = call.invoke(new Object[] {name, password, username, 
userPassword, confirmPassword});

        if (resp instanceof java.rmi.RemoteException) {
            throw (java.rmi.RemoteException)resp;
        }
    }

Note that the operation name is set to "changePassword", which is not 
completely correctly either, because it should have been "ChangePassword" (with 
the first letter capitalized) because that is the soap action declared in the 
binding.

The relevant WSDL fraction goes here:

...
    <message name="changeUserPasswordMessage">
        <part name="name" element="tns:name"/>
        <part name="password" element="tns:password"/>
        <part name="username" element="tns:username"/>
        <part name="user-password" element="tns:user-password"/>
        <part name="confirm-password" element="tns:confirm-password"/>
    </message>
...
    <portType name="MyWebServicePortType">
...
        <operation name="changeUserPassword">
           <input message="tns:changeUserPasswordMessage"/>
           <output message="tns:successfulResponse"/>
           <fault name="changeUserPasswordFault" message="tns:faultResponse"/>
        </operation>
...
    </portType>
    <binding name="MyWebServiceSoapBinding" type="tns:MyWebServicePortType">
        <soap:binding style="rpc" 
transport="http://schemas.xmlsoap.org/soap/http"/>
...
        <operation name="changeUserPassword">
            <soap:operation soapAction="ChangeUserPassword"/>
            <input>
                <soap:body use="encoded" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>
            <output>
                <soap:body use="encoded" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
            <fault>
                <soap:fault name="changeUserPasswordFault" use="encoded" 
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
           </fault>
        </operation>
...
    </binding>

Reply via email to