views:

173

answers:

3

Most of the work I do is with RESTful web services but one of our customers has a legacy SOAP interface. We're a Java shop and currently moving things to Grails and supporting their old SOAP service is adding "custom" development to our enhancements.

Basically, their WSDL contains multiple operations with the same name that reference different methods. This causes problems with the libraries I'd like to use since they don't support overloading. So I've been modifying their WSDL to get things to work and each time we add new methods or make changes, I bring up cleaning up their WSDL to remove the overloaded operations.

Example:

<wsdl:operation name="GetOrder">
  <wsdl:input message="tns:GetOrderSoapIn" />
  <wsdl:output message="tns:GetOrderSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetOrder">
  <wsdl:input name="GetByAlternateOrderID" message="tns:GetByAlternateOrderIDSoapIn" />
  <wsdl:output name="GetByAlternateOrderID" message="tns:GetByAlternateOrderIDSoapOut" />
</wsdl:operation>
<wsdl:operation name="GetOrder">
  <wsdl:input name="GetOrderByID" message="tns:GetOrderByIDSoapIn" />
  <wsdl:output name="GetOrderByID" message="tns:GetOrderByIDSoapOut" />
</wsdl:operation>

I'd like to present good articles and documentation on why they should update their WSDL and also to justify the addition work required on our side if they don't. Simply telling them doesn't seem to be enough. I believe they should be able to modify their WSDL without too much difficulty, but don't have the expertise to tell them how or why.

Where are some good references on when overloading was dropped and why this causes issues with current tools?

A: 

SOAP allows for overloading:

From http://www.openlaszlo.org/lps4/docs/developers/rpc-soap.html#d0e118894

The SOAP specification allows overloaded operations, that is, methods that contain the same name but have different parameters. This creates a mismatch with Javascript, which does not allow overloaded methods.

tster
+2  A: 

Just the fact that the WSDL working group removed operation overloading (which was present in WSDL 1.1) from the WSDL 1.2/2.0 standards should be a clear indication that this feature was and is problematic.

See:

marc_s
+1  A: 

The relevant document is perhaps http://www.ws-i.org/Profiles/BasicProfile-1.0-2004-04-16.html. This forbids many things that are theoretically possible in WSDL 1.0, and many toolkits (e.g. Apache CXF) support only what this document permits.

bmargulies