Hi,

Background:
 I am trying to generate a webservice, AuthWebSvc, with two operations,
 Login and soaptest. (the attached wsdl fragment describes my bindings and
 service section of my WSDL)

 The key, is that I am attempting to provide, different soap
 addresslocations for the different operations, of the service
 namely, "login" and "soaptest".
 (This I do, because, in this scheme, the URL is of the form
  http://blah.../servicename/operationname, and completely identifies 
 the service and the operation. This way my server/service implementation,
  can be smart about, handling both
        clients that send SOAPAction and
        Apache 2.3 style clients that wrap their body, inside an xml element
        with method name, even on a DOC style service
 (in other words, I do service dispatching based on the URL, and not on
 soapaction or first element of the body))

Problem I am facing:
The issue, is that many of the WSDL based clients tools,
(www.soapclient.com/soapclient,
xmlbus.com GenericWSDLClient) dont seem to process this WSDL correctly. 
They INCORRECTLY USE THE SAME URL for both the operations. (they seem to
ignore, the second port element in the service definition and sends both
the operations to the first soap-addresslocation)
Many tools do work ok. for example XMLSPY works fine with this WSDL.

Question:
My question is:
 Is this WSDL correct. Am I allowed to use different addresslocations for
 different operations of the same service. (It does validate using many 
 tools, and I think is well within the wsdl specs)
 Why aren't the tools handling these correctly?
 Has any one tried something on these lines.

I appreciate any pointers.

thanks
Swami K.

  <portType name="SampleWebSvc">
    <operation name="Login">
      <input message="tns:Login-Request"/>
      <output message="tns:Login-Response"/>
    </operation>
    <operation name="soaptest">
      <input message="tns:soaptest-Request"/>
      <output message="tns:soaptest-Response"/>
    </operation>
  </portType>
  <binding name="SoapBinding-Login" type="tns:SampleWebSvc">
    <soap:binding style="document" transport=
                "http://schemas.xmlsoap.org/soap/http/"/>
    <operation name="Login">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <binding name="SoapBinding-soaptest" type="tns:SampleWebSvc">
    <soap:binding style="document"      transport=
                        "http://schemas.xmlsoap.org/soap/http/"/>
    <operation name="soaptest">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>

  <service name="AuthWebSvc">
    <documentation>Sample Soap Details</documentation>
    <port name="Soap1" binding="tns:SoapBinding-Login">
      <soap:address
        location="http://myurl.com/WebServiceRouter/AuthWebSvc/Login"/>
    </port>
    <port name="Soap2" binding="tns:SoapBinding-soaptest">
      <soap:address
        location="http://myurl.com/WebServiceRouter/AuthWebSvc/soaptest"/>
    </port>
  </service>

Reply via email to