- From: Jean-Jacques Moreau <moreau@crf.canon.fr>
- Date: Thu, 10 Oct 2002 09:36:02 +0200
- To: noah_mendelsohn@us.ibm.com
- CC: Marc Hadley <marc.hadley@sun.com>, henrikn@microsoft.com, mgudgin@microsoft.com, Nilo.Mitra@am1.ericsson.se, jones@research.att.com, fallside@us.ibm.com, gdaniels@macromedia.com, www-archive@w3.org
Essentially, you're collapsing "relayIfNotProcessed" and "role=next" into "role=relay" (with the combined semantics)? I'm fine if this avoids us going back to WD (although I'd prefer the more general option "relayIfNotProcessed" [actually relay="..." with a variety of options]). Isn't there also the case of relaying even when processed? Yes, currently this is supported by reinsertion, but is header specific. Doesn't your description of a generic SOAP middleware also call for doing this automatically at the SOAP middleware level? This brings another question: can an intermediary change a role before forwarding? I.e. could I decide to change "role=relay" into "role=next"? Anyway, this goes into the right direction, and I'm all for forwarding to distApp (but no relay ;-))! Jean-Jacques. PS. I think we will also need to list "relay" into section "SOAP Roles and SOAP Nodes". noah_mendelsohn@us.ibm.com wrote: > ============================================================== > I expect to be submitting the following to distApp within the next day or > two as a proposed new issue. I think the note is self-explanatory, but I > wanted to show it in advance to those of you who have been involved in > informal discussion of this issue, and also to one or two more whom I > thought might be interested. Comments welcome (but I will mostly be at > DevCon the next few days, and then at Schema WG Monday and Tues. If you > think this is good enough to start discussion on distApp, let me know and > I'll put it there asap. We can decide what if anything to actually do > with the proposal once that's done.) Thanks. > > Noah > ============================================================== > > > At the face-to-face on the West Coast at SAS, several us noticed and began > > privately discussing what we now believe is a problem that needs at least > some attention in the specification. Specifically, there is a use case > that more or less all of us have come to believe is important, and for > which the specification is at best ambiguous and at worst in capable of > meeting without republication. Several of us have come up with a proposed > > resolution that we believe to be straightforward, low risk, and within > the bounds of what we can reasonably do without going back to last call. I > > am indebted to Mark Jones for first pointing this out, and to numerous > others including Henrik and Marc Hadley for helpful discussion and > comment. Particular thanks to Henrik for helping me to refine early > drafts of this note. > > The Problem > ----------- > > Among the reasons that we have the "next" role is for headers that carry > information to be available to all downstream nodes. One of the simplest > scenarios would be to have such a header that would travel with the > message, to be available to those nodes that "understand" the header, and > to be ignored and passed on by nodes that do not understand it. As a > simple example, I might want to put in the header indicating the time at > which the message was originally sent. More substantively, I might wish to > > put in a digital signature, to be checked by those who care, and ignored > but retained by others. > > SOAP 1.2 as proposed cannot support these simple scenarios. Why? Because > section 2.7.1 makes clear that a forwarding intermediary MUST remove from > the message all headers targeted to it, and can trigger reinsertion only > by processing and understanding a header. In the case where you don't > understand the header, you must remove it. It's essential to note that we > > are considering the case of mustUnderstand='false'; there is no problem > with the 'true' case. > > Approaches to Resolving the Problem > ----------------------------------- > > Discussion of this problem has been going on at a low level for awhile, in > > part because some of us have been trying to decide whether the existing > specification can somehow be made to do the right thing. Given that we > are in last call, that would obviously be a desirable approach. So, here > I briefly outline some of the approaches that were considered, and then in > > the next section I propose one that seems to some of us to be the best. > > It is tempting to ask whether a user might be able to design specific > headers and/or roles that would meet the need. In other words: if I > define a role and some headers to use with it, then I could say that you > wouldn't assume that role unless you knew the specification for at least > one of the headers, and that specification would implement a feature to > change the relay rules for that role. My personal conclusion is that this > > is possible in principle, but would not be practical when one considers > the way that most SOAP software will in fact be built. Reason: the core > rules regarding the relaying of headers are baked into section 2.7.1, and > in practice will often be implemented by general-purpose SOAP middleware. > The key point is that such middleware will in general be written to treat > all user-defined roles identically. Allowing particular roles to change > the relay rules requires that such middleware have pluggable handlers that > > key on specific role names, and this is something that few of us > anticipate doing. > > There is another alternative which is also coherent, and indeed is more > powerful than the one proposed below, but which seems to be overkill and > would probably take us back to last call. That alternative would be to > introduce a new attribute for use on header entries along the lines of > relayIfNotProcessed='true'. Thus: > > <soap:Header> > <nrm:myHeader role="..any role you like..." > mustUnderstand="false" > relayIfNotProcessed="true"> > ... > </nrm:myHeader> > </soap:Header> > > This seems to work, and has the capability of working with any role. It > just seems like more power and complexity than we need to deal with the > specific use case. If we were to get serious about this proposal, > there would be several details requiring refinement, but for now > I am just suggesting that this is not the direction to go. > > A Proposal > ---------- > > Having done the above analysis, we conclude that: > > * The use case is important that we must find a way to meet it > * The draft as written doesn't give explanation of how > * We need a simple, minimally invasive fix to what we have > > We propose one new builtin role to be called: > http://www.w3.org/2002/06/soap-envelope/role/relay . > In most respects, this role would be like any other. > Any intermediary or ultimate receiver MAY choose to > assume this role. The one significant difference, and > it is one that we believe has to be baked into the > specification from day one, is that section 2.7.1 will > be changed as follows: > > <original> > Forwarding SOAP intermediaries MUST process the message > according to the SOAP processing model defined in 2.6 > Processing SOAP Messages. They MUST also remove from > the SOAP message all SOAP header blocks targeted at > themselves, prior to forwarding, regardless of whether > these header blocks were processed or ignored. > > In addition, forwarding SOAP intermediaries MUST also > obey the specification for the SOAP forwarding feature > being used. The specification for such a feature MUST > describe the required semantics, including the rules > describing how the forwarded message is > constructed. Such rules MAY describe placement of > inserted or reinserted SOAP header blocks. Inserted > SOAP header blocks might be indistinguishable from one > or more of the header blocks removed above. > </original> > > <proposed> > Forwarding SOAP intermediaries MUST process the message > according to the SOAP processing model defined in > 2.6 Processing SOAP Messages. In addition, when > generating a SOAP message for the purpose of forwarding, > they MUST: > > * For any processed SOAP header block, as well as for > ignored SOAP header blocks targeted to the node > using a role other than > http://www.w3.org/2002/06/soap-envelope/role/relay: > remove the header block prior to forwarding > > * Retain all SOAP header blocks that were targeted at > the forwarding node using the role > "http://www.w3.org/2002/06/soap-envelope/role/relay" > but ignored during processing. > > > In addition, forwarding SOAP intermediaries MUST also > obey the specification for the SOAP forwarding feature > being used. The specification for such a feature MUST > describe the required semantics, including the rules > describing how the forwarded message is > constructed. Such rules MAY describe placement of > inserted or reinserted SOAP header blocks. Inserted > SOAP header blocks might be indistinguishable from one > or more of the header blocks removed above. > </proposed> > > [1] http://www.w3.org/2000/xp/Group/2/06/LC/soap12-part1.html#forwardinter > > ------------------------------------------------------------------ > Noah Mendelsohn Voice: 1-617-693-4036 > IBM Corporation Fax: 1-617-693-8676 > One Rogers Street > Cambridge, MA 02142 > ------------------------------------------------------------------ > > >
Received on Thursday, 10 October 2002 03:41:30 UTC