- From: Doug Davis <dug@us.ibm.com>
- Date: Tue, 29 May 2001 14:18:44 -0400
- To: xml-dist-app@w3.org
David asked for the working group to scan the spec and
list the issues (with possible solution(s)) that we would
like to discuss next week - here's an oldie but
a goodie that I'd like to resurface:
SOAPAction
----------
IMHO, the spec is not clear on the exact purpose or meaning
of SOAPAction. "Intent" is just too vague. It can mean
anything - which to some people is good because it leaves it
up to the SOAP processor (not the spec) to decide how to use
it. But at the same time, if someone chooses to use it as
routing information that's wrong. Also, it isn't clear how it
maps from one transport to another (esp. in the case where
headers are not supported in one of the transports).
Aside from what the spec _does_ actually say about SOAPAction
being used for filtering (which to me is a form of routing)
I believe I've heard 2 other reasons for SOAPActions' existence:
1 - It indicates that this is a SOAP message
2 - It gives a "hint" as to the target web service being used
For me, 1 seems like it can be solved through other means (URL
mappings, other HTTP headers...). #2 is the real one that I
think makes SOAPAction, possibly, useful. But, since it is
just a "hint" as to the "intent" and not the complete target
web service, it only gives partial help for #2. I think
implementations that want to do a streaming SOAP processor will
be looking for SOAPAction to really help out a lot by allowing
them to identify the web services as soon as possible, w/o having
to scan ahead for the Body. However, due to the vagueness of
SOAPAction's definition I don't believe anyone can really count
on being able to fully use it for that purpose. Nor can they
count on it for non-HTTP transports.
I'd like to propose the following for our discussions next week:
1 - Remove SOAPAction from the spec.
For migration purposes we can say that if someone chooses to
use an HTTP header that just happens to be called SOAPAction
that's fine but the SOAP spec makes no mention of its use.
2 - Add a new attribute to the SOAP-ENV element: "target" or
"targetNS" who's defined to have the same value as the
namespace of the element in the Body that defines the Web
Service being invoked. (Note that it might not be the root
element.) And the SOAP processor should fault if they don't
match. If there is no namespace to match then the attribute
can be "" or left out.
(Possible change: should the method name be there too if
there is a method name? Should "target" be left more
flexible to say that "it indicates the target web service" and
just leave it at that. Then it can be up to the specific
implementation to determine whether it should be the
namespace, namespace+methodName, ns+methodName+correlationID
or something else - but whatever it is it needs to be
something that is verifiable. My worry with this is that
it could end up being just as vague as SOAPAction. More
discussions needed on this one but I like the idea of
keeping it more open. The key would be that no matter
which way we went it MUST be something that is verifiable
once we have read the entire envelope.)
This keeps around the 2nd reason for having SOAPAction but also
narrows its definition such that:
- it is explicit as to its use and content
- it is part of the SOAP Envelope so we don't need to worry
about what to do when we switch between transports
Enough for now, we can poke fun at this next week. 8-)
-Dug
Received on Tuesday, 29 May 2001 14:19:01 UTC