- From: Prasad Yendluri <pyendluri@webmethods.com>
- Date: Tue, 04 Jun 2002 13:48:59 -0700
- To: Web Service Description <www-ws-desc@w3.org>
- Message-ID: <3CFD27BA.99EA9582@webmethods.com>
I should also add that the Spec also contains examples that violate this
requirement of abstract parts be defined using type if use is "encoded".
See Example 4 in section 3.1.
<message name="GetTradePriceInput">
<part name="tickerSymbol" element="xsd:string"/>
<part name="time" element="xsd:timeInstant"/>
</message>
<message name="GetTradePriceOutput">
<part name="result" type="xsd:float"/>
</message>
<portType name="StockQuotePortType">
<operation name="GetTradePrice">
<input message="tns:GetTradePriceInput"/>
<output message="tns:GetTradePriceOutput"/>
</operation>
</portType>
<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetTradePrice">
<soap:operation
soapAction="http://example.com/GetTradePrice"/>
<input>
<soap:body use="encoded"
namespace="http://example.com/stockquote"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://example.com/stockquote"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>>
</binding>
The parts of the message GetTradePriceInput are defined using "element"
form and the one in GetTradePriceOutput is defined using "type" form.
Where as at the binding level both specify use=encoded. See the
highlighted areas above.
Regards, Prasad
Prasad Yendluri wrote:
> Section 2.3 (Messages) of WSDL spec permits defining parts of a
> message using either "type" or "element" attribute:
>
> <definitions .... >
> <message name="nmtoken"> *
> <part name="nmtoken" element="qname"? type="qname"?/> *
> </message>
> </definitions>
>
> Section '2.3.2 Abstract vs. Concrete Messages' also states:
>
> Message definitions are always considered to be an abstract definition
> of the message content. A message binding describes how the abstract
> content is mapped into a concrete format.
>
> However, section '3.5 soap:body' in the SOAP bindings section requires
> that the parts be defined using the "type" if the "use" is "encoded":
>
> The required use attribute indicates whether the message parts are
> encoded using some encoding rules, or whether the parts define the
> concrete schema of the message.
>
> If use is encoded, then each message part references an abstract type
> using the type attribute. These abstract types are used to produce a
> concrete message by applying an encoding specified by the
> encodingStyle attribute.
>
> If use is literal, then each part references a concrete schema
> definition using either the element or type attribute.
>
> No explanation is given why the parts need to be defined using "type"
> if "use" is "encoded". The SOAP binding scheme is therefore requiring
> that things be defined in a particular way at the abstract level,
> violating the separation of abstract definitions and applying multiple
> concrete bindings to the same abstract level definitions.
>
> We should either remove the restriction or clearly state why this
> restriction needs to be there. No justification is provided in the
> spec for this, other than simply having one statement that calls for
> it.
>
> Regards, Prasad
Received on Tuesday, 4 June 2002 16:47:20 UTC