{"id":900,"date":"2005-08-18T01:26:00","date_gmt":"2005-08-18T05:26:00","guid":{"rendered":"http:\/\/www.markbaker.ca\/wp\/2005\/08\/18\/bound-by-bindings\/"},"modified":"2005-08-18T01:26:00","modified_gmt":"2005-08-18T05:26:00","slug":"bound-by-bindings","status":"publish","type":"post","link":"http:\/\/www.markbaker.ca\/blog\/2005\/08\/bound-by-bindings\/","title":{"rendered":"Bound by bindings"},"content":{"rendered":"<p>Here&#8217;s a simple question for WS-* advocates; how does one take a SOAP envelope\/infoset\ngenerated by the <a href=\"http:\/\/www.w3.org\/TR\/2005\/CR-ws-addr-soap-20050817\/\">WS-Addressing SOAP binding<\/a>,\nand send it via the\n<a href=\"http:\/\/www.w3.org\/TR\/2003\/REC-soap12-part2-20030624\/#soapinhttp\">SOAP 1.2 default HTTP binding<\/a>?\nShould be trivial, right?  Let&#8217;s see.  Here&#8217;s an example envelope (from the WS-A spec);<\/p>\n\n<pre>\n&lt;S:Envelope xmlns:S=\"http:\/\/www.w3.org\/2003\/05\/soap-envelope\"\n           xmlns:wsa=\"http:\/\/www.w3.org\/2005\/08\/addressing\"&gt;\n  &lt;S:Header&gt;\n   &lt;wsa:MessageID&gt;http:\/\/example.com\/6B29FC40-CA47-1067-B31D-00DD010662DA&lt;\/wsa:MessageID&gt;\n   &lt;wsa:ReplyTo&gt;\n     &lt;wsa:Address&gt;http:\/\/example.com\/business\/client1&lt;\/wsa:Address&gt;\n   &lt;\/wsa:ReplyTo&gt;\n   &lt;wsa:To&gt;http:\/\/example.com\/fabrikam\/Purchasing&lt;\/wsa:To&gt;\n   &lt;wsa:Action&gt;http:\/\/example.com\/fabrikam\/SubmitPO&lt;\/wsa:Action&gt;\n  &lt;\/S:Header&gt;\n  &lt;S:Body&gt;\n    ...\n  &lt;\/S:Body&gt;\n&lt;\/S:Envelope&gt;\n<\/pre>\n\n<p>That envelope contains both a wsa:To and wsa:Action header, which are,\nrespectively, where the message is to be sent, and the action that is\nrequested be done.  Now, off in SOAP\/HTTP land, we have a set of properties\nof the default binding which are required in order to construct a SOAP\/HTTP\nmessage.  Amoungst these properties are\n<a href=\"http:\/\/www.w3.org\/2003\/05\/soap\/mep\/ImmediateDestination\">ImmediateDestination<\/a> &#8211;\n&#8220;where the envelope is to be sent&#8221; &#8211; and then either\n<a href=\"http:\/\/www.w3.org\/2003\/05\/soap\/features\/action\/Action\">Action<\/a>\nor\n<a href=\"http:\/\/www.w3.org\/2003\/05\/soap\/features\/web-method\/Method\">Web-Method<\/a>\n(or both &#8211; who knows?!) which define the &#8211; you guessed it &#8211; &#8220;the action that is\nrequested be done&#8221;.  So, you&#8217;d think that WS-Addressing would have to define\nhow to populate those properties from a WS-A infoset, ideally as a function of\nthings like wsa:To and wsa:Action.  AFAICT, it doesn&#8217;t.<\/p>\n\n<p>And to think this think got to\n<a href=\"http:\/\/www.w3.org\/2004\/02\/Process-20040205\/tr.html#maturity-levels\"><em>CR<\/em><\/a>?!\nEgads.<\/p>\n\n<p>The concept of a &#8220;SOAP binding&#8221; is prima facie broken because it necessarily\nrequires treating underlying protocols as transport protocols, as if the SOAP\nenvelope was actually a SOAP message\n(hint: <a href=\"http:\/\/www.markbaker.ca\/2002\/09\/Blog\/2004\/12\/22#2004-12-wsa-transfer\">it isn&#8217;t<\/a>).\nWS-Addressing should either a) map the relevant part of its infoset to the property model\nof the default SOAP\/HTTP binding (e.g. wsa:To -&gt; SOAP&#8217;s ImmediateDestination), or b) define a\nnew SOAP\/HTTP binding that does the same thing, should problems be found reusing\nthe default binding.<\/p>","protected":false},"excerpt":{"rendered":"Here&#8217;s a simple question for WS-* advocates; how does one take a SOAP envelope\/infoset generated by the WS-Addressing SOAP binding, and send it via the SOAP 1.2 default HTTP binding? Should be trivial, right? Let&#8217;s see. Here&#8217;s an example envelope (from the WS-A spec); &lt;S:Envelope xmlns:S=&#8221;http:\/\/www.w3.org\/2003\/05\/soap-envelope&#8221; xmlns:wsa=&#8221;http:\/\/www.w3.org\/2005\/08\/addressing&#8221;&gt; &lt;S:Header&gt; &lt;wsa:MessageID&gt;http:\/\/example.com\/6B29FC40-CA47-1067-B31D-00DD010662DA&lt;\/wsa:MessageID&gt; &lt;wsa:ReplyTo&gt; &lt;wsa:Address&gt;http:\/\/example.com\/business\/client1&lt;\/wsa:Address&gt; &lt;\/wsa:ReplyTo&gt; &lt;wsa:To&gt;http:\/\/example.com\/fabrikam\/Purchasing&lt;\/wsa:To&gt; &lt;wsa:Action&gt;http:\/\/example.com\/fabrikam\/SubmitPO&lt;\/wsa:Action&gt; &lt;\/S:Header&gt; [&hellip;]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[26,40],"class_list":["post-900","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-soap","tag-xml"],"_links":{"self":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/comments?post=900"}],"version-history":[{"count":0,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/posts\/900\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/media?parent=900"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/categories?post=900"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.markbaker.ca\/blog\/wp-json\/wp\/v2\/tags?post=900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}