- From: Christopher B Ferris <chrisfer@us.ibm.com>
- Date: Sat, 4 Mar 2006 08:07:46 -0500
- To: xml-dist-app@w3.org
- Message-ID: <OF2D3D4E7A.EF4309B8-ON85257127.0043381E-85257127.00481E58@us.ibm.com>
Noah wrote in IRC: [07:02] noah: I'm afraid I disagree with Chris on the multiple MEPs/binding. I think they're in the spirit of Java interfaces. Saying that one binding can do multiple MEPs and keep them straight, lets you capture the mix n match between capabilities shared and not shared by different transports With all due respect to Noah's point, I'm not sure that I agree. Now, I will concede up-front that Noah may well have thought this through more thoroughly than I, and he may have concrete examples of cases where it is not necessarily the case that the problems and distinctions I cite below would be evident were one to overlay two or more MEPs over a single binding. I am certainly open to hearing more of what Noah has to say on the matter. I will also concede that I may be making too-fine a distinction here. Consider the SOAP Response, Request-Response and (the as-yet undefined) One-way MEPs. One might claim that a SOAP/HTTP can theoretically support them all. However, I would argue that this may not be the case. Consider that R-O-R says that if a fault is generated, send it on the response channel corresponding to that on which the message that generated the fault was received. Thus, even if there were a WSA response endpoint(s) which explicitly said: send the response and/or faults over here instead of on the response channel, because a SOAP mU (or VersionMismatch) fault MUST be generated before any other processing of the message is performed, and because the SOAP processor MUST NOT perform any other processing on that message (other than that necessary to deliver the fault), there is ALWAYS the chance that there will be a SOAP envelope transmitted on the response channel of an HTTP request. One cannot assume that the SOAP processor, written to the SOAP1.2 spec will ever even consider the WSA header blocks as being more than QNames to check against a table of supported QNames for the role that the node operates under. If you had a one-way MEP that said: you send a SOAP message and get no SOAP response (let's leave FAF out of it for the time being) and claimed that HTTP supported this MEP, then unless you have included some explicit hint at the HTTP level (not the SOAP level) that said: under no circumstances can you include a SOAP envelope in the HTTP response, that the sending endpoint MUST, regardless of what MEP were in play, be prepared to receive a SOAP envelope in the HTTP response. In the case of the SOAP Response MEP, the fact that you use a different HTTP method (GET), and you serialize the request such that there is no SOAP envelope infoset in the entity body I think makes it a different binding. The rules are different for this MEP than for R-O-R. Hence, if you were to try to layer multiple interfaces ala Java over the binding, unless you actually change the binding (and by that, I mean that you do something different at the binding layer for one MEP that you don't do for another) then you may be in for a nasty surprise. In the case where one defines a binding and says that it supports a given MEP, I don't believe that you can simply overlay another MEP if it requires that the rules for the binding be changed to accomodate it. I would argue that by doing something different in the binding, outside the SOAP envelope, that in fact, you have a different binding. The fact that the protocol used was the same is not material. The fact that the rules used to serialize the message for that binding are different for the two MEPs, I believe, makes it a different binding. Now, I will agree that you can certainly layer an interface over the API that implements the underlying transport (HTTP) but IMO, what you have to have is something specific that says: when you are using this MEP, do this with the underlying transport/transfer and when you use this other MEP, do something different; something that will inform the binding at the other end that you are using a different MEP. Could that be captured in the binding? Yes, I suppose, especially in the case where the binding is initially defined such that it supports a set of MEPs. However, I don't think that it is safe to assume that you can do this as a general rule of thumb. Cheers, Christopher Ferris STSM, Software Group Standards Strategy email: chrisfer@us.ibm.com blog: http://www.ibm.com/developerworks/blogs/dw_blog.jspa?blog=440 phone: +1 508 377 9295
Received on Saturday, 4 March 2006 13:08:30 UTC