One-way MEP text proposals

David Hull <[email protected]> Wed, 29 Mar 2006 13:35:14 -0500
Newsgroups gmane.text.xml.distributed
Message-ID <[email protected]>
As per my action item from today's meeting, here are two previous
attempts at defining a one-way SOAP MEP.  Dave Orchard's [1] dates to
December 2004.  It came out of the context of adapting protocols like
HTTP to one-way use.  As such, it includes a sample HTTP binding.   We
now handle the cases this was aimed at with the SOAP 1.1/HTTP note in
WSA and the soon-to-be-put-to-bed request-optional-response SOAP 1.2 MEP
(both of which owe much to [1]). 

Mine (attached as HTML) came along later, just over a year ago.  It was
intended as a pure one-way MEP.  I believe it's more appropriate to the
problem we're solving now.  In particular

    * It defines the one way MEP as consisting of "exactly one SOAP
      message" as opposed to "one SOAP message and one optional binding
      specific message"
    * It defines a state machine with three states (init, success and
      fail) for the sender and receiver, as opposed to five (init,
      requesting/receiving, sending+receiving/receiving+sending,
      success, fail).
    * It does not define an OutboundMessage property (only InboundMessage).
    * It defines ImmediateDestination but not ImmediateSender.  The
      receiver of a message will not generally have the sender's
      identity available.  If ImmediateSender is defined, it should be
      optional.
    * It "makes no claims about the disposition or handling of SOAP
      faults generated by the either SOAP node" as opposed to having
      faults generated while the receiver is "Receiving" made available
      in the OutboundMessage property.

I'm sure this will have to be tweaked to meet our needs, but it seems
like a better starting point, as it is aimed more directly at the "pure
one-way" case.

[1]
http://lists.w3.org/Archives/Public/public-ws-addressing/2004Dec/0159.html
one-way-MEP.htm (text/html, 13.5 KB)
<!DOCTYPE html PUBLIC "-W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>SOAP One-way Message Exchange Pattern</title>
  <meta content="&Ntilde;and&uacute; 0.6" name="GENERATOR">
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body>
<h1>6. SOAP-Supplied
Message Exchange Patterns and Features</h1>
<div class="div1">
<div class="div2">
<h3><a name="meppropconv"></a></h3>
</div>
<div class="div2">
<h3><a name="singlereqrespmep"></a>6.4 SOAP One-way Message
Exchange Pattern</h3>
<p>This section defines the message exchange pattern (MEP) called
"One-way". The description is an abstract presentation of the operation
of this MEP. It is not intended to describe a real implementation or to
suggest how a real implementation should be structured.</p>
<div class="div3">
<h4><a name="mepname"></a>6.4.1 SOAP Feature Name</h4>
<p>This message exchange pattern is identified by the URI (see SOAP
1.2 Part 1 <a
 href="imap://TSI-PA%[email protected]:143/fetch%3EUID%3E/Sent%3E204?part=1.1.2&amp;filename=SOAP%20Version%201.2%20Part%202%20%20Adjuncts.htm">[SOAP
Part 1]</a> <a
 href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/#procsoapmsgs">SOAP
Features</a>):</p>
<ul>
  <li>
    <p><a class="moz-txt-link-rfc2396E"
 href="http://www.w3.org/2003/05/soap/mep/one-way/">"http://www.w3.org/2003/05/soap/mep/one-way/"</a></p>
  </li>
</ul>
</div>
<div class="div3">
<h4><a name="bindinfdesc"></a>6.4.2 Description</h4>
<p>The SOAP one-way MEP defines the exchange of a single SOAP
message between a <span style="font-style: italic;">sender</span> and
a <span style="font-style: italic;">receiver</span>. In the absence of
failure in the underlying protocol, this MEP consists of exactly one
SOAP message.</p>
<p>In the normal operation of a message exchange conforming to the
one-way MEP, the message is first transferred from the sending SOAP
node to the receiving SOAP node. </p>
<p>Abnormal operation during a One-way message exchange is be
caused by a failure to transfer the message. Such failure might be
silent at either or both of the sending and receiving SOAP nodes
involved, or might result in the generation of a SOAP or
binding-specific fault (see <a
 href="imap://TSI-PA%[email protected]:143/fetch%3EUID%3E/Sent%3E204?part=1.1.3&amp;filename=SOAP%20Version%201.2%20Part%202%20%20Adjuncts.htm"><b>6.4.4
Fault Handling</b></a>). Also, during abnormal operation the SOAP nodes
involved in the message exchange might differ as to whether the message
exchange completed successfully. </p>
<p>The scope of a one-way MEP is limited to the exchange of single
message between one sending and one receiving SOAP node. This pattern
does not mandate any correlation between multiple messages nor specific
timing for multiple messages. Implementations MAY choose to support
more complex patterns of interaction.</p>
</div>
<div class="div3">
<h4><a name="bindformdesc"></a>6.4.3 State Machine Description</h4>
<p>The One-way MEP defines a set of properties described in <a
 href="imap://TSI-PA%[email protected]:143/fetch%3EUID%3E/Sent%3E204?part=1.1.4&amp;filename=SOAP%20Version%201.2%20Part%202%20%20Adjuncts.htm"><b>Table
3</b></a>.</p>
<a name="tabreqresprops"></a>
<table border="1">
  <caption>Table 3: Property definitions for Request-Response MEP</caption>
  <tbody>
    <tr>
      <th>Property Name</th>
      <th>Property Description</th>
      <th>Property Type</th>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/OutboundMessage">http://www.w3.org/2003/05/soap/mep/OutboundMessage</a></code>
      </td>
      <td>An abstract structure that represents the current
outbound message in the message exchange. This abstracts both SOAP
Envelope and any other information structures that are transferred
along with the envelope.</td>
      <td>Not specified</td>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/ImmediateDestination">http://www.w3.org/2003/05/soap/mep/ImmediateDestination</a></code>
      </td>
      <td>The identifier of the immediate destination of an
outbound message.</td>
      <td>xs:anyURI</td>
    </tr>
  </tbody>
</table>
<p>To initiate a message exchange conforming to the One-way MEP,
the sending SOAP node instantiates a local message exchange context. <a
 href="imap://TSI-PA%[email protected]:143/fetch%3EUID%3E/Sent%3E204?part=1.1.5&amp;filename=SOAP%20Version%201.2%20Part%202%20%20Adjuncts.htm"><b>Table
4</b></a> describes how the context is initialized.</p>
<a name="tabreqcon"></a>
<table border="1">
  <caption>Table 4: Instantiation of a Message Exchange Context for
a requesting SOAP node</caption> <tbody>
    <tr>
      <th>Property Name</th>
      <th>Property Value</th>
      <th>Notes</th>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName</a></code>
      </td>
      <td><a class="moz-txt-link-rfc2396E"
 href="http://www.w3.org/2003/05/soap/mep/one-way/">"http://www.w3.org/2003/05/soap/mep/one-way/"</a>
      </td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason</a></code>
      </td>
      <td>
      <p>"None"</p>
      </td>
      <td>
      <p>A relative URI whose base URI is the value of <code><a
 class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName</a></code>
      </p>
      </td>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role</a></code>
      </td>
      <td>
      <p>"SendingSOAPNode/"</p>
      </td>
      <td>
      <p>A relative URI whose base URI is the value of <code><a
 class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/ExchangePatternName</a></code>
      </p>
      </td>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/State">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/State</a></code>
      </td>
      <td>
      <p>"Init"</p>
      </td>
      <td>
      <p>A relative URI whose base URI is the value of <code><a
 class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role</a></code>
      </p>
      </td>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/OutboundMessage">http://www.w3.org/2003/05/soap/mep/OutboundMessage</a></code>
      </td>
      <td>An abstraction of the message </td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/ImmediateDestination">http://www.w3.org/2003/05/soap/mep/ImmediateDestination</a></code>
      </td>
      <td>An identifier (URI) that denotes the receiving SOAP node </td>
      <td>&nbsp;</td>
    </tr>
  </tbody>
</table>
<p>There may be other properties related to the operation of the
message exchange context instance. Such properties are initialized
according to their own feature specifications. </p>
<p>Once the message exchange context is initialized, control of the
context is passed to a (conforming) local binding instance. </p>
<p>The diagram below shows the logical state transitions at the
requesting and responding SOAP nodes during the lifetime of the message
exchange. At each SOAP node, the local binding instance updates
(logically) the value of the <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/">http://www.w3.org/2003/05/soap/bindingFramework/</a>
ExchangeContext/State</code> property to reflect the current state of
the message exchange. The state names are relative URIs, relative to a
base URI value carried in the <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/Role</a></code>
property of the local message exchange context.</p>
<span style="font-weight: bold; font-style: italic;">&lt;figure
omitted&gt;</span><br style="font-weight: bold; font-style: italic;">
<p align="center">Figure 2: One-way MEP State Transition Diagram.</p>
When the requesting and responding SOAP nodes transition between
states, the local binding instance (logically) updates a number of
properties. <a
 href="imap://TSI-PA%[email protected]:143/fetch%3EUID%3E/Sent%3E204?part=1.1.6&amp;filename=SOAP%20Version%201.2%20Part%202%20%20Adjuncts.htm"><b>Table
6</b></a> and <a
 href="imap://TSI-PA%[email protected]:143/fetch%3EUID%3E/Sent%3E204?part=1.1.7&amp;filename=SOAP%20Version%201.2%20Part%202%20%20Adjuncts.htm"><b>Table
7</b></a> describe these updates for the requesting and the responding
SOAP nodes, respectively.<br>
&nbsp;<a name="tabreqstatetrans"></a>
<table border="1" width="100%">
  <caption>Table 6: SendingSOAP Node State Transitions</caption> <tbody>
    <tr>
      <th valign="top">CurrentState</th>
      <th valign="top">Transition Condition</th>
      <th valign="top">NextState</th>
      <th valign="top">Action</th>
    </tr>
    <tr>
      <td valign="top">"Init"</td>
      <td valign="top">Unconditional</td>
      <td valign="top">"Sending"</td>
      <td valign="top">Initiate transmission of request message
abstracted in <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/OutboundMessage">http://www.w3.org/2003/05/soap/mep/OutboundMessage</a></code>
.</td>
    </tr>
    <tr>
      <td rowspan="2" valign="top">"Sending"</td>
      <td valign="top">Message transmission failure</td>
      <td valign="top">"Fail"</td>
      <td valign="top">Set <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason</a></code>
to "transmissionFailure"</td>
    </tr>
    <tr>
      <td valign="top">Completed message transmission<br>
      </td>
      <td valign="top">"Success"</td>
      <td valign="top">Set <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/ImmediateSender">http://www.w3.org/2003/05/soap/mep/ImmediateSender</a></code>
to denote the sender of the response message (may differ from the
values in <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/ImmediateDestination">http://www.w3.org/2003/05/soap/mep/ImmediateDestination</a></code>
). Start making an abstraction of the response message available in <code><a
 class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/InboundMessage">http://www.w3.org/2003/05/soap/mep/InboundMessage</a></code>
.</td>
    </tr>
  </tbody>
</table>
<p>&nbsp;</p>
<a name="tabresstatetrans"></a>
<table border="1" width="100%">
  <caption>Table 7: Responding SOAP Node State Transitions</caption> <tbody>
    <tr>
      <th valign="top">CurrentState</th>
      <th valign="top">Transition Condition</th>
      <th valign="top">NextState</th>
      <th valign="top">Action</th>
    </tr>
    <tr>
      <td valign="top">"Init"</td>
      <td valign="top">Start receiving request message</td>
      <td valign="top">"Receiving"</td>
      <td valign="top">Set <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/ImmediateSender">http://www.w3.org/2003/05/soap/mep/ImmediateSender</a></code>
to denote the sender of the request message (if determinable). Start
making an abstraction of the request message available in <code><a
 class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/InboundMessage">http://www.w3.org/2003/05/soap/mep/InboundMessage</a></code>
. Pass control of message exchange context to SOAP processor.</td>
    </tr>
    <tr>
      <td rowspan="2" valign="top">"Receiving"</td>
      <td valign="top">Message reception failure</td>
      <td valign="top">"Fail"</td>
      <td valign="top">Set <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason">http://www.w3.org/2003/05/soap/bindingFramework/ExchangeContext/FailureReason</a></code>
to "receptionFailure".</td>
    </tr>
    <tr>
      <td valign="top">Message received. Message available in <code><a
 class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/OutboundMessage">http://www.w3.org/2003/05/soap/mep/OutboundMessage</a></code>
      </td>
      <td valign="top">"Success"</td>
      <td valign="top">Initiate transmission of response message
abstracted in <code><a class="moz-txt-link-freetext"
 href="http://www.w3.org/2003/05/soap/mep/OutboundMessage">http://www.w3.org/2003/05/soap/mep/OutboundMessage</a></code>
.</td>
    </tr>
  </tbody>
</table>
<br>
</div>
<div class="div3">
<h4><a name="bindfaulthdn"></a>6.4.4 Fault Handling</h4>
This MEP makes no claims about the disposition or handling of SOAP
faults generated by the either SOAP node. </div>
</div>
</div>
</body>
</html>