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.

No WebSphere Application Server existem duas implementações do serviço WS-Notification: Versão 6.1 e Versão 7.0. Este exemplo de JAX-RPC pode interagir com êxito com os pontos de serviço do WS-Notification Versão 6.1 ou Versão 7.0. No entanto, se quiser usar WS-Notification com conjuntos de políticas, por exemplo, para ativar a composição com WS-ReliableMessaging, seus aplicativos WS-Notification deverão ser codificados para usar o modelo de programação Java API for XML-based Web Services (JAX-WS) e deverão interagir com os pontos de serviço WS-Notification Versão 7.0. Se você for iniciante na programação de aplicativos clientes JAX-WS, consulte os seguintes tópicos: O artigo Gravando Aplicativos JAX-WS para WS-Notification inclui um exemplo de um aplicativo cliente publicador do JAX-WS.

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

  1. Procure o serviço JAX-RPC. O nome JNDI é específico de sua implementação do cliente de serviço da web.
  2. Obtenha um stub para a porta na qual deseja chamar operações.
  3. Crie o conteúdo de uma mensagem de notificação.
  4. Crie uma mensagem de notificação a partir do conteúdo.
  5. 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.
  6. Crie as informações opcionais.
  7. 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.
  8. 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);

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjwsn_ex_pub
Nome do arquivo: tjwsn_ex_pub.html