CR Issue (SOAP binding): Mapping of headers to MAPs and "WSA is engaged"

>From the discussion of wsa:UsingAddressing, wsdl:required and so forth,
it appears that there is some ambiguity as to how to define the set of
MAPs present in an incoming SOAP message. Indeed, section 2 of the SOAP
binding deals solely with the outbound side, defining how MAPs become
headers, but not vice versa.  The infoset description in section 3.1 of
the core provides most of the needed information, but there is at least
one gray area: Since wsa:To is given a default value, it is possible to
define the [destination] property of a message which contains no
wsa:Headers in its infoset.

This in turn appears to complicate the handling of messages received by
an endpoint whose wsa:UsingAddressing property is present but with
wsdl:required = false.  Essentially, the receiver must be able to
distinguish two cases, ideally without explicit reference to SOAP-level
concepts such as header blocks:

   1. wsa: SOAP headers were present, and therefore the endpoint should
      follow the full WSA rules (in particular, it MUST fault if
      required headers are absent)
   2. No wsa:SOAP headers were present, and therefore the endpoint
      handles the message without regard to WSA.

To my knowledge, there are at least two possible resolutions to this:

   1. (my preference).  Explicitly state that the MAPs for a SOAP
      message are defined as per section 3.1 of the core, but with the
      exception that a SOAP message with no wsa:headers present in its
      infoset has /no/ MAPs defined.  I.e., [destination] does not
      assume its default value.  Non-SOAP bindings would similarly
      define their own mappings from messages to MAPs.
   2. Explicitly state that the MAPs for a SOAP message are defined as
      per section 3.1, including unconditional defaulting of
      [destination].  In addition, introduce a "WSA engaged" flag
      indicating whether the message was intended as a WSA message. 
      This could be set based on whether any wsa:headers were present in
      the infoset, or on any other basis.  Non-SOAP bindings would
      similarly define their own mappings from messages to MAPs and the
      "WSA engaged" flag.

Note that in either case, wire-level optimizations are not an issue.  We
consider a SOAP message as its infoset, regardless of how that infoset
was serialized and deserialized.

Received on Wednesday, 28 September 2005 19:07:43 UTC