- From: Roberto Chinnici <Roberto.Chinnici@Sun.COM>
- Date: Mon, 19 Jan 2004 19:18:18 -0800
- To: paul.downey@bt.com
- Cc: www-ws-desc@w3.org
Paul, I should have sent out email about the amendment I proposed, sorry. Indeed, I think that @messageReference should be defined on interface/operation/infault and interface/operation/outfault rather than on interface/fault. The rationale for that, as you correctly stated, is that the value of this attribute depends on the MEP in use by the operation that uses the fault. But @message definitely belongs on interface/fault, because its value won't vary across operations, and in particular it does not depend on any MEP. Also, I have to say that after thinking about it a bit more, I'm not so sure that the interface/fault/@name attribute should be of type xs:QName. I think your original (pre-amendments, that is) proposal got it right in using xs:NCName. I'd hate to have to explain to people why the name of an operation is an NCName while the name of a fault is a QName given that they are defined in the same scope (an interface). On the other hand, Amy was right in pointing out that *references* to a fault should use xs:QName. So my proposal is to revert interface/fault/@name back to a xs:NCName all while keeping references to faults as xs:QName(s). This is entirely consistent with the use of xs:QName for the binding/operation/@name attribute (a reference to an operation). Here's the updated pseudo-schema: <definitions> <interface> <fault name="ncname" message="qname"?> <documentation />? </fault>* <operation> <(in|out)fault name="qname" messageReference="ncname"? </(in|out)fault>* </operation>* </interface> <binding> <operation> <(in|out)fault name="qname"> <wssoap:fault>* .... </wssoap:fault>* </(in|out)fault>* </operation>* </binding>* </definitions> Thanks, Roberto -- Roberto Chinnici Java Web Services Sun Microsystems, Inc. roberto.chinnici@sun.com paul.downey@bt.com wrote: > In fulfilment of my Action point, here is an amended proposal to hoist > faults into the interface alongside operations. > > Changes > ------- > > Original Proposal (Paul): > http://lists.w3.org/Archives/Public/www-ws-desc/2003Dec/0046.html > > Made fault name a qname (Amy): > http://lists.w3.org/Archives/Public/www-ws-desc/2003Dec/0058.html > > Moved fault name to /binding/fault (Sanjiva): > http://lists.w3.org/Archives/Public/www-ws-desc/2003Dec/0068.html > > Status Quo from latest Editor's copies (Tom): > http://lists.w3.org/Archives/Public/www-ws-desc/2003Dec/0061.html > I haven't added Tom's further simplification to hoist the fault/code > into a faultcode attribute on the soap binding. I like this > simplification very much, but think we should discuss this separately > as it is soap binding specific change and may confuse this discussion. > > On last week's teleconference, Roberto pointed out a problem > with messageReference attribute following the abstract fault > definition: it refers to something defined inside a MEP. > I've therefore moved both messageReference and message attributes > back into the operation/(in|out)fault element. > > > > > Status Quo > ---------- > > <definitions> > > <interface> > <operation> > <(in|out)fault name="ncname" > messageReference="ncname"? > message="qname"? > <documentation />? > </(in|out)fault>* > </operation>* > </interface> > > <binding> > <operation> > <(in|out)fault> name="ncname" > messageReferences="ncname"> > <wssoap:fault>* > .... > </wssoap:fault>* > </(in|out)fault>* > </operation>* > </binding>* > > </definitions> > > > > Problems with Status Quo > ------------------------ > > 1) how a binding/operation/fault is linked to an > interface/operation/fault is unclear. > > 2) it is not obvious how several different binding faults may map > to a single interface fault. > > 3) duplication: many operations across the interface may return the > same fault, but the details such as documentation are defined under > each operation, possibly duplicated again for infault and > an outfault. > > 4) there is no certain way to ensure that two operations return > the "same" fault. > > > Proposal > -------- > > 1) each fault is defined in the interface at the same level > as operations. > > 2) each fault is to be given a abstract name, unique within the > interface. > > 4) each interface/operation identifies the interface faults returned > using the abstract name. > > 5) each fault in the binding is linked to an interface fault > by the abstract name > > > The following is an illustration of how this new structure could be > represented in XML: > > > <definitions> > > <interface> > <fault name="qname> > <documentation />? > </fault>* > > <operation> > <(in|out)fault name="qname" > messageReference="ncname"? > message="qname"? > </(in|out)fault>* > </operation>* > </interface> > > <binding> > <operation> > <(in|out)fault> name="qname"> > <wssoap:fault>* > .... > </wssoap:fault>* > </(in|out)fault>* > </operation>* > </binding>* > > </definitions> > > > Conclusion > ---------- > > Abstracting faults has the following benefits: > > - inference: identifying a fault using an abstract name, explicitly. > > - This supports a common way of working: an implementer may identify > all the exceptions and an action to be taken. > > - a binding does not have to actually describe all of the interface > faults > > - several different <binding> section faults may map to a single > interface fault e.g. both 'HTTP 404' and 'SOAP fault code: notfound' > may result in the same interface fault 'missing' being generated. > > > Paul > > -- > Paul Sumner Downey > Web Services Integration > BT Exact >
Received on Monday, 19 January 2004 22:18:21 UTC