- From: Marc Hadley <Marc.Hadley@Sun.COM>
- Date: Wed, 16 Mar 2005 10:29:40 -0500
- To: Anish Karmarkar <Anish.Karmarkar@oracle.com>
- Cc: "public-ws-addressing@w3.org" <public-ws-addressing@w3.org>, David Hull <dmh@tibco.com>
I wonder if we can solve this in a way that suits everyone:
(i) Add a 'use' attribute to the existing EndpointReferenceType so that
a usage (reply, fault, from, custom extension) URI can be specified.
(ii) Redefine the existing ReplyTo, FaultTo and From elements to have
types restricted from the EndpointReferenceType with a defaulted use
attribute.
This way we provide the extensibility mechanism that David is
requesting since one can include an EndpointReference element in a
message with some custom value for the use attribute. We also maintain
the existing syntax for the predefined ReplyTo, FaultTo and From
elements.
I'm not a schema guru but what I mean is something like;
<xs:element name="EndpointReference"
type="tns:EndpointReferenceType"/>
<xs:complexType name="EndpointReferenceType">
<xs:sequence>
<xs:element name="Address" type="tns:AttributedURIType"/>
<xs:element name="ReferenceParameters"
type="tns:ReferenceParametersType" minOccurs="0"/>
<xs:element ref="tns:Metadata" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
** <xs:attribute name="use" type="xs:anyURI"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="ReplyTo" type="tns:ReplyEndpointReferenceType"/>
<xs:complexType name="ReplyEndpointReferenceType">
<xs:complexContent>
<xs:restriction base="tns:EndpointReferenceType">
<xs:sequence>
<xs:element name="Address"
type="tns:AttributedURIType"/>
<xs:element name="ReferenceParameters"
type="tns:ReferenceParametersType" minOccurs="0"/>
<xs:element ref="tns:Metadata" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
** <xs:attribute name="use" type="xs:anyURI"
default="http://www.w3.org/2005/02/addressing/reply"/>
<xs:anyAttribute namespace="##other"
processContents="lax"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
Marc.
On Mar 15, 2005, at 8:17 PM, Anish Karmarkar wrote:
>
> It seems to me that providing a general mechanism (such as
> wsa:associatedEndpoint) would enable implementors to implement
> patterns beyond simple request-response. Request-response is certainly
> a very important usecase that must be supported, but by providing a
> framework where users plug in URIs for specific "roles" in an
> interaction pattern seems like a win-win situation. We can define a
> 'reply' and 'fault' URI which would mean that there is a built in
> support for the oft-used req-response pattern. The ability to reuse an
> MAP (btw, this set is *not* extensible) to enable various interesting
> interactions lower the bar for supporting additional interactions.
> With such a generic mechanism all that is required for new interaction
> patterns is to define a new URI and associated semantics as opposed to
> a new SOAP header/module/feature that then has to be processed by all
> SOAP stacks. I agree that providing such extensibility is a good thing
> for the same reason that providing extensibility for [relationship] is
> a good thing. Most people view ws-addressing as a fundamental building
> block and providing the right extensibility hooks in our spec would go
> a long way.
>
> -Anish
> --
>
> David Hull wrote:
>> I've been going back through the core and SOAP specs after today's
>> discussion, and I'm still concerned about the difference between
>> reply/fault and any other kind of endpoint. I also have an at least
>> partially worked out example below the horizontal line, which I'd
>> encourage everyone to look through and comment on even if the
>> concerns below hold no interest.
>> To take Dave O's example, as I understand it, if I have a MEP that's
>> basically request/reply but also has an alternate reply, then two of
>> the three endpoints are considered MAPs, have properties defined for
>> them in the SOAP addressing module, and appear in the wsa:namespace.
>> The third is just some random SOAP header.
>> While it is true that one can always put an EPR wherever one wants,
>> whether as a header or in some distinguished place in the body, or
>> someplace out of band for that matter, it still seems strange to have
>> such an asymmetry instead of somehow allowing for an extensible set
>> of endpoints. It seems particularly strange when we explicitly make
>> [relationship] extensible. We could just as well have (and maybe
>> once did have?) an [in-reply-to] property and depend on SOAP
>> extensibility for anything further.
>> I would think that the reasons for making [relationship] extensible
>> are the usual ones: People are bound to define relationships other
>> than in-reply-to, and we would like to give them a standard place to
>> put those, in such a way that a processor could generically gather
>> "all related messages" from a message without having to understand
>> what in-reply-to and whatever other headers mean. I'm not precisely
>> sure what the use case would be for this, but it seems like a good
>> thing overall.
>> I'm hard-pressed to see why it wouldn't be equally good to do the
>> same thing with associated endpoints. As with [relationship], one
>> could then generically determine what endpoints might be expected to
>> receive messages due to a given message, without having to understand
>> what my custom "alternate-reply" header means (or assume that any
>> unknown EPR in a header is liable to carry ongoing traffic). This
>> might make routing easier, or help predict traffic volume, or have
>> entirely other uses. If anything, this seems like it might be more
>> directly useful than handling [relationship] generically.
>> If nothing binding documents for new interactions might be somewhat
>> easier to read. Along those lines, here is a draft of what an
>> "in-out-alternateOut" MEP might look like under the status quo. I'm
>> neither endorsing nor disparaging this version (at this point). I'm
>> more interested in whether this looks about right so far as what
>> would be required. Any feedback would be welcome.
>> ----------------------------------------------------------------------
>> --
>> XXX. In-out-alternateOut
>> This is a two-way MEP. A reply is expected hence mandating [reply
>> endpoint] in the request message. The response message might be a
>> fault. */In addition, an alternate reply may occur, hence mandating
>> [alternate reply endpoint] in the request message. The [alternate
>> reply endpoint] property is an abstract property like the standard
>> Message Addressing Properties. If present, it MUST be mapped to the
>> SOAP yatns:AlternateReply header, analogously to the mapping of
>> Message Addressing Properties described in sections 3 and 4 of the
>> WS-Addressing SOAP binding.
>> /*
>> */When formulating an alternate reply, follow the rules in section
>> 3.2 of the WS-Addressing Core Spec (Formulating a Reply Message), but
>> with rule 1 carrying the following additional clause:
>> /*
>> * */If the reply is an alternate reply message, select the EPR
>> from
>> the incoming message's [alternate reply endpoint] property. If
>> none is present, the processor MUST fault./*
>> */
>> /*
>> Table xxx-1. Message addressing */and other /*properties for in
>> message. Property Mandatory Description
>> [destination] Y Provides the address of the intended receiver of
>> this message
>> [action] Y Identifies the semantics implied by this message
>> [source endpoint] N Message origin. Unused in this MEP, but may be
>> included to facilitate longer running message exchanges.
>> [reply endpoint] Y Intended receiver for the reply to this message.
>> /[alternate reply endpoint]/
>> /Y/
>> /Intended receiver for alternate replies to this message./
>> [fault endpoint] N Intended receiver for faults related to this
>> message. May be included to direct fault messages to a different
>> endpoint than [reply endpoint].
>> [message id] Y Unique identifier for this message. Used in the
>> [relationship] property of the out message.
>> [relationship] N Indicates relationship to a prior message. Unused
>> in this MEP, but may be included to facilitate longer running message
>> exchanges.
>> */
>> /*
>> Table xxx-2. Message addressing /*and other */properties for out
>> message. Property Mandatory Description
>> [destination] Y Provides the address of the intended receiver of
>> this message
>> [action] Y Identifies the semantics implied by this message
>> [source endpoint] N Message origin. Unused in this MEP, but may be
>> included to facilitate longer running message exchanges.
>> [reply endpoint] N Intended receiver for replies to this message.
>> Unused in this MEP, but may be included to facilitate longer running
>> message exchanges.
>> /[alternate reply endpoint]/
>> /N/
>> /Intended receiver for alternate replies to this message. Unused in
>> this MEP, but may be included to facilitate longer running message
>> exchanges./
>> [fault endpoint] N Intended receiver for faults related to this
>> message. Unused in this MEP, but may be included to facilitate longer
>> running message exchanges.
>> [message id] N Unique identifier for this message. Unused in this
>> MEP, but may be included to facilitate longer running message
>> exchanges.
>> [relationship] Y Indicates that this message is a response to the
>> in message using the in message [message id] value and the predefined
>> |http://www.w3.org/@@@@/@@/addressing/reply| IRI.
>> */
>> /**/
>> /*
>> Table xxx-3. Message addressing /*and other */properties for
>> alternateOut message. Property Mandatory Description
>> [destination] Y Provides the address of the intended receiver of
>> this message
>> [action] Y Identifies the semantics implied by this message
>> [source endpoint] N Message origin. Unused in this MEP, but may be
>> included to facilitate longer running message exchanges.
>> [reply endpoint] N Intended receiver for replies to this message.
>> Unused in this MEP, but may be included to facilitate longer running
>> message exchanges.
>> /[alternate reply endpoint]/
>> /N/
>> /Intended receiver for alternate replies to this message. Unused in
>> this MEP, but may be included to facilitate longer running message
>> exchanges./
>> [fault endpoint] N Intended receiver for faults related to this
>> message. Unused in this MEP, but may be included to facilitate longer
>> running message exchanges.
>> [message id] N Unique identifier for this message. Unused in this
>> MEP, but may be included to facilitate longer running message
>> exchanges.
>> [relationship] Y Indicates that this message is a response to the
>> in message using the in message [message id] value and the predefined
>> |http://www.alternate.org/addressing/alternateReply| IRI.
>> */
>> /*
>
>
---
Marc Hadley <marc.hadley at sun.com>
Web Technologies and Standards, Sun Microsystems.
Received on Wednesday, 16 March 2005 15:29:40 UTC