Extension Handling 101: Example 1

As I said on the conference call, it seems we have a disconnect with 
regards to our extension handling models. As a way of bridging this gap, 
I thought I would throw out a few examples of extended Subscribe 
requests and explain how I think they should be handled.

Here's Example 1:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
            xmlns:wsa="http://www.w3.org/2005/08/addressing"
            xmlns:wse="http://www.w3.org/2009/02/ws-evt"
            xmlns:frq="http://www.refractory.org/timeDilation">
  <s:Header>
    <wsa:Action>http://www.w3.org/2009/02/ws-evt/Subscribe</wsa:Action>
    . . .
  </s:Header>
  <s:Body>
    <wse:Subscribe>
      <wse:Delivery>
        <wse:NotifyTo>
          <wsa:Address>http://www.example.com/MyEventSink/OnStormWarning</wsa:Address>
        </wse:NotifyTo>
*        <frq:Dilate>
          <frq:TimeScale useRelative="true">
            <frq:PhaseShift>-73.243</frq:PhaseShift>
          </frq>
          <frq:Margin>2009-07-07T15:27:26-0700</frq:Margin>
        </frq:Dilate>*
      </wse:Delivery>
    </wse:Subscribe>
  </s:Body>
</s:Envelope>

*OH MY GOD!* What should I do with this request?!? I have no idea what I 
am supposed to do with the frq:Dilate element, much less what the 
frq:TimeScale, frq:PhaseShift, and frq:Margin elements mean. I'd better 
look at the spec:

The elements defined in this specification MAY be extended at the points 
indicated by their outlines and schema. Implementations MAY add child 
elements and/or attributes at the indicated extension points but MUST 
NOT contradict the semantics of the parent and/or owner, respectively. 
If a receiver does not recognize an extension, the receiver SHOULD 
ignore that extension. Senders MAY indicate the presence of an extension 
that has to be understood through the use of a corresponding SOAP Header 
with a soap:mustUnderstand attribute with the value "1".

Oh. In that case I'll just ignore the whole frq:Dilate thingy, create 
the Subscription, and respond with the following:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
            xmlns:wsa="http://www.w3.org/2005/08/addressing"
            xmlns:wse="http://www.w3.org/2009/02/ws-evt">
  <s:Header>
    <wsa:Action>http://www.w3.org/2009/02/ws-evt/SubscribeResponse</wsa:Action>
    . . .
  </s:Header>
  <s:Body>
    <wse:Subscribe>
      <wse:SubscriptionManager>
        <wsa:Address>
          http://www.example.org/oceanwatch/SubscriptionManager
        </wsa:Address>
      </wse:SubscriptionManager>
    </wse:Subscribe>
  </s:Body>
</s:Envelope>

And so concludes Example 1.

- gp

Received on Tuesday, 7 July 2009 22:50:49 UTC