Beispiel: Eine WS-Notification-Nachricht veröffentlichen
Verwenden Sie diese Task, um auf der Basis des folgenden Beispielcodeauszugs den Code für eine Publisher-Client-Anwendung zu schreiben, die eine Benachrichtigung in einem Broker veröffentlichen kann.
Informationen zu diesem Vorgang
Dieses Beispiel basiert auf der Verwendung der JAX-RPC-APIs (Java™ API for XML-based Remote Procedure Call) zusammen mit Code, der mit Tool WSDL2Java (auf der Basis der beim Erstellen des WS-Notification-Servicepunkts generierten NotificationBroker-WSDL) generiert wird, und den APIs und SPIs von WebSphere Application Server.
- JAX-WS
- JAX-WS-Clientprogrammiermodell
- Statische JAX-WS-Web-Service-Clients implementieren
- Writing JAX-WS applications for WS-Notification
- Web services hints and tips: JAX-RPC versus JAX-WS, Part 1
Verwenden Sie zum Schreiben des Codes für eine Publisher-Client-Anwendung, die eine Benachrichtigung in einem Broker veröffentlichen kann, den folgenden Beispielcodeauszug, um weitere Informationen zu erhalten.
Vorgehensweise
- Ermitteln Sie den JAX-RPC-Service. Der JNDI-Name ist spezifisch für Ihre Web-Service-Clientimplementierung.
- Rufen Sie einen Stub für den Port ab, an dem Operationen gestartet werden sollen.
- Erstellen Sie den Nachrichteninhalt für eine Benachrichtigung.
- Erstellen Sie eine Benachrichtigung aus dem Inhalt.
- Fügen Sie der Benachrichtigung einen Topicausdruck hinzu. Der Topicausdruck muss angeben, welchen Topics die Nachricht entspricht.
- Erstellen Sie weitere optionale Informationen.
- Optional: Wenn der Broker erfordert, dass sich die Publisher-Client-Anwendungen registrieren, ordnen Sie die Anforderung einer bestimmten Publisher-Registrierung zu. Die registrationEPR ist die ConsumerReference EndpointReference (Konsumentenreferenz-Endpunktreferenz), die der Broker beim Aufruf der Operation RegisterPublisher zurückgibt.
- Rufen Sie die Operation "Notify" durch Aufruf der zugehörigen Methode im Stub auf.
Beispiel
Der folgende Beispielcode stellt eine Publisher-Client-Anwendung dar, die eine Benachrichtigung in einem Broker veröffentlichen kann:
// JAX-RPC-Service suchen. Der JNDI-Name ist spezifisch für Ihre Web-Service-Clientimplementierung.
InitialContext context = new InitialContext();
javax.xml.rpc.Service service = (javax.xml.rpc.Service) context.lookup(
"java:comp/env/services/NotificationBroker");
// Ein Stub für den Port abrufen, auf dem Operationen gestartet werden sollen.
NotificationBroker stub = (NotificationBroker) service.getPort(NotificationBroker.class);
// Den Nachrichteninhalt für eine Benachrichtigung erstellen.
SOAPElement messageContents = null;
javax.xml.soap.SOAPFactory soapFactory = javax.xml.soap.SOAPFactory.newInstance();
if (soapFactory instanceof IBMSOAPFactory) {
// Sie können die von der API "IBMSOAPFactory" bereitgestellten Methoden zum Hinzufügen von Werten
// verwenden, um das SOAPElement aus einer XML-Zeichenfolge zu erstellen.
String messageContentsXML = "<xyz:MyData xmlns:xyz=\"uri:mynamespace\">Some data</xyz:MyData>";
messageContents = ((IBMSOAPFactory) soapFactory).createElementFromXMLString(messageContentsXML);
} else {
// Das SOAPElement mit den "javax.xml.soap"-Standard-APIs erstellen.
messageContents = soapFactory.createElement("MyData", "xyz", "uri:mynamespace");
messageContents.addTextNode("Some data");
}
// Eine Benachrichtigung aus dem Inhalt erstellen
NotificationMessage message = new NotificationMessage(messageContents);
// Einen Topicausdruck zur Benachrichtigung hinzufügen, der anzeigt,
// welchen Topics die Nachricht entspricht.
Map prefixMappings = new HashMap();
prefixMappings.put("abc", "uri:example");
TopicExpression exp =
new TopicExpression(TopicExpression.SIMPLE_TOPIC_EXPRESSION, "abc:ExampleTopic", prefixMappings);
message.setTopic(exp);
// Optionale Informationen erstellen.
SOAPElement[] optionalInformation = new SOAPElement[] {};
/*
Optional
--------
Die folgende Zeile bewirkt, dass der Anforderung eine bestimmte Publisher-Registrierung zugeordnet wird.
Dies ist erforderlich, falls der Broker eine Registrierung der Publisher fordert.
Die registrationEPR ist die
ConsumerReference EndpointReference (Konsumentenreferenz-Endpunktreferenz), die der Broker
beim Aufruf der Operation RegisterPublisher zurückgibt.
((Stub) stub)._setProperty(WSAConstants.WSADDRESSING_DESTINATION_EPR, consumerReferenceEPR);
*/
// Die Operation Notify durch Aufruf der zugehörigen Methode im Stub starten.
stub.notify(new NotificationMessage[] { message }, optionalInformation);