Interface do SOAP with Attachments API for Java

A interface SOAP with Attachments API for Java™ (SAAJ) é usada para o sistema de mensagens SOAP que fornece uma maneira padrão de enviar documentos XML pela Internet a partir de um modelo de programação Java. A SAAJ é usada para manipular a mensagem SOAP para o contexto apropriado quando ela passa pelo ambiente de tempo de execução.

boas práticas: IBM® WebSphere Application Server suporta o modelo de programação Java API for XML-Based Web Services (JAX-WS) e o modelo de programação Java API for XML-based RPC (JAX-RPC). O JAX-WS é o modelo de programação de serviços da Web da próxima geração, estendendo a base fornecida pelo modelo de programação JAX-RPC. Ao usar o modelo de programação JAX-WS estratégico, o desenvolvimento de serviços da Web e clientes é simplificado por meio do suporte de um modelo de anotações baseado em padrões. Embora o modelo de programação JAX-RPC e seus aplicativos ainda sejam suportados, aproveite o modelo de programação JAX-WS de fácil implementação para desenvolver novos aplicativos de serviços da web e clientes.

O modelo de programação JAX-RPC (Java API for XML-Based RPC) suporta o SAAJ 1.2 para manipular a XML.

O modelo de programação JAX-WS suporta SAAJ 1.2 e 1.3. o SAAJ 1.3 inclui o suporte para mensagens SOAP 1.2.

As diferenças na especificação SAAJ 1.2 e SAAJ 1.3 podem ser revisadas no tópico "Diferenças nas Versões de SAAJ".

Como as mensagens são usadas nos serviços da web?

Os serviços da Web usam a tecnologia XML para trocar mensagens. Essas mensagens estão de acordo com o esquema XML. Ao desenvolver aplicativos de serviços da Web, há APIs XML limitadas com as quais trabalhar, por exemplo, Modelo de Objeto de Documento (DOM). É mais eficiente manipular os objetos Java e ter a serialização e a desserialização concluídas durante o tempo de execução.

Os serviços da Web utilizam as mensagens SOAP para representar as chamadas de procedimento remoto entre o cliente e o servidor. Geralmente, a mensagem SOAP é desserializada em uma série de objetos de negócio de tipo de valorJava que representa os parâmetros e os valores de retorno. Além disso, o modelo de programação Java fornece APIs que suportam aplicativos e manipuladores para manipular a mensagem SOAP diretamente. Como há um número limitado de tipos de esquema XML suportados pelos modelos de programação, a especificação fornece o modelo de dados SAAJ como uma extensão para manipular a mensagem.

Para manipular os tipos de esquema XML, é necessário mapear os tipos de esquema XML para os tipos Java com um componente de ligação de dados customizados.

A interface de SAAJ

As classes relacionadas a SAAJ estão localizadas no pacote javax.xml.soap. A SAAJ cria as interfaces e classes abstratas e muitas das classes iniciam chamando os métodos factory para criar um factory como SOAPConnectionFactory e SOAPFactory.

Evitar Problemas Evitar Problemas: Se a segurança Java estiver ativada e não forem concedidas permissões para leitura do arquivo jaxm.properties, quando uma instância SOAPFactory for criada por meio de uma chamada para javax.xml.soap.SOAPFactory.newInstance(), ou uma instância MessageFactory for criada por meio de uma chamada para MessageFactory.newInstance(), uma exceção SecurityException ocorrerá e a seguinte exceção será gravada no log do sistema:
Permissão:

      /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties : access denied 
(java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties
read)

Código:

     com.ibm.ws.wsfvt.test.binding.addr1.binder.AddressBinder  
in  {file:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/
ahp6405Node01Cell/DataBinding.ear/address1.war/WEB-INF/lib
/addressbinder1.jar}

Rastreio de Pilha:

java.security.AccessControlException: acesso negado (java.io.FilePermission
/opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read)
.

O SOAPFactory ignora a exceção e continua com os próximos meios de determinar qual implementação carregar. Portanto, você pode ignorar a entrada de log para esta exceção de segurança.

Como esse produto usa o SOAPFactory para suportar outras tecnologias de serviços da Web, como WS-Addressing (WS-A), WS-Atomic Transaction (WS-AT) e WS-Notification, é possível ignorar essa SecurityException em qualquer aplicativo de serviços da Web em que a segurança Java esteja ativada.

gotcha
As classes mais usadas normalmente são:
  • SOAPMessage: Contém a mensagem, as partes XML e não-XML
  • SOAPHeader: Representa o elemento XML do cabeçalho SOAP
  • SOAPBody: Representa o elemento XML do corpo SOAP
  • SOAPElement: Representa os outros elementos na mensagem SOAP
Outras partes da interface SAAJ incluem:
  • MessageContext: Contém uma mensagem SOAP e propriedades relacionadas
  • AttachmentPart: Representa um anexo binário
  • SOAPPart: Representa a parte XML da mensagem
  • SOAPEnvelope: Representa o elemento XML do envelope SOAP
  • SOAPFault: Representa o elemento XML com falha do SOAP

A interface primária no modelo SAAJ é javax.xml.soap.SOAPElement, também chamada de SOAPElement. Utilizando esse modelo, os aplicativos podem processar um modelo SAAJ que utiliza código DOM pré-existente. Também é mais fácil converter objetos DOM pré-existentes em objetos SAAJ.

Mensagens criadas usando a interface SAAJ seguem os padrões SOAP. Uma mensagem SOAP é representada no modelo SAAJ como um objeto javax.xml.soap.SOAPMessage. O conteúdo XML da mensagem é representado por um objeto javax.xml.soap.SOAPPart. Cada parte de SOAP possui um envelope SOAP. Esse envelope é representado pelo objeto javax.xml.SOAPEnvelope de SAAJ. A especificação de SOAP define vários elementos que residem no envelope SOAP; SAAJ define objetos para vários elementos no envelope SOAP.

A mensagem SOAP também pode conter dados não-XML, chamados de anexos. Esses anexos são representados pelos objetos AttachmentPart do SAAJ, acessíveis do objeto SOAPMessage.

Há várias razões por que as rotinas de tratamento e os aplicativos utilizam a API SOAPElement genérica, em vez de um mapeamento estritamente ligado:
  • O serviço da Web pode ser um conduíte para outro serviço da Web. Nesse caso, a mensagem SOAP é apenas redirecionada.
  • O serviço da Web pode manipular a mensagem usando um modelo de dados diferente, por exemplo, um Objeto de Dados de Serviço (SDO). É mais fácil converter a mensagem de uma SSAJ DOM em um modelo de dados diferente.
  • Uma rotina de tratamento, por exemplo, uma rotina de tratamento de validação de assinatura digital, pode querer manipular a mensagem de forma genérica.

Pode ser necessário avançar uma etapa para mapear os tipos de esquemas XML, porque a interface SOAPElement nem sempre é a melhor alternativa para sistemas legados. Neste caso, talvez você queira usar o modelo de programação genérico, como SDO, que é mais apropriado para aplicativos centrados em dados.

O esquema XML pode ser configurado para incluir uma ligação de dados customizados que una o SDO ou o objeto de dados ao objeto Java. Por exemplo, o tempo de execução renderiza uma mensagem SOAP de entrada para uma interface SOAPElement e a transmite ao binder de dados do cliente para processamento adicional. Se a mensagem que chegar contiver um SDO, o tempo de execução reconhecerá o código de objeto de dados, consultará seu mapeamento de tipo para localizar um binder customizado e construirá a interface SOAPElement que representa o código SDO. O SOAPElement é transmitido ao SDOCustomBinder.

Consulte informações sobre componentes de ligação de dados customizados para saber mais sobre o processo de desenvolvimento de aplicativos com SOAPElement, SDO e componentes de ligação customizados.

Para Usuários de Transição Para Usuários de Transição: Iniciando em WebSphere Application Server Versão 8, os métodos SOAPMessage.getSOAPHeader e getSOAPBody emite um SOAPException, se não houver elemento correspondente na mensagem. Uma propriedade de sistema, com.ibm.websphere.webservices.soap.IBMSOAPMessage.ENABLE_LEGACY_GETSOAP_BEHAVIOR, é fornecida para reverter o comportamento para retornar nulo em vez de emitir uma exceção. Esta propriedade de sistema é configurada usando uma propriedade customizada JVM, com.ibm.websphere.webservices.soap.enable.legacy.get.behavior. O valor padrão para esta propriedade customizada JVM é false. Configurar essa propriedade JVM para true reverterá para o comportamento anterior, que deve retornar um nulo para os métodos SOAPMessage.getSOAPHeader e getSOAPBody em que não há mensagem correspondente.

O comportamento anterior de retornar um nulo não é compatível com a especificação.

trns

Para obter uma lista completa de padrões e especificações suportados, consulte as especificações de serviços da Web e a documentação da API.


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



Í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=cwbs_saaj
Nome do arquivo: cwbs_saaj.html