Exemple : publication d'un message WS-Notification
Utilisez cette tâche pour écrire le code requis par une application client de diffuseur de publications permettant de publier un message de notification à un courtier, sur la base du code fourni à titre d'exemple.
Pourquoi et quand exécuter cette tâche
Cet exemple repose sur l'utilisation des API JAX-RPC (Java™ API for XML-based remote procedure calls) avec le code généré en utilisant l'outil WSDL2Java (exécuté sur le WSDL Notification Broker généré par la création du point de service WS-Notification) et les API et SPI WebSphere Application Server.
- JAX-WS
- Modèle de programmation client JAX-WS
- Implémentation de clients de services Web JAX-WS statiques
- Ecriture d'applications JAX-WS pour WS-Notification
- Astuces et conseils sur les services Web : JAX-RPC versus JAX-WS, Partie 1
Pour écrire le code requis par une application client de diffuseur de publications permettant de publier un message de notification à un courtier, exécutez les étapes ci-après en vous reportant au code fourni à titre d'exemple pour plus d'informations.
Procédure
- Recherchez le service JAX-RPC. Le nom JNDI est spécifique de l'implémentation du client des services Web.
- Obtenez un module de remplacement pour le port sur lequel vous souhaitez appeler des opérations.
- Créez le contenu de message pour un message de notification.
- Créez un message de notification à partir du contenu.
- Ajoutez une expression de rubrique au message de notification. L'expression de rubrique doit indiquer la ou les rubriques auxquelles le message correspond.
- Créez des informations facultatives.
- Facultatif : Si le courtier nécessite l'enregistrement d'applications client de diffuseur de publications, associez la demande à un enregistrement de diffuseur de publications spécifique. L'élément registrationEPR est la référence de noeud final ConsumerReference renvoyée par le courtier suite à un appel de l'opération RegisterPublisher.
- Appelez l'opération de notification en appelant la méthode associée sur le module de remplacement.
Exemple
L'exemple suivant décrit une application client de diffuseur de publications qui permet de publier un message de notification à un courtier :
// Look up the JAX-RPC service. The JNDI name is specific to your web services client implementation
InitialContext context = new InitialContext();
javax.xml.rpc.Service service = (javax.xml.rpc.Service) context.lookup(
"java:comp/env/services/NotificationBroker");
// Get a stub for the port on which you want to invoke operations
NotificationBroker stub = (NotificationBroker) service.getPort(NotificationBroker.class);
// Create the message contents for a notification message
SOAPElement messageContents = null;
javax.xml.soap.SOAPFactory soapFactory = javax.xml.soap.SOAPFactory.newInstance();
if (soapFactory instanceof IBMSOAPFactory) {
// You can use the value add methods provided by the IBMSOAPFactory API to create the SOAPElement
// from an XML string.
String messageContentsXML = "<xyz:MyData xmlns:xyz=\"uri:mynamespace\">Some data</xyz:MyData>";
messageContents = ((IBMSOAPFactory) soapFactory).createElementFromXMLString(messageContentsXML);
} else {
// Build up the SOAPElement using the standard javax.xml.soap APIs
messageContents = soapFactory.createElement("MyData", "xyz", "uri:mynamespace");
messageContents.addTextNode("Some data");
}
// Create a notification message from the contents
NotificationMessage message = new NotificationMessage(messageContents);
// Add a topic expression to the notification message indicating to which topic or topics the
// message corresponds
Map prefixMappings = new HashMap();
prefixMappings.put("abc", "uri:example");
TopicExpression exp =
new TopicExpression(TopicExpression.SIMPLE_TOPIC_EXPRESSION, "abc:ExampleTopic", prefixMappings);
message.setTopic(exp);
// Create any optional information
SOAPElement[] optionalInformation = new SOAPElement[] {};
/*
Optional
--------
The following line will cause the request to be associated with a particular publisher registration.
You must do this if the broker requires publishers to register. The registrationEPR is the
ConsumerReference EndpointReference returned by the broker in relation to an invocation of the
RegisterPublisher operation.
((Stub) stub)._setProperty(WSAConstants.WSADDRESSING_DESTINATION_EPR, consumerReferenceEPR);
*/
// Invoke the Notify operation by calling the associated method on the stub
stub.notify(new NotificationMessage[] { message }, optionalInformation);