i051: Text for the relationship between [action]'s value and the SOAP Action HTTP header / feature

Based on today's discussions:

-=- SOAP 1.2 text for the spec -=-

  If the http://www.w3.org/2003/05/soap/features/action/Action
  property of the SOAP Action feature has a value, then the value of
  the http://www.w3.org/YYYY/MM/addressing/soap12/feature/Action
  property of the Web Services Addressing 1.0 feature MUST be
  identical to it.

Implication: if one uses the action parameter of the
application/soap+xml, then its value is the same as Addressing's
[action] message addressing property; example:


  <wsa:Action>http://foo.example</wsa:Action> with:


  <wsa:Action>http://foo.example</wsa:Action> with:


  <wsa:Action>http://foo.example</wsa:Action> with:

-=- SOAP 1.1 text for the spec -=-

SOAP 1.1 is trickier.

An empty SOAPAction means that no intent is specified, which is
equivalent to SOAP 1.2's property having no value.

A URI specified in SOAPAction specifies an intent with this URI, which
is equivalent to SOAP 1.2's property having a value.

However, there is a third case: if SOAPAction's value is "", the
intent is identified with the Request URI. Moreover, the WS-I BP
forces to have either a full URI, or "". So one cannot convey no
intent with the WS-I BP.

We therefore have the following choices:
1. say that "URI" sets the value of [action] to URI, empty value
   doesn't put any constraint, and "" sets the value of [action] to
   the Request URI.
2. "URI" sets the value of [action] to URI, and "" or empty value
   places no constraints: this violates SOAP 1.1 IMO[1], or at least
   defeats our effort to align [action] with the intent expressed in
3. say that "URI" sets the value of [action] to URI, and empty value
   doesn't put any constraint; "" is not allowed; people using the
   WS-I BP are forced to always specify a URI in SOAP Action.
4. do something different then for SOAP 1.2: force the alignment; it's
   essentially 3 for everybody, even people not using the WS-I BP.
5. go a complete other route for the issue

5 would be a shame as we got what we wanted for SOAP 1.2. 1 is
complex. 2 is bad. 3 is therefore my favorite option (it's a relaxed
version of 4):

  When issuing a SOAP HTTP Request, the value of the SOAPAction header
  field MUST either be equal to the value of the [address] message
  addressing property, or MUST be empty.

Implication: if one wants to communicate an action via SOAPAction,
then it matches Addressing's [action] message addressing property, or
no intent to specified; this is the same behavior as for SOAP 1.2;


  <wsa:Action>http://foo.example</wsa:Action> with:
  SOAPAction: "http://foo.example"


  <wsa:Action>http://foo.example</wsa:Action> with:


  <wsa:Action>http://foo.example</wsa:Action> with:
  SOAPAction: "http://bar.example"


  <wsa:Action>http://foo.example</wsa:Action> with:
  SOAPAction: ""

-=- Fault if this rule isn't followed -=-

With our direction to relate SOAP Action and [action], I believe that
we should specify to raise a fault if both have values and they don't
match. We can either define a new fault, or raise a
wsa:InvalidMessageInformationHeader fault.

  1. http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528
Hugo Haas - W3C
mailto:hugo@w3.org - http://www.w3.org/People/Hugo/

Received on Monday, 28 February 2005 23:06:43 UTC