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.