Today in the W3C WS-Addressing working group face-to-face meeting here in Boston, the group adopted the metadata proposal into the draft specification. The most recent full proposal was co-submitted by IBM, IONA, Oracle, SAP, and Sun, and last week Microsoft submitted a well-designed friendly amendment that was acceptable to all the original co-submitters. Modulo a few details, this amendment is essentially what the group adopted today.
This proposal specifies a new spot in the endpoint reference (EPR) where information such as policies and service descriptions can be stored. This allows creators of EPRs to put as much or as little metadata about the endpoint directly into their EPRs (including none at all, of course). It provides a solution for a number of issues, including those I've mentioned previously here:
- It allows a service to advertise multiple means to access it, just as your business card does for you.
- It avoids the need to create an additional structure or collection just to associate groups of related single-address-only EPRs.
- It allows services to support formats and protocols other than just SOAP, as real-world services often need to do.
- It allows applications to relatively easily deal with EPR failures and failover scenarios.
As shown in the amended proposal, an EPR might include WSDL 1.1 information in the following fashion:
<wsa:EndpointReference
xmlns:wsa="http://www.w3.org/@@@@/@@/addressing">
<wsa:Address>http://example.com/fabrikam/acct</wsa:Address>
<wsa:Metadata>
<wsdl11:definitions targetNamespace="http://example.com/fabrikam"
xmlns:fabrikam="http://example.com/fabrikam"
xmlns:abc="http://www.abccorp.com/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:iiop="http://www.iiop.org/"
xmlns:wsdl11="http://www.w3.org/@@@@/@@/wsdl">
<wsdl11:import namespace="http://example.com/fabrikam"
location="http://example.com/fabrikam/fabrikam.wsdl"/>
<wsdl11:import namespace="http://www.abccorp.com/"
location="http://www.abccorp.com/abc.wsdl"/>
<wsdl11:service name="InventoryService">
<wsdl11:port name="ep1" binding="abc:soap-http-binding">
<soap:address location="http://example.com/fabrikam/acct"/>
</wsdl11:port>
<wsdl11:port name="ep2" binding="abc:iiop">
<iiop:address location="..."/>
</wsdl11:service>
</wsdl11:definitions>
</wsa:Metadata>
</wsd:EndpointReference>
It took a great deal of discussion and analysis to get to this point. Many thanks to the WG for their objective consideration of this proposal and their attention to getting it right.
