- From: Roberto Chinnici <roberto.chinnici@sun.com>
- Date: Thu, 18 Jul 2002 09:47:50 -0700
- To: Jeffrey Schlimmer <jeffsch@windows.microsoft.com>
- CC: www-ws-desc@w3.org
Jeffrey,
I like the idea of being able to specify defaults for these common attributes.
My main remak is that allowing these attributes to be specified on every
element under <soap:binding/> seems to be overkill.
Since it's hard for people to track the current value of an attribute that may
change as they move from a parent element to a child as well as from an
element to a sibling, I suspect that most people would end up using this
facility only for coarse-grained defaulting of values.
As a proof of this, look at how namespace declarations are used in XML
and especially at how hard it can be to follow the prefix-to-namespace
associations when the same prefix is bound to different namespaces at
various points in a document.
So my proposal is to follow roughly the approach used by XML Schema
and define attributes called
styleDefault
useDefault
encodingStyleDefault
namespaceDefault
that would be allowed only on the <soap:binding/> attribute.
Then, e.g. a missing "use" attribute on any element under <soap:binding/>
would default to the value of the "useDefault" attribute on the <soap:binding/>
element only (if present).
This way the information that someone reading WSDL would need to
keep in mind when examining a <soap:binding/> would simply be the value
of the four default attributes and those wouldn't change with the level of
nesting under <soap:binding/>.
In the examples you used, the two proposals would be entirely equivalent.
Here's what the bindings would look like with the xyzDefault attributes:
<binding name="StockQuoteSoapBinding"
type="tns:StockQuotePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
styleDefault="rpc"
useDefault="encoded"
encodingStyleDefault="http://schemas.xmlsoap.org/soap/encoding/"
namespaceDefault="http://example.com/stockquote" />
</binding>
<binding name="StockQuoteSoapBinding"
type="tns:StockQuotePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
styleDefault="document"
useDefault="literal" />
</binding>
My proposal would not allow you to write a binding such as this one:
<binding name="StockQuoteSoapBinding"
type="tns:StockQuotePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
namespace="http://example.com/stockquote"
style="rpc" />
<operation name="GetTradePrice" use="literal"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<input use="encoded">
<soap:body
namespace="http://example.com/foobar"/>
<soap:header
message="tns:TraderInfo"
part="id"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://example.com/stockquote"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
...
</binding>
Is the "TraderInfo" header literal or encoded, and what's its namespace? ;-)
Roberto
Jeffrey Schlimmer wrote:
> In the case where operations are all bound in the same way, the existing
> SOAP binding is repetitious. A straightforward way to simplify this for
> the common case is to allow the SOAP binding attribute information items
> (AII) to be placed as defaults on the soap:binding element information
> item (EII) define that AII placed on children of soap:binding would
> override the default, and allow the soap:operation EII to be omitted if
> they do not override any defaults.
>
> This is not a proposal to eliminate the ability to define an
> operation-by-operation binding; it is only a proposal to simplify the
> default case where all operations within a portType are bound the same
> way.
>
> The table below summarizes where WSDL 1.1 defines the SOAP binding AII.
>
> EII \ AII @style @use @encodingStyle @namespace
> --------------------------------------------------------
> soap:binding OK
> soap:operation OK[*]
> soap:body OK OK OK
> soap:header OK OK OK
> soap:fault OK OK OK
> soap:headerFault OK OK OK
>
> Where [*] overrides value from parent.
>
> The proposal is to change the definition of the SOAP binding AII as
> shown in the table below.
>
> EII \ AII @style @use @encodingStyle @namespace
> --------------------------------------------------------
> soap:binding OK OK OK OK
> soap:operation OK[*]
> soap:body OK[*] OK[*] OK[*]
> soap:header OK[*] OK[*] OK[*]
> soap:fault OK[*] OK[*] OK[*]
> soap:headerFault OK[*] OK[*] OK[*]
>
> EXAMPLE
>
> In the default case, where all the operations are bound the same way,
> this should simplify the binding significantly. For example, in WSDL
> 1.1, a SOAP rpc/encoded example in WSDL 1.1 would look like:
>
> <binding name="StockQuoteSoapBinding"
> type="tns:StockQuotePortType">
> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
> style="rpc" />
> <operation name="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>
>
> Where ... has to be repeated for each operation in the portType.
>
> By contrast, the same example given the proposal would look like:
>
> <binding name="StockQuoteSoapBinding"
> type="tns:StockQuotePortType">
> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
> style="rpc"
> use="encoded"
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> namespace="http://example.com/stockquote" />
> </binding>
>
> A SOAP document/literal example given the proposal would look like:
>
> <binding name="StockQuoteSoapBinding"
> type="tns:StockQuotePortType">
> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
> style="document"
> use="literal" />
> </binding>
>
> EOF
Received on Thursday, 18 July 2002 12:53:51 UTC