- From: David Hull <dmh@tibco.com>
- Date: Fri, 15 Jul 2005 15:55:08 -0400
- To: "public-ws-addressing@w3.org" <public-ws-addressing@w3.org>
- Message-id: <42D8149C.6000902@tibco.com>
Here's a more rigorous treatment of the ongoing proposal for more
detailed faults. I've managed to fold together a few of the cases.
I've also added a few faults defined in the SOAP binding.
As before, there is open content everywhere for adding location and
other pertinent information. All attributes and content are optional.
There are no defaults. If it's not there, we don't know the value or we
do but we're not telling.
Please let me know if any of this is not clear.
------------------------------------------------------------------------
Detail Elements (pseudoschema)
<!-- EPR problems -->
<MissingAddressInEPR @{any}>{any}*</MissingAddressInEPR>
<MalformedAddressInEPR @{any}>
<badIRI>{any}*</badIRI>?
{any}*
</MalformedAddressInEPR>
<!-- MAP problems (which in some cases stem from EPR problems -->
<MAPCardinality @propertyName={PropertyName}? @inRequest={boolean}? @{any}>
<ActualCardinality @role={string}>{int}</ActualCardinality>* <!-- One per role, if need be, so element, not attribute -->
{any}*
</MAPCardinality>
<MalformedMAP @propertyName={PropertyName}? @{any}>
( {MissingAddressInEPR}
| {MalformedAddressInEPR}
| <MalformedIRI>{any}*</MalformedIRI>
| <NonAbsoluteIRI>{IRI}</NonAbsoluteIRI>
)?
{any}*
</MalformedMAP>
<DuplicateMessageID @{any}>
<MessageID>{IRI}</MessageID>? <!-- Same as infoset in 3.2 -->
{any}*
</DuplicateMessageID>
<!-- Faults mentioned in the SOAP binding -->
<MismatchedAction @{any}>
<SOAPAction>{IRI}</SOAPAction>?
<WSAAction>{IRI}</WSAAction>?
{any}*
<MismatchedAction>
<DestinationUnreachable @{any}>
<Destination>{EPR}</Destination>? <!-- Same as infoset in 3.2 -->
{any}*
</DestinationUnreachable>
<ActionNotSupported @{any}>
<Action>{IRI}</Action>? <!-- Same as infoset in 3.2 -->
{any}*
</ActionNotSupported>
<EndpointUnavailable @{any}>
<Endpoint>{EPR}</Endpoint>?
<RetryAfter>{unsignedLong}</RetryAfter>?
{any}*
</EndpointUnavaiable>
<!-- This is a string, not a QName, on the assumption that we're complaining about properties, not infoset items -->
PropertyName = "destination"|"source endpoint"|"reply endpoint"|"fault endpoint"|"relationship"|"relationship type"
------------------------------------------------------------------------
Where and how to use the above
The EPR elements can be used in any fault complaining about a bad EPR.
E.g., I give you an EPR to send some sort of notification to, but its
[address] is not well-formed. You'll probably want to send me back a
fault if possible. If you do, you can use wsa:MalformedAddressInEPR in
the detail for that fault. Similarly, anyone receiving a message with
bad MAPs may use the appropriate detail elements above.
In terms of the places where we actually mandate a fault:
* In core section 3.3, we MUST fault if a request is missing a
[reply endpoint]. The detail should look like this:
<MAPCardinality property="reply endpoint" inRequest="true">
<ActualCardinality>0</ActualCardinality>
</MAPCardinality>
* In core section 3.3, we MUST fault if a request is missing a
[message id]. The fault will be as above, but with
property="message id".
* In SOAP Binding section 2.4 (and in more detail later in 4.2), we
MUST fault if a the wsa:Action of the message does not match the
SOAP http://www.w3.org/2003/05/soap/features/action/Action
property. The detail should look like this:
<MismatchedAction>
<SOAPAction><!--Value of SOAP property--></SOAPAction>
<WSAAction><!--Value of WSA MAP--></WSAAction>
</MismatchedAction>
* In SOAP Binding section 3.2, we MUST fault if there is more than
one To, ReplyTo, FaultTo, Action or MessageID targeted at a
recipient. Suppose, for example, there is one ReplyTo targeted at
"role1" and one targeted at "role2", and the recipient is playing
both roles. The detail should look like this:
<MAPCardinality property="reply endpoint"> <!-- inRequest might be true, false or absent -->
<ActualCardinality role="role1">1</ActualCardinality>
<ActualCardinality role="role2">1</ActualCardinality>
</MAPCardinality>
* SOAP Binding section 5.3 defines the InvalidAddressingHeader
detail element. This should be allowed to have any of
MAPCardinality, MalformedMAP, DuplicateMessageID and
MismatchedAction as child element.
* SOAP Binding section 5.4 defines the
MessageAddressingHeaderRequired detail element. There are at
least three possible approaches here:
o Remove it in favor of InvalidAddressingHeader with
MAPCardinality children. ("children", not "child", as the
receiver might be playing multiple roles, none of which
supplies the header. The role attribute on the
ActualCardinality element captures this).
o Allow it to have MAPCardinality children.
o Try to add the information that MAPCardinality conveys (in
this case, mainly which roles were active) to
MessageAddressingHeaderRequired directly.
* SOAP Binding section 5.5 defines the DestinationUnreachable
subcode with no detail element. This should allow the
DestinationUnreachable detail element, to show what destination we
thought we were trying to reach.
* SOAP Binding section 5.6 defines the ActionNotSupported detail
element. This looks fine, except that it should probably allow
for open content like everything else, as shown above.
* SOAP Binding section 5.7 defines the EndpointUnavailable subcode,
with the RetryAfter detail element. I've folded this into an
EndpointUnavailable detail element with open content and a slot
for the offending endpoint.
And it looks like that's it.
Received on Friday, 15 July 2005 19:55:15 UTC