Extended Domain Expressions

In Maryann's presentation today she described a Policy Attachment mechanism (Attachment model 2) that uses the <wsp:PolicyAttachment> expression to associate Policies with subjects arbitrarily using a domain expression to describe the subjects e.g. a message, sequence of messages, a group of endpoints, etc.

This note discusses the details of the domainExpressions and proposes some extensions.

WSDL 2.0 discusses how URIs can be created to refer to individual  WSDL definitions.
But what if you are not using WSDL 2.0 or if you are using protocols other that SOAP over HTTP.
Here are some suggestions:

HTTP Service:
Endpoint: http://host:port/webapp/.
i.e. http://example.com/LoanFlow

b.	Endpoint Pattern: http://host:port/*
This identifies all HTTP Services at a specific url.
i.e. http://example.com/*

c.	Endpoint Pattern: http://host:port/webapp/*
This identifies all HTTP Services within a specific webapp.

2.	JMS Service: jms://host:port/factoryJndiName/destJndiName
i.e. jms://example.com:7115/quoteQCF/LoanFlowQueue

For WSDL 1.1. we suggest a mechanism similar to the WSDL 2.0 mechanism for generating URIs.
Essentially, a URI identifies the WSDL definitions and a fragment identifier identifies the particular definition.
The following sections specify in detail how the fragment identifier is constructed from the component model:

The PortType Component
wsdl.portType(portType)
portType is the local name of the {name} property of the PortType component.

2.	The PortType Operation Component
wsdl.portTypeOperation(portType/operation)
portType is the local name of the {name} property of the parent PortType component.
operation is the local name of the {name} property of the PortType Operation component.

3.	The PortType Operation Input/Output Message Component
wsdl.portTypeOperation[Input|Output](portType/operation)
portType is the local name of the {name} property of the grandparent PortType component.
operation is the local name of the {name} property of the parent PortType Operation component.

4.	The PortType Operation Fault Message Component
wsdl.portTypeOperationFault(portType/operation/fault)
portType is the local name of the {name} property of the grandparent PortType component.
operation is the local name of the {name} property of the parent PortType Operation component.
fault is the {name} property of the Operation Fault component.

5.	The Binding Component
wsdl.binding(binding)
binding is the local name of the {name} property of the Binding component.

6.	The Binding Operation Component
wsdl.bindingOperation(binding/operation)
binding is the local name of the {name} property of the parent Binding component.
operation is the {name} property of the PortType Operation component referred to by the {portType operation} property of the Binding Operation component.

7.	The Binding Operation Message Input/Output Component
wsdl.bindingOperation[Input|Output](binding/operation)
binding is the local name of the {name} property of the grandparent Binding component.
operation is the {name} property of the PortType Operation component referred to by the {portType operation} property of the parent Binding Operation component.

8.	The Binding Operation Fault Message Component
wsdl.bindingOperationFault(binding/operation/fault)
binding is the local name of the {name} property of the grandparent Binding component.
operation is the {name} property of the PortType Operation component referred to by the {portType operation} property of the parent Binding Operation component.
fault is the {name} property of the Operation Fault component.

9.	The Service Component
wsdl.service(service)
service is the local name of the {name} property of the Service component.

10.	The Endpoint Component
wsdl.endpoint(service/port)
service is the local name of the {name} property of the parent Service component.
port is the {name} property of the Port component.

11.	The Endpoint Operation Component
wsdl.endpointOperation(service/port)
service is the local name of the {name} property of the parent Service component.
port is the {name} property of the Port component.

12.	The Endpoint Input/Output Component
wsdl.endpointOperation[Input|Output](service/port)
service is the local name of the {name} property of the parent Service component.
port is the {name} property of the Port component.

13.	The Endpoint Fault Component
wsdl.endpointOperation[Fault](service/port)
service is the local name of the {name} property of the parent Service component.
port is the {name} property of the Port component.

14.	Extension Components
WSDL 1.1 is extensible and it is possible for an extension to define new components types. The scheme for extension components is:  wsdl.extension(namespace, identifier)
namespace is the namespace URI that identifies the extension, e.g. for the WSDL 1.1 SOAP 1.1 Binding the namespace is "http://schemas.xmlsoap.org/wsdl/soap/" and for SOAP 1.2 Binding "http://www.w3.org/2005/08/wsdl/soap".
identifier is defined by the extension using a syntax specific to the extension. The owner of the extension must define any components contributed by the extension and the syntax for identifying them.
Examples of WSDL 1.1 Resource Pattern URIs
Considering a WSDL definition "LoanFlow".  Its components have the following URI-references:

WS Endpoint:
http://samples.otn.com.LoanFlow#wsdl.endpoint(LoanFlowService/LoanFlowPort)

2.   WS Pattern:
http://samples.otn.com.*#wsdl.service(*)
Identifying the Service components, of all the WSDL based Services whose targetNamespace URI starts with "http://samples.otn.com".

3.   WS Service:
http://samples.otn.com.LoanFlow#wsdl.service(LoanFlowService) 

4.  WS Port Type:
http://samples.otn.com.LoanFlow#wsdl.portType(LoanFlowPortType)

5.  WS Abstract Operation:
http://samples.otn.com.LoanFlow#wsdl.portTypeOperation(LoanFlowPortType/initiate)

6.  WS Abstract Operation Input:
http://samples.otn.com.LoanFlow#wsdl.portTypeOperationInput(LoanFlowPortType/initiate)

7.  WS Binding:
http://samples.otn.com.LoanFlow#wsdl.binding(LoanFlowSoapBinding)

8.  WS Binding Operation:
http://samples.otn.com.LoanFlow#wsdl.bindingOperation(LoanFlowSoapBinding/initiate)

9.  WS Binding Operation Input:
http://samples.otn.com.LoanFlow#wsdl.bindingOperationInput(LoanFlowSoapBinding/initiate)



All the best, Ashok

Received on Wednesday, 12 July 2006 02:23:24 UTC