Interfaz SAAJ (SOAP with Attachments API for Java)

La interfaz SAAJ (SOAP with Attachments API for Java™) se utiliza para la mensajería SOAP que proporciona un modo estándar de enviar documentos XML a través de Internet desde un modelo de programación Java. SAAJ se utiliza para manipular el mensaje SOAP al contexto adecuado mientras atraviesa el entorno de ejecución.

procedimientos recomendados: IBM® WebSphere Application Server soporta el modelo de programación JAX-WS (Java API for XML-Based Web Services) y el modelo de programación JAX-RPC (Java API for XML-based RPC). JAX-WS es la siguiente generación del modelo de programación de servicios que amplía la base proporcionada por el modelo de programación JAX-RPC. Con el modelo de programación JAX-WS estratégico, se simplifica el desarrollo de clientes y servicios web ya que se da soporte a un modelo de anotación basado en estándares. Aunque el modelo de programación JAX-RPC y las aplicaciones siguen recibiendo soporte, puede beneficiarse de la facilidad de implementación del modelo de programación JAX-WS para desarrollar nuevas aplicaciones y clientes de servicios web.

El modelo de programación JAX-RPC (API Java para RPC basadas en XML) da soporte a SAAJ 1.2 para manipular XML.

El modelo de programación JAX-WS da soporte a SAAJ 1.2 y 1.3. SAAJ 1.3 incluye soporte para mensajes SOAP 1.2.

Las diferencias en la especificación SAAJ 1.2 y SAAJ 1.3 pueden consultarse en el tema "Diferencias en versiones de SAAJ.".

¿Cómo se utilizan los mensajes en los servicios web?

Los servicios web utilizan tecnología XML para intercambiar mensajes. Estos mensajes cumplen el esquema XML. Cuando se desarrollan aplicaciones de servicios web, existe un número limitado de API XML con las que trabajar, por ejemplo, Document Object Model (DOM). Resulta más eficaz manipular los objetos Java y completar la serialización y deserialización durante el tiempo de ejecución.

Los servicios web utilizan mensajes SOAP para representar llamadas de procedimiento remoto entre el cliente y el servidor. Normalmente, el mensaje SOAP se deserializa en una serie de objetos de empresa de tipo de valor Java que representan los parámetros y los valores de retorno. Asimismo, el modelo de programación Java proporciona API para que las aplicaciones y los manejadores puedan manipular directamente el mensaje SOAP. Como existe un número limitado de tipos de esquema XML soportados por los modelos de programación, la especificación proporciona el modelo de datos SAAJ en forma de extensión para manipular el mensaje.

Para manipular los tipos de esquema XML, es necesario que correlacione los tipos de esquema XML con los tipos Java mediante un enlazador de datos personalizados.

La interfaz SAAJ

Las clases relacionadas con SAAJ se encuentran en el paquete javax.xml.soap. SAAJ se basa en las interfaces y las clases abstractas, y muchas de las clases se inician invocando métodos de fábrica para crear una fábrica como, por ejemplo, SOAPConnectionFactory y SOAPFactory.

Avoid trouble Avoid trouble: Si la seguridad de Java está habilitada y no se otorgan permisos para leer el archivo jaxm.properties, cuando se crea una instancia de SOAPFactory mediante una llamada a javax.xml.soap.SOAPFactory.newInstance() o se crea una instancia de MessageFactory mediante una llamada a MessageFactory.newInstance(), se produce una excepción SecurityException y se graba la excepción siguiente en el registro del sistema:
Permiso:

      /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}

Rastreo de pila:

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

SOAPFactory ignora la excepción y continúa hasta el siguiente medio de determinar qué implementación debe cargar. Por lo tanto, puede ignorar la entrada de registro para esta excepción de seguridad.

Puesto que este producto utiliza SOAPFactory para dar soporte a otras tecnologías de servicios web, como WS-Addressing (WS-A), WS-Atomic Transaction (WS-AT) y WS-Notification, puede omitir este SecurityException en cualquier aplicación de servicios web donde esté habilitada la seguridad Java.

gotcha
Las clases más utilizadas son:
  • SOAPMessage: contiene el mensaje, la parte XML y la no XML
  • SOAPHeader: representa el elemento XML de la cabecera SOAP
  • SOAPBody: representa el elemento XML del cuerpo SOAP
  • SOAPElement: representa los otros elementos del mensaje SOAP
Otras partes de la interfaz SAAJ son:
  • MessageContext: contiene un mensaje SOAP y propiedades relacionadas
  • AttachmentPart: representa un documento adjunto binario
  • SOAPPart: representa la parte XML del mensaje
  • SOAPEnvelope: representa el elemento XML del sobre SOAP
  • SOAPFault: representa el elemento XML del error SOAP

La interfaz principal en el modelo SAAJ es javax.xml.soap.SOAPElement, también denominada SOAPElement. Con este modelo, las aplicaciones pueden procesar un modelo SAAJ que utiliza código DOM preexistente. También es más fácil convertir objetos DOM preexistentes en objetos SAAJ.

Los mensajes creados con las interfaces SAAJ siguen los estándares SOAP. Un mensaje SOAP se representa en el modelo SAAJ como un objeto javax.xml.soap.SOAPMessage. El contenido XML del mensaje está representado por objeto javax.xml.soap.SOAPPart. Cada parte SOAP tiene un sobre SOAP. Este sobre está representado por el objeto javax.xml.SOAPEnvelope de SAAJ. La especificación SOAP define varios elementos que residen en el sobre SOAP; SAAJ define objetos para los distintos elementos del sobre SOAP.

El mensaje SOAP también puede contener datos no XML que se denominan anexos. Estos anexos están representados por objetos AttachmentPart de SAAJ a los que se puede acceder desde el objeto SOAPMessage.

Hay varias razones por las que los manejadores y las aplicaciones utilizan la API SOAPElement genérica en lugar de una correlación estrechamente enlazada:
  • El servicio web puede ser un conducto a otro servicio web. En este caso, sólo se envía el mensaje SOAP.
  • El servicio web puede manipular el mensaje utilizando otro modelo de datos, por ejemplo, un SDO (Service Data Object). Es más fácil convertir el mensaje de un DOM SAAJ a un modelo de datos diferente.
  • Un manejador, por ejemplo, un manejador de validación de firma digital, puede manipular el mensaje de forma genérica.

Es posible que necesite ir un paso más allá para correlacionar los tipos de esquema XML, ya que la interfaz SOAPElement no siempre es la mejor alternativa para los sistemas heredados. En este caso, es posible que desee utilizar un modelo de programación genérico como, por ejemplo, SDO, que es más apropiado para las aplicaciones centradas en los datos.

El esquema XML puede configurarse para que incluya un enlace de datos personalizado que empareje el SDO u objeto de datos con el objeto Java. Por ejemplo, el tiempo de ejecución representa un mensaje SOAP de entrada en una interfaz SOAPElement y lo pasa al enlazador de datos del cliente para continuar con el proceso. Si el mensaje de entrada contiene un SDO, el tiempo de ejecución reconoce el código del objeto de datos, realiza una consulta de la correlación de tipo para ubicar el localizador personalizado y crea la interfaz SOAPElement que representa el código de SDO. SOAPElement se pasa a SDOCustomBinder.

Consulte la información acerca de los enlazadores de datos personalizados para obtener más información sobre el proceso de desarrollar aplicaciones con SOAPElement, con SDO y con enlazadores personalizados.

For transitioning users For transitioning users: A partir de la versión 8 de WebSphere Application Server, los métodos SOAPMessage.getSOAPHeader y getSOAPBody generan una SOAPException si no existe ningún elemento correspondiente en el mensaje. Se proporciona una propiedad del sistema, com.ibm.websphere.webservices.soap.IBMSOAPMessage.ENABLE_LEGACY_GETSOAP_BEHAVIOR, para invertir el comportamiento de modo que devuelva nulo, en lugar de generar una excepción. Esta propiedad del sistema se establece utilizando una propiedad personalizada de la JVM, com.ibm.websphere.webservices.soap.enable.legacy.get.behavior. El valor predeterminado de esta propiedad personalizada de la JVM es false. Si esta propiedad de JVM se establece en true su comportamiento será el anterior, el cual es devolver un valor nulo para los métodos SOAPMessage.getSOAPHeader y getSOAPBody cuando no existe ningún mensaje correspondiente.

El comportamiento anterior a la devolución de null no cumple con la especificación.

trns

Para obtener una lista completa de los estándares y las especificaciones a los que se da soporte, consulte las especificaciones y la documentación de la API de los servicios Web.


Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_saaj
File name: cwbs_saaj.html