Implementación de los manejadores JAX-RPC para acceder a mensajes SDO
Los manejadores JAX-RPC se invocan durante el proceso de mensajes de solicitud y respuesta. Para los mensajes que se intercambian utilizando el protocolo SOAP, cada manejador JAX-RPC se pasa a un objeto MessageContext específico de SOAP. Para otros protocolos, el entorno de tiempo de ejecución de servicios web de IBM pasa un objeto MessageContext que proporciona una vista Service Data Objects del mensaje. SDO (objetos de datos de servicio) es un estándar abierto que permite a las aplicaciones manejar datos de distintos orígenes de datos de un modo uniforme.
Si el manejador JAX-RPC sólo trata con las propiedades del contexto del mensaje, no necesita conocer la subclase determinada de MessageContext que se proporciona porque los métodos de propiedad de contexto se definen mediante la propia interfaz MessageContext. Si el manejador ha de procesar la información contenida en el mensaje, se debe codificar para trabajar con las subclases necesarias. Los manejadores JAX-RPC deben comprobar si MessageContext es una instancia de la subclase requerida.
- Un cliente JAX-RPC o una invocación de salida del bus de integración de servicios invoca un servicio utilizando el enlace EJB.
- Un cliente JAX-RPC se desarrolla basándose en un WSDL no enlazado y se vuelve a dirigir a un destino del bus de integración de servicios.
La clase SDOMessageContext proporciona métodos para obtener y establecer la instancia de com.ibm.websphere.sdo.SDOMessage que representa el mensaje que se está procesando. El SDOMessage tiene un método para acceder al objeto DataGraph de SDO que incluye el contenido del mensaje como DataObjects de SDO.
Un manejador JAX-RPC puede modificar el contenido de DataGraph de SDO, pero no puede cambiar el formato o el esquema del mensaje.
El siguiente ejemplo de código se puede utilizar para acceder al DataGraph de SDO desde el objeto MessageContext en un método handleRequest del manejador JAX-RPC:
public boolean handleRequest(MessageContext messageContext) {
// Convertir MessageContext en un SDOMessageContext
if( messageContext instanceof SDOMessageContext) {
SDOMessageContext smc = (SDOMessageContext)messageContext;
// Recupere el mensaje
SDOMessage message = smc.getSDOMessage();
// Obtener el objeto raíz del DataGraph de SDO
DataGraph graph = message.getDataGraph();
DataObject content = graph.getRootObject();
// Ahora realice alguna acción con el contenido del mensaje....
}
return true;
}