October 26, 2004
@ 12:50 PM

Below are two SOAP messages that are only subtly different when you look at the XML text, but the way how they “want to be treated” at the endpoint differs quite dramatically. The first targets a data-item/record/object and triggers a method, while the second targets an interface/endpoint/API and triggers a function/procedure.

The first message carries an out-of-band reference that is in the header, the second has that same reference inside the body. The first is a bit like how the implicit “this pointer” argument is passed “invisibly” to a C++ or C# method, the second is like passing an explicit context argument in C or (classic) Pascal or any other procedural language. The first binds to logic belonging to a specific object, the second binds to some object-neutral handling logic.

 

 

[1]
<soap:Envelope xmlns:soap=”http://www.w3.org/2003/05/soap-envelope”
               xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing”>
     <soap:Header>
           <wsa:To>http://www.example.org/Giro/Transfer</wsa:To>
           <my:Account xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”>262616161</my:Account>
           <wsa:Action>http://schemas.newtelligence.com/2004/10/MyBank/Giro/Transfer</wsa:Action>
            …
     </soap:Header>
     <soap:Body>
            <my:Transfer xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”>
               <my:TransferDestination>
                   <my:AccountNo>99999999999</my:AccountNo>
                   <my:Recipient>Peter Sample</my:Recipient>
                   <my:RoutingCode codeType=”DE-BLZ”>00000000</my:RoutingCode>
                   <my:Destination>Sample Bank</my:Destination>   
               </my:TransferDestination>
               <my:Amount>100.78</my:Amount>
               <my:Currency>EUR</my:Currency>
               <my:TransferDate>2004-10-27</my:TransferDate>
               <my:ValueDate>2004-10-27</my:ValueDate>
            <my:Transfer>
     </soap:Body>
</soap:Envelope>


[2]
<soap:Envelope xmlns:soap=”http://www.w3.org/2003/05/soap-envelope”
               xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing” >
     <soap:Header>
            <wsa:To>http://www.example.org/Giro/Transfer</wsa:To>
            <wsa:Action>http://schemas.newtelligence.com/2004/10/MyBank/Giro/Transfer</wsa:Action>
            …
     </soap:Header>
     <soap:Body>
            <my:Transfer xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”>
               <my:Account>262616161</my:Account>
               <my:TransferDestination>
                   <my:AccountNo>99999999999</my:AccountNo>
                   <my:Recipient>Peter Sample</my:Recipient>
                   <my:RoutingCode codeType=”DE-BLZ”>00000000</my:RoutingCode>
                   <my:Destination>Sample Bank</my:Destination>   
               </my:TransferDestination>
               <my:Amount>100.78</my:Amount>
               <my:Currency>EUR</my:Currency>
               <my:TransferDate>2004-10-27</my:TransferDate>
               <my:ValueDate>2004-10-27</my:ValueDate>
            <my:Transfer>
     </soap:Body>
</soap:Envelope>

 

 

A possible endpoint reference (“object pointer” in OOldspeak) for the message target for [1] is

 

<wsa:EndpointReference xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing” >
    <wsa:Address>http://www.example.org/Giro/Transfer</wsa:Address>

    <wsa:ReferenceParameters>
         <my:Account xmlns:my=”http://schemas.newtelligence.com/2004/10/MyBank”>262616161</my:Account>
    <wsa:ReferenceParameters> 

    ...
<wsa:EndpointReference>


A possible endpoint reference for [2] is

 

<wsa:EndpointReference xmlns:wsa=”http://schemas.xmlsoap.org/ws/2004/08/addressing” >
    
<wsa:Address>http://www.example.org/Giro/Transfer</wsa:Address>

<wsa:EndpointReference>

 

I am sure it’s boring to everybody else, but I find it quite funny how WS-Addressing turns out to be the “Object Access Protocol” for SOAP ;-)

Categories: Web Services

Saturday, October 30, 2004 1:59:39 AM UTC
Neither boring nor funny. WS-Addressing contains the seeds of destruction for Web services. It has the potential to shift the focus from self-described, self-contained messages to good old distributed oo. We've been down that path before.
greg
Comments are closed.