Exemplo: Publicando uma Mensagem do WS-Notification
Use esta tarefa para gravar o código de um aplicativo cliente publicador que pode publicar mensagens de notificação em um broker, com base na extração de código de exemplo fornecida.
Sobre Esta Tarefa
Esse exemplo é baseado no uso de APIs Java™ API for XML-based remote procedure calls (JAX-RPC) com código gerado usando a ferramenta WSDL2Java (executada com relação ao WSDL do Broker de Notificação gerado como resultado da criação do ponto de serviço WS-Notification) e as APIs e SPIs do WebSphere Application Server.
- JAX-WS
- Modelo de Programação de Cliente JAX-WS
- Implementando Clientes de Serviços da Web JAX-WS Estáticos
- Gravando Aplicativos JAX-WS para o WS-Notification
- Sugestões e Dicas para Serviços da Web: JAX-RPC versus JAX-WS, Parte 1
Para gravar o código de um aplicativo cliente publicador que pode publicar mensagens de notificação em um broker, conclua as etapas a seguir, consultando a extração do código de exemplo para obter informações adicionais.
Procedimento
- Procure o serviço JAX-RPC. O nome JNDI é específico de sua implementação do cliente de serviço da web.
- Obtenha um stub para a porta na qual deseja chamar operações.
- Crie o conteúdo de uma mensagem de notificação.
- Crie uma mensagem de notificação a partir do conteúdo.
- Inclua uma expressão de tópico na mensagem de notificação. A expressão de tópico deve indicar ao qual tópico, ou tópicos, a mensagem corresponde.
- Crie as informações opcionais.
- Opcional: Se o broker precisar de aplicativos cliente publicadores para o registro, associe a solicitação a um registro do publicador específico. O registrationEPR é o ConsumerReference EndpointReference retornado pelo broker em relação a uma chamada da operação RegisterPublisher.
- Chame a operação Notify, chamando o método associado no stub.
Exemplo
O código de exemplo a seguir representa um aplicativo cliente publicador que pode publicar mensagens de notificação em um broker:
// 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);
// Criar o conteúdo da mensagem para uma mensagem de notificação
SOAPElement messageContents = null;
javax.xml.soap.SOAPFactory soapFactory = javax.xml.soap.SOAPFactory.newInstance();
if (soapFactory instanceof IBMSOAPFactory) {
// Você pode utilizar os métodos de inclusão de valores fornecidos pela API IBMSOAPFactory para criar o SOAPElement
// a partir de uma cadeia XML.
String messageContentsXML = "<xyz:MyData xmlns:xyz=\"uri:mynamespace\">Some data</xyz:MyData>";
messageContents = ((IBMSOAPFactory) soapFactory).createElementFromXMLString(messageContentsXML);
} else {
// Construir o SOAPElement utilizando as APIs javax.xml.soap padrão
messageContents = soapFactory.createElement("MyData", "xyz", "uri:mynamespace");
messageContents.addTextNode("Some data");
}
// Criar uma mensagem de notificação a partir do conteúdo
NotificationMessage message = new NotificationMessage(messageContents);
// Incluir uma expressão de tópico na mensagem de notificação indicando a qual(is) tópico(s) a
// mensagem corresponde
Map prefixMappings = new HashMap();
prefixMappings.put("abc", "uri:example");
TopicExpression exp =
new TopicExpression(TopicExpression.SIMPLE_TOPIC_EXPRESSION, "abc:ExampleTopic", prefixMappings);
message.setTopic(exp);
// Criar informações opcionais
SOAPElement[] optionalInformation = new SOAPElement[] {};
/*
Optional
--------
A linha a seguir fará a associação do pedido a um registro do publicador específico.
Isto deve ser feito se o intermediário exigir o registro dos publicadores. O registrationEPR é o
ConsumerReference EndpointReference retornado pelo intermediário em relação a uma chamada da
operação RegisterPublisher.
((Stub) stub)._setProperty(WSAConstants.WSADDRESSING_DESTINATION_EPR, consumerReferenceEPR);
*/
// Chamar a operação Notify chamando o método associado no stub
stub.notify(new NotificationMessage[] { message }, optionalInformation);