- From: Henrik Frystyk Nielsen <henrikn@microsoft.com>
- Date: Thu, 10 Oct 2002 08:54:13 -0700
- To: "Jean-Jacques Moreau" <moreau@crf.canon.fr>, <noah_mendelsohn@us.ibm.com>
- Cc: "Marc Hadley" <marc.hadley@sun.com>, "Martin Gudgin" <mgudgin@microsoft.com>, <Nilo.Mitra@am1.ericsson.se>, <jones@research.att.com>, <fallside@us.ibm.com>, <gdaniels@macromedia.com>, <www-archive@w3.org>
I agree that the relay role has a more narrow scope but it also avoids many of the edge cases that another attribute would create like the following: <soap:Header> <hfn:myHeader role="..any role you like..." mustUnderstand="true" relayIfNotProcessed="true"> ... </hfn:myHeader> </soap:Header> and <soap:Header> <hfn:myHeader role="none" relayIfNotProcessed="false"> ... </hfn:myHeader> </soap:Header> and <soap:Header> <hfn:myHeader role="ultimate receiver" relayIfNotProcessed="true"> ... </hfn:myHeader> </soap:Header> Given that it is strictly speaking only a small subset of this functionality we are after, I would at this time tend to lean towards a more targeted (punt intended) approach. I think it is a reasonable assumption that any header block which may be processed and forwarded should define that functionality itself because the exact result of the forwarding will likely be a result of the processing of that header block. ...and avoiding going back to WD is definitely a goal! Henrik >-----Original Message----- >From: Jean-Jacques Moreau [mailto:moreau@crf.canon.fr] >Sent: Thursday, October 10, 2002 00:36 >To: noah_mendelsohn@us.ibm.com >Cc: Marc Hadley; Henrik Frystyk Nielsen; Martin Gudgin; >Nilo.Mitra@am1.ericsson.se; jones@research.att.com; >fallside@us.ibm.com; gdaniels@macromedia.com; www-archive@w3.org >Subject: Re: Proposal for new last call issue: Some >unprocessed headers should stay > > >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/soap>12-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 11:54:46 UTC