- From: Jean-Jacques Moreau <jean-jacques.moreau@crf.canon.fr>
- Date: Wed, 26 Jan 2005 11:07:16 +0100
- To: Asir Vedamuthu <asirv@webmethods.com>
- Cc: "'www-ws-desc@w3.org'" <www-ws-desc@w3.org>, "'jeffsch@windows.microsoft.com'" <jeffsch@windows.microsoft.com>
This looks good to me. JJ. Asir Vedamuthu wrote: > LC76d - http://www.w3.org/2002/ws/desc/4/lc-issues/#LC76d > > #1: At the Melbourne F2F, I observed a simple majority to explore > header proposals that are independent of the Features and Properties > framework. This draft is one such mechanism. It accommodates SOAP 1.1, > SOAP 1.2 and HTTP Bindings. AFAIK, this draft resolves all the sub > issues raised by Jeffrey Schlimmer in LC76d. > > The number two driving force behind this proposal is the desire for > simplicity. I bet the user community will enthusiastically receive a > product that simplifies their work and reduces their time to market. > > This is the first draft. I made it as brief as possible. If there is > sufficient interest, I will continue to produce newer versions that > will accommodate your requirements and issues. At the least, this > proposal will provide sufficient information to the WSDL Working Group > to make an informed decision. > > Comments, suggestions, corrections, thumbs up, thumbs down .. are > greatly appreciated. > > Regards, > > Asir S Vedamuthu > asirv at webmethods dot com > http://www.webmethods.com/ > > ------------------------------------------------------------------------ > > > First Class Headers - Proposed Resolution for LC76d > > Lets begin with a simple example. The following example shows the WSDL > definition of a simple service providing stock quotes. This service > supports a single operation called GetLastTradePrice, which is > deployed using the SOAP 1.2 protocol over HTTP. I added 3 statements > to turn on WS-Security header support. Again, just 3 statements - > import schema statement, header in input message reference component > and header in output message reference component. > ><?xml version="1.0"?> ><wsdl:definitions name="StockQuote" xmlns:wsdl="http://www.w3.org/@@@@/@@/wsdl" > targetNamespace="http://example.com/stockquote" > xmlns:tns="http://example.com/stockquote" > xmlns:wsoap="http://www.w3.org/@@@@/@@/wsdl/soap" > xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> > > *<xs:import > namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" > schemaLocation="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"/>* > > <wsdl:types> > <xs:schema targetNamespace="http://example.com/stockquote" > xmlns:xs="http://www.w3.org/2001/XMLSchema"> > <xs:element name="TradePriceRequest"> > <xs:complexType> > <xs:all> > <xs:element name="tickerSymbol" type="xs:string"/> > </xs:all> > </xs:complexType> > </xs:element> > <xs:element name="TradePrice"> > <xs:complexType> > <xs:all> > <xs:element name="price" type="xs:float"/> > </xs:all> > </xs:complexType> > </xs:element> > </xs:schema> > </wsdl:types> > > <wsdl:interface name="StockQuoteInterface"> > <wsdl:operation name="GetLastTradePrice" > pattern="http://www.w3.org/@@@@/@@/wsdl/in-out"> > <wsdl:input element="tns:GetLastTradePriceInput"> > *<wsdl:header element="wsse:Security" required="true" mustUnderstand="true"/>* > </wsdl:input> > <wsdl:output element="tns:GetLastTradePriceOutput"> > *<wsdl:header element="wsse:Security" required="true" mustUnderstand="true"/>* > </wsdl:output> > </wsdl:operation> > </wsdl:interface> > > <wsdl:binding name="StockQuoteSoapBinding" interface="tns:StockQuoteInterface" > type="http://www.w3.org/@@@@/@@/wsdl/soap" > wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"> > <wsdl:operation ref="tns:GetLastTradePrice" > wsoap:action="http://example.com/GetLastTradePrice"/> > </wsdl:binding> > > <wsdl:service name="StockQuoteService" interface="tns:StockQuoteInterface"> > <wsdl:documentation>My first service</wsdl:documentation> > <wsdl:endpoint name="StockQuoteEndPoint" binding="tns:StockQuoteBinding" > address="http://example.com/endpoint/stockquote"/> > </wsdl:service> > ></wsdl:definitions> > > Proposed solution has nine parts: > > > (1) Introduce a NEW Header Component > > > Header Component > > An Header Component describes an abstract piece of header that is > associated with the exchange of messages between the communicating > parties. The presence of an Header Component in a WSDL description > indicates that the service supports the header and may require a Web > Service consumer/client that interacts with the service to use that > header. Zero or more such headers may be used. > > > Header Component has 5 properties: > > * {namespace name} REQUIRED. An xs:anyURI. This URI MUST be > absolute as defined by [IETF RFC 2396]. > * {local name} REQUIRED. An xs:NCName. > * {element} REQUIRED. A reference to an XML element declaration in > the {element declarations} property of The Definitions > Component. This element represents a header. > * {required} REQUIRED. An xs:boolean. If the value of this > property is true, then the Web Service consumer/client MUST use > the Header that is identified by the {element declaration}. > * {mustUnderstand} OPTIONAL. An xs:boolean. If the property is > true, then the bindings that support expression of mandatory > data should mark them as mandatory in an appropriate way. > > > Header Component's XML Representation is, > ><header element="xs:QName" mustUnderstand="xs:boolean"? required="xs:boolean"?> > <documentation />? ></header> > > > Header Component's mapping is, > > * {element} = The element declaration from the {element > declarations} property of The Definitions Component resolved to > by the value of the element attribute information item if > present, otherwise empty. It is an error for the element > attribute information item to have a value and that value does > not resolve to a global element declaration from the {element > declarations} property of The Definitions Component. > * {namespace name} = actual value of the {element declaration}'s > [namespace name] property. > * {local name} = actual value of the {element declaration}'s > [local name] property. > * {mustUnderstand} = actual value of the mustUnderstand attribute > information item if present, otherwise absent. > * {required} = actual value of the required attribute information > item if present, otherwise "false". > > > (2) Hook Header Component into the Interface Fault Component > > > *Add the property {headers}* > > Add the property {headers} to the Interface Fault Component: {headers} > OPTIONAL. A set of Header components. > > > *Modify the XML Representation of Interface Fault Component* > ><definitions> > <interface> > <fault > name="xs:NCName" > element="xs:QName"? > > <documentation />? > [ *<header />* | <feature /> | <property /> ]* > </fault> > </interface> ></definitions> > > > Modify the Mapping of Interface Fault's XML Representation to > Component Properties > > Addition to Table 2-3: > > {headers} = The set of Header components corresponding to the header > element information items in [children], if any. > > > (3) Hook Header Component into the Message Reference Component > > > Add the property {headers} > > Add the property {headers} to the Message Reference Component: > {headers} OPTIONAL. A set of Header components. > > > Modify the XML Representation of Message Reference Component > ><definitions> > <interface> > <operation> > <input > messageLabel="xs:NCName"? > element="union of xs:QName, xs:Token"? > > <documentation />? > [ *<header />* | <feature /> | <property /> ]* > </input> > <output > messageLabel="xs:NCName"? > element="union of xs:QName, xs:Token"? > > <documentation />? > [ *<header />* | <feature /> | <property /> ]* > </output> > </operation> > </interface> ></definitions> > > > Modify the Mapping of Message Reference's XML Representation > to Component Properties > > Addition to Table 2-6: > > {headers} = The set of Header components corresponding to the header > element information items in [children], if any. > > > (4) Syntax Level Default Mechanism to Disable Header Construction > > > Modify the XML Representation of Binding Component > ><definitions> > <binding > name="xs:NCName" > interface="xs:QName"? > type="xs:anyURI" > *disableHeadersDefault="xs:boolean"?* > > <documentation />? > [ <fault /> | <operation /> | <feature /> | <property /> ]* > </binding> ></definitions> > > disableHeaderDefault AII is a syntax level convenient mechanism and > does not contribute anything to the component model. > > > (5) Mechanism to Disable Header Construction for the Binding Fault > Component > > > Add the property {disable headers} to Binding Fault Component > > {disable headers} OPTIONAL. An xs:boolean. If this property exists and > is true, then header construction is turned off. Scope of {disable > headers} is limited to the WSDL Header components defined for the > Interface Fault Component in {fault reference}. This property does not > interact with any other WSDL feature, Bindings, Extensions or Feature > and Properties framework. > > > Modify the XML Representation of Binding Fault Component > ><definitions> > <binding> > <fault > ref="xs:QName" *disableHeaders="xs:boolean"?* > > <documentation />? > [ <feature /> | <property /> ]* > </fault> > </binding> ></definitions> > > > Modify the Mapping of Binding Fault's XML Representation to > Component Properties > > Addition to Table 2-11: > > {disable headers} = The actual value of the disableHeaders attribute > information item, if present. If not, the actual value of the > disableHeadersDefault attribute information item of the parent > wsdl:binding element information item, if present. If not the value as > defined by the concrete binding, if applicable. > > > (6) Mechanism to Disable Header Construction for the Binding > Message Reference Component > > > Add the property {disable headers} to Binding Message > Reference Component > > {disable headers} OPTIONAL. An xs:boolean. If this property exists and > is true, then header construction is turned off. Scope of {disable > headers} is limited to the WSDL Header components defined for the > Interface Operation component being bound by the containing Binding > Operation component. This property does not interact with any other > WSDL feature, Bindings, Extensions or Feature and Properties framework. > > > Modify the XML Representation of Binding Message Reference > Component > ><definitions> > <binding> > <operation> > <input > messageLabel="xs:NCName"? *disableHeaders="xs:boolean"?* > > <documentation />? > [ <feature /> | <property /> ]* > </input> > <output > messageLabel="xs:NCName"? *disableHeaders="xs:boolean"?* > > <documentation />? > [ <feature /> | <property /> ]* > </output> > </operation> > </binding> ></definitions> > > > Modify the Mapping of Binding Fault's XML Representation to > Component Properties > > Addition to Table 2-11: > > {disable headers} = The actual value of the disableHeaders attribute > information item, if present. If not, the actual value of the > disableHeadersDefault attribute information item of the ancestor > wsdl:binding element information item, if present. If not the value as > defined by the concrete binding, if applicable. > > > (7) Add to SOAP Binding's Default Binding Rules > > > SOAP Header block construction > > Default value of the Binding element's disableHeadersDefault AII is > false. Default value of the Binding Operation Component's {disable > headers} property is false. > > If the {headers} property exists and non empty, and {disable headers} > is false, element information item conforming to an Header Component's > {element} property in the {headers} property MUST be turned into a > SOAP Header block. > > These elements are serialized according to their schemas, and if the > Header Component's {mustUnderstand} property exists with the value > "true", that particular SOAP header should be marked as > "mustUnderstand='true'" or "mustUnderstand='1'" as per the SOAP > specification. > > > (8) Add to HTTP Binding's Default Binding Rules > > > HTTP Header construction > > Default value of the Binding element's disableHeadersDefault AII is > false. Default value of the Binding Operation Component's {disable > headers} property is false. > > If the {headers} property exists and non empty, and {disable headers} > is false, element information item conforming to an Header component's > {element} property in the {headers} property MUST be turned into HTTP > header if possible. > > Only element information items of type "xs:string" or "xs:anyURI" may > be serialized. All complex data types are ignored. Attributes on data > elements are ignored. > > Each such element information item is serialized as follows: > > The HTTP header name used is the element information item local name. > The element information item local name MUST follow the field-name > production rules as specified in section 4.2 of [IETF RFC 2616]; if > not, the element information item MUST be ignored. If an HTTP header > corresponding to the element information item local name is set by a > different mechanism other than the HTTP Binding, such as the HTTP > stack or another feature, then an error MUST be raised. > > The HTTP header content is serialized from the corresponding element > information item value in UTF-8. If this serialization is NOT > possible, then the element information item MUST be ignored. > > > (9) Changes to XML Schema for WSDL 2.0 > > PENDING >
Received on Wednesday, 26 January 2005 10:08:29 UTC