Kbase P130846: Calling a web service from ABL returns parameters in incorrect order.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  25/04/2008 |
|
Status: Unverified
FACT(s) (Environment):
All Supported Operating Systems
OpenEdge 10.x
Web Services
SYMPTOM(s):
Calling a web service from ABL returns parameters in incorrect order.
ABL code generated from the WSDL Analyzer
ABL code follows that of the WSDL
SOAP response message has return values in different order to the WSDL
SOAP response message is an RPC-style SOAP message
The web service doesn't implement the parameterOrder attribute
Other non-Progress web service consumers are able to use the web service
CAUSE:
While the web service may be complying with the SOAP specification, it is not following recommendations that improve interoperability.
The WS-I promotes interoperability, as shown below. The Basic Profile is a set of recommendations for SOAP implementations and WSDL definitions to follow to increase interoperability. To improve interoperability the recommendations, such as the first one below, narrow what the SOAP and WSDL specifications allow. While following the WS-I Basic Profile is not mandatory, most Web Service toolkits do seem to comply.
http://www.ws-i.org/Profiles/BasicProfile-1_2(WGAD).html#Ordering_of_part_Elements
4.5.1 Ordering of part Elements
Permitting the use of parameterOrder helps code generators in mapping between method signatures and messages on the wire.
R2301 The order of the elements in the soap:Body of an ENVELOPE MUST be the same as that of the wsdl:parts in the wsdl:message that describes it for each of the wsdl:part elements bound to the envelope's corresponding soapbind:body element.
R2302 A DESCRIPTION MAY use the parameterOrder attribute of an wsdl:operation element to indicate the return value and method signatures as a hint to code generators.
FIX:
There are a number of ways to work around this type of issue:
1. Have the web service return a SOAP response that matches the WSDL definitions.
2. Have the web service implement the parameterOrder attribute to assist code generators with determining the order of returned values.
3. If the web service response is a of a Document/Literal type, it's possible to have the ABL program send and receive single longchar variables. The ABL longchar response will contain the XML response that will need to be parsed. Please review the Progress web service documentation for further information.