Filtering the message content of publications
Rather than receiving all messages on a topic to which we have subscribed, the consuming application can use XML Path (XPath) selectors to filter the messages based upon the contents of each message. This content-based subscription gives you greater flexibility in defining the type of information to receive, and the applications do not need to handle their own filtering. Performance is improved because messages that are not relevant are not sent unnecessarily from the server to the application.
The WS-Notification publish and subscribe messaging model is topic-based. Each publication is classified as belonging to one of a fixed set of topics. Publishers label each publication with a topic name and consumers subscribe to all publications on a particular topic. For example a stock trading notification system might define a topic for each issue: Publishers post information labeled with the appropriate issue as the topic name, and subscribers subscribe to information regarding some issue.
We can use XPath selectors to filter messages for a given topic, by using a Boolean expression that is evaluated over the XML message content of the message body. For example, a subscriber to a topic-based publish and subscribe system for stock trading might use XPath selectors to specify constraints against three message attributes at the same time:
- issue name
- price
- volume of shares
The resultant Boolean statement might be as follows:
(issue="IBM") and (price<120) and (volume>1000)
You code the XPath 1.0 message content filters in the subscribing applications, by using XML Path (XPath) language, Version 1.0..
If the subscriber applications use message content filtering, and are coded to specify the XPath Version 1.0 SelectorDomain, they can also filter publications from other WS-Notification providers that are of type JMS TextMessage or BytesMessage. For more information about these JMS message types, see Topology for WS-Notification as an entry or exit point to the service integration bus.
To filter the message content of publications by using XPath selectors...
- Create a new application that subscribes a WS-Notification consumer.
- Code an XPath message content filter in the subscribing application. For example code for doing this, see Example: Subscribing a WS-Notification consumer. For an example of message content filter usage, see the example at the end of this task.
- Code error handling for cases where the filter is not valid.
- Invoke the application.
Example
This example XML code illustrates message content filtering by using XPath selectors. In this example a business, represented by a NotificationConsumer application, wants to be notified of bank transfers of over $1,000,000. The monitoring application subscribes on behalf of the NotificationConsumer specifying a valid XPath Version 1.0 message content filter, in the following WS-Notification subscribe message:
<wsnt:Subscribe> <wsnt:ConsumerReference> wsa:EndpointReference </wsnt:ConsumerReference> <wsnt:Filter> [ <wsnt:TopicExpression Dialect="xsd:anyURI"> {any} ? </wsnt:TopicExpression> | <wsnt:ProducerProperties Dialect="xsd:anyURI"> {any} ? </wsnt:ProducerProperties> | <wsnt:MessageContent Dialect="xsd:anyURI"> /bankTransfer[value %gt; 1,000,000] </wsnt:MessageContent> | {any} * ] * </wsnt:Filter> ? <wsnt:InitialTerminationTime> [xsd:dateTime | xsd:duration] </wsnt:InitialTerminationTime> ? <wsnt:SubscriptionPolicy> [ <wsnt:UseRaw/> | {any} ] * </wsnt:SubscriptionPolicy> ? {any}* </wsnt:Subscribe>The WS-Notification service stores the subscription and its filter.
Another WS-Notification application then publishes a notification in which the message body contains the following information:
<bankTransfer origin="123456 87654321" target="224466 88664422"> <originName>IBM Corporation</originName> <targetName>Matt Roberts</targetName> <date>02/02/2006</date> <value currency="USD">100,000,000</value> </bankTransfer>The WS-Notification service in the application server matches this publication to the earlier subscription and delivers the notification to the consumer specified in the subscription.
Related concepts
WS-Notification WS-Notification: Overview WS-Notification: Supported bindings
Related tasks
Writing a WS-Notification application that exposes a web service endpoint Writing a WS-Notification application that does not expose a web service endpoint Example: Subscribing a WS-Notification consumer Example: Pausing a WS-Notification subscription Example: Publishing a WS-Notification message Example: Create a WS-Notification pull point Example: Getting messages from a WS-Notification pull point Example: Registering a WS-Notification publisher Example: Create a Notification consumer web service skeleton Use WS-Notification for publish and subscribe messaging for web services Secure WS-Notification Develop applications that use WS-Notification
WS-Notification troubleshooting tips WS-BaseNotification Version 1.3 OASIS Standard XML Path Language (XPath) Version 1.0 XQuery 1.0 and XPath 2.0 Formal Semantics