- 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