例: 通知コンシューマー Web サービス・スケルトンの作成
この例は、Web Services Base Notification 仕様で定義された NotificationConsumer portType を実装する Web サービスを作成する際に使用します。
このタスクについて
このタスクでは、以下の 2 つのコード例を示します。
- WSDL 文書例。Web Services Base Notification 仕様で定義された NotificationConsumer portType を実装する Web サービスを記述します。
- Service Endpoint Interface (SEI) の基本的な実装。WSDL2Java ツールを使用して、上記の WSDL 文書から生成されます。
注: Writing JAX-WS applications for WS-Notification という記事にも、コンシューマー Web サービスの例が記載されています。
手順
通知コンシューマー Web サービス・スケルトンを作成する場合は、以下のコード例を参照してください。
例
以下の WSDL 文書例では、Web Services Base Notification 仕様で定義された NotificationConsumer portType を実装する Web サービスを記述しています。
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsn-bw="http://docs.oasis-open.org/wsn/bw-2"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="uri:example.wsn/consumer"
targetNamespace="uri:example.wsn/consumer">
<wsdl:import namespace="http://docs.oasis-open.org/wsn/bw-2"
location="http://docs.oasis-open.org/wsn/bw-2.wsdl" />
<wsdl:binding name="NotificationConsumerBinding" type="wsn-bw:NotificationConsumer">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Notify">
<wsdlsoap:operation soapAction="" />
<wsdl:input>
<wsdlsoap:body use="literal" />
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="NotificationConsumerService">
<wsdl:port name="NotificationConsumerPort" binding="tns:NotificationConsumerBinding">
<wsdlsoap:address location="http://myserver.mycom.com:9080/Consumer" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
以下の例で、WSDL2Java ツールを使用して上記の WSDL 文書から生成される Service Endpoint Interface (SEI) の基本的な実装を示します。
public class ConsumerExample implements NotificationConsumer {
public void notify(NotificationMessage[] notificationMessage, SOAPElement[] any)
throws RemoteException {
// Process each NotificationMessage
for (int i=0; i<notificationMessage.length; i++) {
NotificationMessage message = notificationMessage[i];
// Get the contents of the message
SOAPElement messageContent = message.getMessageContents();
// Get the expression indicating which topic the message is associated with
TopicExpression topic = message.getTopic();
// Get a reference to the producer (this value is optional and so might be null)
EndpointReference producerRef = message.getProducerReference();
// Get a reference to the subscription (this value is optional and so might be null)
EndpointReference subscriptionRef = message.getSubscriptionReference();
// User defined processing ...
}
}
}