Below find a detailed proposal for resolving issues i024 and i026. Unlike our
previous draft proposal [1], this one details the changes this proposal
would make to the Core and WSDL binding specs, as requested by the WG in the
Monday 31 Jan 2005 teleconference.
[1] <http://lists.w3.org/Archives/Public/public-ws-addressing/2005Jan/0202.html>
Regards,
Paco Curbera (IBM)
Greg Truty IBM)
Rebecca Bergersen (IONA)
Steve Vinoski (IONA)
Anish Karmarkar (Oracle)
Umit Yalcinalp (SAP)
Marc Hadley (Sun)
We (IBM, IONA, Oracle, SAP, Sun) propose the following as a resolution
to issues i024 (metadata) and i026 (multiple ports). The
representation of multiple ports may be considered metadata, and hence
can be resolved within the metadata solution described below.
Our proposed solution is to add a metadata element to the EPR, and
move all existing EPR metadata elements into it:
<wsa:EndpointReference>
<wsa:Address>xs:anyURI</wsa:Address>
<wsa:ReferenceParameters>...</wsa:ReferenceParameters> ?
<wsa:Metadata>...</wsa:Metadata> ?
<xs:any/>*
</wsa:EndpointReference>
The EPR metadata element is intended to allow creators of EPRs to
include as much or as little metadata within each EPR as they deem
necessary. It allows for the inclusion of metadata directly ("by
value"), as well as for the inclusion of metadata indirectly ("by
reference"), or any combination thereof.
We propose that semantics and usage for metadata contained within the
EPR metadata element are specified by the relevant specification that
defines that particular metadata. The reason for this is that we
believe it allows for easy extensibility of the EPR with respect to
policies and other metadata. We propose moving the definitions of the
semantics and usage for any WSDL metadata that can appear within the
EPR metadata element to the WSDL binding document [1]. Similarly, any
future WS-Policy metadata intended for use within the EPR metadata
element would be defined in a WS-Addressing WS-Policy binding
specification.
The current draft WS-Addressing specification [2] already defines
several metadata elements within the EPR. Specifically, in section
2.1, the selected interface, service endpoint, and policies elements
each represent optional EPR metadata. As indicated by the previous
paragraph, we propose moving all of these elements into the EPR
metadata element.
Metadata defined within the EPR metadata element follows the
precedence definition defined in the resolution to issue i014 [3].
References
==========
[1] <http://dev.w3.org/cvsweb/~checkout~/2004/ws/addressing/ws-addr-wsdl.html>
[2] <http://dev.w3.org/cvsweb/~checkout~/2004/ws/addressing/ws-addr-core.html>
[3] <http://www.w3.org/2002/ws/addr/wd-issues/#i014>
Changes to the WS-Addressing Core Working Draft
===============================================
Section 2.1: remove the [selected interface], [service endpoint], and
[policies] abstract properties and their descriptions. Add the
following abstract property and description:
[metadata] : xs:any (0..1)
A reference may contain metadata that describes the behavior,
policies, requirements, and capabilities of an endpoint. Metadata may
be included in a reference to facilitate easier processing by a
consuming application, or because the metadata was dynamically
generated. However, such metadata is not authoritative and may be
stale or incoherent with the metadata associated with the endpoint at
the time the interaction occurs.
Section 2.2: change example 2-1 as follows:
<wsa:EndpointReference>
<wsa:Address>xs:anyURI</wsa:Address>
<wsa:ReferenceParameters>...</wsa:ReferenceParameters> ?
<wsa:Metadata>...</wsa:Metadata> ?
<xs:any/>*
</wsa:EndpointReference>
>From the list following example 2-1, remove items
/wsa:EndpointReference/wsa:InterfaceName,
/wsa:EndpointReference/wsa:ServiceName,
/wsa:EndpointReference/wsa:ServiceName/@EndpointName,
/wsa:EndpointReference/wsa:Policies,
/wsa:EndpointReference/wsa:Policies/{any} and their
descriptions. Replace these items and descriptions with the following:
/wsa:EndpointReference/wsa:Metadata
This OPTIONAL element contains the elements that convey the [metadata]
of the reference.
/wsa:EndpointReference/wsa:Metadata/{any}
Each child element of Metadata represents an individual [metadatum].
/wsa:EndpointReference/wsa:Metadata/@{any}
This is an extensibility mechanism to allow additional attributes to
be specified. Some examples in this specification show use of this
extensibility point to include a wsdlLocation[WSDL 2.0] attribute to
provide a hint for the location of a WSDL description of the WSDL
metadata specified within the [metadata] property.
Change the description for item /wsa:EndpointReference/@{any} as
follows:
This is an extensibility mechanism to allow additional attributes to
be specified.
Change Example 2-2 and the text just before it as follows:
The following shows an example endpoint reference. As indicated in its
[metadata], this element references the [selected interface]
"fabrikam:Inventory" at the endpoint URI
"http://example.com/www.fabrikam/acct". Note the use of the WSDL[WSDL
2.0] wsdlLocation attribute.
<wsa:EndpointReference
xmlns:wsa="http://www.w3.org/@@@@/@@/addressing">
<wsa:Address>http://example.com/fabrikam/acct</wsa:Address>
<wsa:Metadata
xmlns:fabrikam="http://example.com/fabrikam"
xmlns:wsdli="http://www.w3.org/@@@@/@@/wsdl-instance"
wsdli:wsdlLocation="http://example.com/fabrikamhttp://example.com/fabrikam/fabrikam.wsdl">
<wsa:InterfaceName>fabrikam:Inventory</wsa:InterfaceName>
</wsa:Metadata>
</wsa:EndpointReference>
Changes to the WSDL Binding Working Draft
=========================================
Section 2: replace the final paragraph of the beginning of this
section with the following:
Endpoint references complement and do not replace WSDL services. We
expect solutions built on WSDL to continue to utilize service
definitions. The endpoint references may link to services in WSDL, and
may directly cache information from WSDL definitions. Endpoint
references also support additional scenarios in which the WSDL
information is not known by a party processing a message. These
scenarios may include dynamic messaging or limited capability message
processors.
Section 2.1: replace this entire section with the following:
2.1 Information Model for Endpoint References
The WSDL binding of Web Services Addressing introduces the following
additional abstract properties for use within the [metadata] element
of the endpoint reference:
[selected interface] : QName (0..1)
A QName identifying a description of the sequences of messages that a
service sends and/or receives. This corresponds to a WSDL 2.0
interface and/or a WSDL 1.1 port type. If this property appears in EPR
[metadata] together with a [service] property, it MUST match the WSDL
2.0 interface name or one of the WSDL 1.1 port names specified in the
[service] property.
[service endpoint] : (QName, NCName (0..1)) (0..1)
A QName, NCName pair that provide a reference to a full description of
a set of service endpoints. The QName identifies the set of endpoints
at which a particular Web service is deployed, the NCName identifies
one endpoint in particular. The set of endpoints is represented by a
service in WSDL 2.0 and WSDL 1.1. A particular endpoint is represented
by an endpoint in WSDL 2.0 and a port in WSDL 1.1. If this property
appears in EPR [metadata] together with a [service] property, it MUST
match the WSDL service name specified in the [service] property.
[service] : (WSDL 1.1 or 2.0 service definition) (0..1)
A service definition as specified by either the WSDL 1.1 or WSDL 2.0
specification. If a [service] property appears in EPR [metadata], then
a [service endpoint] property MUST be specified, because the service
QName in the [service endpoint] specifies the targetNamespace for the
[service] property name attribute. If the [service] property specifies
multiple endpoints, then the port NCName MUST be specified in the
[service endpoint]. When a [service] property contains multiple
endpoints, all endpoints supporting the same interface/portType as the
one indicated by the [service endpoint] property are considered
alternative access channels (address plus binding) to reach the same
service.
Example 2-1. An EPR containing WSDL 2.0 metadata.
<wsa:EndpointReference
xmlns:wsa="http://www.w3.org/@@@@/@@/addressing">
<wsa:Address>http://example.com/fabrikam/acct</wsa:Address>
<wsa:Metadata
xmlns:fabrikam="http://example.com/fabrikam"
xmlns:abc="http://www.abccorp.com/"
xmlns:wsdl20="http://www.w3.org/2004/12/wsdl"
xmlns:wsdli="http://www.w3.org/@@@@/@@/wsdl-instance"
wsdli:wsdlLocation="http://example.com/fabrikamhttp://example.com/fabrikam/fabrikam.wsdl">
<wsa:ServiceName EndpointName="ep1">
fabrikam:InventoryService
</wsa:ServiceName>
<wsdl20:service name="InventoryService"
interface="fabrikam:Inventory">
<wsdl20:endpoint name="ep1" binding="abc:soap-http-binding"
address="http://example.com/fabrikam/acct"/>
<wsdl20:endpoint name="ep2" binding="abc:iiop"
address="..."/>
<wsdl20:endpoint name="ep3"
binding="abc:soap-http-binding"
address="http://alt.example.com/fabrikam/acct"/>
</wsdl20:service>
</wsa:Metadata>
</wsa:EndpointReference>
Example 2-2. An EPR containing WSDL 1.1 metadata.
<wsa:EndpointReference
xmlns:wsa="http://www.w3.org/@@@@/@@/addressing">
<wsa:Address>http://example.com/fabrikam/acct</wsa:Address>
<wsa:Metadata
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">
<wsa:ServiceName EndpointName="ep1">
fabrikam:InventoryService
</wsa:ServiceName>
<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>
</wsa:Metadata>
</wsd:EndpointReference>