I have a situation where I a client is using an element instead of a 
type for a message parameter in my WSDL file (simplified example 
attached). When I generate the stubs, the operation name call looks like 
this:

  _call.setOperationName(new 
javax.xml.namespace.QName("http://www.xyz.com/schema/Elements";, 
"anElement"));

rather than the expected:

_call.setOperationName(new 
javax.xml.namespace.QName("http://www.xyz.com/soap-services";, 
"anOperation"));

I read the comments for getOperationQName and someone wrote:

       // NOTE: it is possible for someone to define a part as an element
       // while using rpc/encoded, which is wrong and we might want to 
catch it
       // here.

Is this actually true ? Could someone point me to the spec that points 
this out ? It seems that this could be easy to fix by adding

@@ -566,6 +566,9 @@
         if (ns == null) {
             ns = "";
         }
+        else {
+            return new QName(ns, operationName);
+        }

to Utils.java, revision RC1

regards,

Chris Burnley
<schema version="1.0" targetNamespace="http://www.xyz.com/schema/Elements";
        xmlns:types="http://www.xyz.com/schema/Types"; 
xmlns="http://www.w3.org/2001/XMLSchema";>

        <import namespace="http://www.xyz.com/schema/Types"; 
schemaLocation="Types.xsd"/>

        <element name="anElement" type="types:AType"/>
</schema>
<schema version="1.0" targetNamespace="http://www.xyz.com/schema/Types";
        xmlns="http://www.w3.org/2001/XMLSchema";>

        <simpleType name="AType">
                <restriction base="string">
                        <maxLength value="9"/>
                </restriction>
        </simpleType>

</schema>
<definitions name="AxisBug"
        targetNamespace="http://www.xyz.com/soap-services";
        xmlns:tns="http://www.xyz.com/soap-services";
        xmlns:xsd="http://www.w3.org/2001/XMLSchema";
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
        xmlns:ele="http://www.xyz.com/schema/Elements";
        xmlns="http://schemas.xmlsoap.org/wsdl/";>

        <import namespace="http://www.xyz.com/schema/Elements";
                location="Elements.xsd"/>

        <message name="AMessage">
                <part name="aParameter" element="ele:anElement"/>
        </message>

        <portType name="APortType">
                <operation name="anOperation">
                        <input message="tns:AMessage"/>
                </operation>
        </portType>

        <binding name="ABinding" type="tns:APortType" >
                <soap:binding style="rpc"
                transport="http://schemas.xmlsoap.org/soap/http/";
                namespace="http://www.xyz.com/soap-services"/>
                <operation name="anOperation">
                        <input>
                                <soap:body use="encoded"
                                namespace="http://www.xyz.com/soap-services";
                                
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </input>
                </operation>
        </binding>

        <service name="CalypsoService">
                <port name="CalypsoPort" binding="tns:ABinding">
                        <soap:address
                        location="http://www.xyz.com/soap/servlet/rpcrouter"/>
                </port>
        </service>

</definitions>

Reply via email to