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.
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.

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- 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
- 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.
- 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.

O comportamento anterior de retornar um nulo não é compatível com a especificação.
trnsPara 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.