High level proposal:

Use a policy assertion to indicate that an endpoint service supports WS-Eventing.

Use nested policy assertions to indicate whichat features of WS-Eventing are supported.

Split the WS-Eventing WSDL to support the various role or options

Define the nNotifications as in-only operations in a WSDL that must be supported by the Event Sinksuch that they are to be included in the Event Sink's WSDL and which is referenced by the policy assertion.

The WSDL for WS-Eventing becomes:

<wsdl:definitions

targetNamespace="http://www.w3c.org/.../eventing"

xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"

xmlns:wse="http://www.w3c.org/.../eventing"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

xmlns:xs="http://www.w3.org/2001/XMLSchema" >

<wsdl:types>

<xs:schema>

<xs:import

namespace="http://www.w3c.org/.../eventing"

schemaLocation="http://www.w3c.org/.../eventing/eventing.xsd" />

</xs:schema>

</wsdl:types>

<wsdl:message name="SubscribeMsg" >

<wsdl:part name="body" element="wse:Subscribe" />

</wsdl:message>

<wsdl:message name="SubscribeResponseMsg" >

<wsdl:part name="body" element="wse:SubscribeResponse" />

</wsdl:message>

<wsdl:message name="RenewMsg" >

<wsdl:part name="body" element="wse:Renew" />

</wsdl:message>

<wsdl:message name="RenewResponseMsg" >

<wsdl:part name="body" element="wse:RenewResponse" />

</wsdl:message>

<wsdl:message name="GetStatusMsg" >

<wsdl:part name="body" element="wse:GetStatus" />

</wsdl:message>

<wsdl:message name="GetStatusResponseMsg" >

<wsdl:part name="body" element="wse:GetStatusResponse" />

</wsdl:message>

<wsdl:message name="UnsubscribeMsg" >

<wsdl:part name="body" element="wse:Unsubscribe" />

</wsdl:message>

<wsdl:message name="UnsubscribeResponseMsg" />

<wsdl:message name="SubscriptionEnd" >

<wsdl:part name="body" element="wse:SubscriptionEnd" />

</wsdl:message>

<wsdl:portType name="EventSource" >

<wsdl:operation name="SubscribeOp" >

<wsdl:input

message="wse:SubscribeMsg"

wsam:Action="http://www.w3c.org/.../eventing/Subscribe"/>

<wsdl:output

message="wse:SubscribeResponseMsg"

wsam:Action="http://www.w3c.org/.../eventing/SubscribeResponse"/>

</wsdl:operation>

</wsdl:portType>

<wsdl:portType name="SubscriptionManager" >

<wsdl:operation name="RenewOp" >

<wsdl:input

message="wse:RenewMsg"

wsam:Action="http://www.w3c.org/.../eventing/Renew"/>

<wsdl:output

message="wse:RenewResponseMsg"

wsam:Action="http://www.w3c.org/.../eventing/RenewResponse"/>

</wsdl:operation>

<wsdl:operation name="GetStatusOp" >

<wsdl:input

message="wse:GetStatusMsg"

wsam:Action="http://www.w3c.org/.../eventing/GetStatus"/>

<wsdl:output

message="wse:GetStatusResponseMsg"

wsam:Action="http://www.w3c.org/.../eventing/GetStatusResponse"/>

</wsdl:operation>

<wsdl:operation name="UnsubscribeOp" >

<wsdl:input

message="wse:UnsubscribeMsg"

wsam:Action="http://www.w3c.org/.../eventing/Unsubscribe"/>

<wsdl:output

message="wse:UnsubscribeResponseMsg"

wsam:Action="http://www.w3c.org/.../eventing/UnsubscribeResponse"/>

</wsdl:operation>

</wsdl:portType>

<wsdl:portType name="EndToPort">

<!-- This portType will be supported by the endpoint to which the

SubscriptionEnd message (ie. the EndTo EPR) is sent -->

<wsdl:input

Message="wse:SubscriptionEnd"

wsam:Action="http://www.w3c.org/.../eventing/SubscriptionEnd"/>

</wsdl:portType>

<wsdl:binding name="EventSourceBinding" type="tns:EventSource">

<soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="SubscribeOp">

<soap:operation soapAction="" style="document"/>

<wsdl:input<soap:body use="literal"/</wsdl:input>

<wsdl:output<soap:body use="literal"/</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:binding name="SubscriptionMgrBinding" type="tns:SubscriptionManager">

<soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="RenewOp">

<soap:operation soapAction="" style="document"/>

<wsdl:input<soap:body use="literal"/</wsdl:input>

<wsdl:output<soap:body use="literal"/</wsdl:output>

</wsdl:operation>

<wsdl:operation name="GetStatusOp">

<soap:operation soapAction="" style="document"/>

<wsdl:input<soap:body use="literal"/</wsdl:input>

<wsdl:output<soap:body use="literal"/</wsdl:output>

</wsdl:operation>

<wsdl:operation name="UnsubscribeOp">

<soap:operation soapAction="" style="document"/>

<wsdl:input<soap:body use="literal"/</wsdl:input>

<wsdl:output<soap:body use="literal"/</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:binding name="EndToBinding" type="tns:EndToPort">

<soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="SubscriptonEnd">

<soap:operation soapAction="" style="document"/>

<wsdl:input<soap:body use="literal"/</wsdl:input>

</wsdl:operation>

</wsdl:binding>

</wsdl:definitions>

The WS-Eventing Policy assertion would be defined as follows. Note the use of “application defined” namespaces for some the nested policy assertion elements. These are used to enable WS-Policy’s intersection algorithm, which is based on QName matching (and does not factor in element values), to correctly determine if an Event Source supports the desired filter dialect and delivery mode.:

<wsep:WSEventing [wsp:Optional="true"]? ...>

<wsp:Policy>

<wsepx:EventSinkWSDL xmlns:x="xs:anyURI" [binding="xs:QName"]?

wsp:Ignorable="true"/

xs:anyURI

</wsep:EventSinkWSDL> ?

<xx::FilterDialect xmlns:x="xs:anyURI" wsp:Optional="true"/> *

<xx:DeliveryMode xmlns:x="xs:anyURI" [wsp:Optional="true"]?/> *

</wsp:Policy>

</wsep:WSEventing>

/wsep:WSEventing

A policy assertion that specifies that WS-Eventing protocol MUST be used when communicating with this endpoint. This assertion has Endpoint Policy Subject.

/wsep:WSEventing/wsp:Optional

Per WS-Policy, this is compact notation for two policy alternatives, one with and one without the assertion. The intuition is that the behavior indicated by the assertion is optional, or in this case, that WS-Eventing MAY be used.

/wsep:WSEventtning/wsp:Policy

This required element allows for the inclusion of nested policy assertions.

/wsep:WSEventing/wsp:Policy/wsepx:EventSinkWSDL

When present, this assertion defines the requirement that the Event Sink MUST support the operations defined by the WSDL referenced by the namespace URI of this element. Note: the namespace of this element is application defined, but the Local Name MUST be "EventSinkWSDL". Doing an HTTP GET to this URI SHOULD return the WSDL. It is RECOMMENDED that the Event Source also support retrieval of this WSDL through a Metadata Exchange GetMetadata operation - see below.

/wsep:WSEventing/wsp:Policy/wsepx:EventSinkWSDL@binding

When present, this attribute defines the binding within the specified WSDL document to use. If there is only one binding within the event sink WSDL then this attribute MAY be omitted.

/wsep:WSEventing/wsp:Policy/wsep:EventSinkWSDL@wsp:Ignoreable

When present, this attribute specifies that the assertion is ignorable per WS-Policy.

/wsep:WSEventing/wsp:Policy/xx:FilterDialect

When present, this assertion defines the requirement that the Subscriber, if it chooses to include a filter in the wse:Subscribe request, MUST use the filter dialect associated with the namespace URI of this element when Subscribing to this Event Source. Note: the namespace of this element is application defined, but the Local Name MUST be "FilterDialect". Note: the namespace of this element is application defined, but the Local Name MUST be "FilterDialect".

/wsep:WSEventing/wsp:Policy/xwse:FilerDialect@wsp:Optional

This attribute specifies that the assertion is optional per WS-Policy. This attribute MUST be present since the inclusion of a Filter dialect in a Subscribe request is optional.

/wsep:WSEventing/wsp:Policy/xwsep:DeliveryMode

When present, this assertion defines the requirement that the Subscriber MUST use the delivery mode associated with the namespace URI of this element when Subscribing to this Event Source. Note: the namespace of this element is application defined, but the Local Name MUST be "DeliveryMode".Note: the namespace of this element is application defined, but the Local Name MUST be "DeliveryMode".

/wsep:WSEventing/wsp:Policy/xwse: DeliveryMode @wsp:Optional

When present, this attribute specifies that the assertion is optional per WS-Policy. Note, in practice if there is just one Delivery Mode specified then it would not be marked as optional. Likewise, if the Event Source supports more than one Delivery Mode then all of them would be marked as optional - although exactly one will be used in the Subscribe request.

If an Event Source supports the use of WS-MetadataExchange to retrieve the Event Sink WSDL, the following Metadata Dialect URI MUST be used to identify that metadata/WSDL:

http://www.w3c.org/.../eventing/EventSinkWSDL

For example:

<wsp:WSEventing>

<wsp:Policy>

<wsepx:EventSinkWSDL xmlns:x="http://../SinkWSDL" wsp:Ignorable="true"/

http://webservice.bea.com/WeatherConsole/soap12Notify?WSDL

</wsep:EventSinkWSDL>

<xx:FilterDialect xmlns:x=http://www.w3c.org/.../eventing/XPath

wsp:Optional="true"/

xmlns:x="http://www.w3c.org/.../eventing/XPath"

wsp:Optional="true"/

<xx:DeliveryMode x xmlns:x="http://www.w3c.org/.../eventing/Push"/>

</wsp:Policy>

</wsep:WSEventing>

The above example defines:

·  The WSDL that the Event Sink needs to support can be retrieved at http://webservice.bea.com/WeatherConsole/soap12Notify?WSD.../SinkWSDL. The lack of a “binding” attribute means that this WSDL MUST define only one binding.

·  The Event Source supports the XPath filer dialect but since specifying a Filter Dialect is optional, this policy assertion is optional.

·  The Event Source only supports the Push delivery mode - thus is it is not optional.

And tAn abbreviated version of what the he WSDL that is referenced by the EventSinkWSDL element (http://.../soap12Notify?SinkWSDL) might look like is:

<wsdl:definitions

targetNamespace="http://.../weather"

xmlns:wsa="http://www.w3.org/2005/08/addressing"

xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

xmlns:xs="http://www.w3.org/2001/XMLSchema" >

<wsdl:message name="foo:WeatherReport">

<wsdl:part name="body" element="foofoo:WeatherReport" />

</wsdl:message>

<wsdl:portType name=”WeatherNotifyInterface”

<wsdl:operation name="WeatherReport"

<wsdl:input message="tnsfoo:WeatherReport"

wsam:Action="http://.../weather/Report"/>

</wsdl:operation>

</wsdl:portType>

</wsdl:definitions>

<wsdl:binding name=”WeatherNotifySOAP12Binding”

type=”tns:WeatherNotifyInterface”

<soap:binding style="document"

transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name=”WeatherReport”>

<soap:operation/>

<wsdl:input>

<soap:body use=”literal”/>

</wsdl:input>

</wsdl:operation>

</wsdl:binding>

</wsdl:definitions>