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>
