You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@ws.apache.org by "K. Swaminathan" <sw...@instantis.com> on 2002/07/11 03:34:05 UTC

using different urls for different operations of the same service

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>

Thanks
Swami K.