La WSIF (Web Services Invocation Framework - Infraestructura de invocación de servicios web)
proporciona una API Java™ para invocar servicios web,
independiente del formato del servicio o del protocolo de transporte a través del cual se
invoca.
Antes de empezar
WSIF incluye un proveedor de EJB para la invocación de EJB que utiliza la invocación a método remoto sobre protocolo Inter-ORB de Internet (RMI-IIOP). Sin
embargo, para la invocación de servicio web basada en EJB(IIOP),
invoque los servicios Web RMI-IIOP utilizando
JAX-RPC en su lugar.
Asegúrese de que la aplicación utiliza sólo una hebra para llamar a WSIF.
Acerca de esta tarea
La API de WSIF soporta la invocación de servicios web definidos por
WSDL (Web Services Description Language). WSIF está especialmente indicada para su uso en clientes WSIF e intermediarios de servicios web.
La API de WSIF está controlada por la descripción de servicio abstracto en WSDL. Es totalmente independiente del enlace utilizado.
Esta independencia hace que sea más natural trabajar con la API porque utiliza términos WSDL
para hacer referencia a partes de mensaje, operaciones y otros elementos.
La
API WSIF se ha diseñado para el modelo de uso de WSDL:
- Seleccione un puerto que soporte el tipo de puerto que necesita.
- Invoque la operación proporcionando el mensaje de entrada abstracto necesario que
conste de las partes necesarias, sin preocuparse de cómo se correlaciona el mensaje con
un protocolo de enlace específico.
Otras API de servicios web, por ejemplo
las API de SOAP, no están diseñadas en WSDL, sino para un protocolo de enlace específico con
la sintaxis asociada; por ejemplo, los URI de destino y los estilos de codificación.
En el procedimiento siguiente
se describen las principales interfaces de API WSIF.
Nota: Apache ya no da soporte a WSIF.
- Creación de un mensaje para enviar a un puerto mediante la interfaz WSIFMessage.
En WSDL, un mensaje describe el tipo abstracto de la entrada o salida de una
operación. La clase WSIF correspondiente es WSIFMessage, que representa en la memoria la
entrada o salida de una operación. La interfaz WSIFMessage separa la representación de los datos del tipo abstracto que define WSDL.
Una clase WSIFMessage es un contenedor de un conjunto de partes con nombre. Las clases WSIFMessage se pueden enviar entre JVM (Java Virtual Machine).
- Elija si se debe representar el mensaje WSIF en tiempo de ejecución como clase Java o XML.
Hay dos formas naturales de
representar un mensaje WSDL en un entorno de ejecución:
- La clase Java generada basada en una correlación de WSDL con Java como la que
proporciona JAX-RPC (Java API for XML-based Remote Procedure Call).
- La representación XML de los datos, por ejemplo, mediante la codificación SOAP.
Cada opción ofrece las ventajas de diferentes escenarios. La clase Java es el método natural cuando se utiliza WSIF en un cliente Java estándar.
No obstante, en otros casos en los que se utiliza WSIF como un intermediario, es
posible que resulte más eficaz mantener un mensaje WSDL con el formato de
codificación de SOAP. El estilo que se utilice para definir los mensajes debe ser coherente con el mensaje, por lo tanto, todas las partes de un mensaje deben ser coherentes. Una serie
getRepresentationStyle():
siempre devuelve
null.
Esto indica que las parte de esta clase WSIFMessage
se representan mediante objetos Java.
- Obtenga y establezca las partes del mensaje WSIF.
Los métodos setObjectPart o setTypePart se utilizan para añadir partes a
una clase WSIFMessage. Cada parte tiene un nombre. Los nombres de las partes de un mensaje son exclusivos.
Si
establece una parte más de una vez, el último valor es el que se utiliza.
Las partes se recuperan a partir del nombre desde una clase WSIFMessage con los
métodos getObjectPart o getTypePart. Si la parte mencionada no existe,
el método devuelve un error WSIFException.
Puede utilizar iteradores para recuperar partes del mensaje utilizando los
métodos getParts()
y getPartNames().
El orden en que se establecen las partes no es importante, pero la implementación
del mensaje puede resultar más eficaz si las partes se establecen en el orden de
parámetros especificado por WDSL.
Las clases WSIFMessage se pueden clonar y serializar.
Si las partes establecidas
no se pueden clonar, la implementación debe intentar clonarlas serializándolas. Si las partes no se pueden serializar, se genera una excepción
CloneNotSupportedException si se intenta clonarlas.
- Establezca el nombre de mensaje WSIF.
Además de las partes que contiene, una clase WSIFMessage también tiene un nombre
de mensaje.
Esto es necesario para la sobrecarga de operaciones, que está
soportada por WSDL y WSIF.
Para obtener más información sobre la interfaz WSIFMessage (/wsi/org/apache/wsif/WSIFMessage.html),
consulte la documentación de API generada que se proporciona con WSIF.
- Busque una fábrica de puertos o servicio mediante la interfaz WSIFService y la
clase WSIFServiceFactory.
La interfaz WSIFService es una fábrica de puertos
que diseña y da soporte al enfoque WSDL, en el que un servicio está disponible en uno o
varios puertos. La fábrica oculta la implementación del puerto. WSIF da soporte a puertos dinámicos basados en un
transporte y protocolo determinado y que se configuran mediante WSDL durante la
ejecución. Por ejemplo, el puerto SOAP dinámico puede invocar cualquier servicio SOAP
basado en la descripción WSDL de dicho servicio, de modo que puede ocultar y modificar el
conjunto de puertos disponibles durante la ejecución.
Para buscar un servicio de un documento WSDL en una dirección web o en código base generado mediante
código, utilice la clase WSIFServiceFactory.
- Invoque una operación a través de las interfaces WSIFPort y WSIFOperation.
Una interfaz WSIFPort maneja los detalles de la invocación de una
operación. El puerto proporciona el acceso a la implementación del servicio.
Un documento WSDL puede proporcionar muchos enlaces WSDL diferentes y estos
enlaces puede dirigir varios puertos. El cliente puede seleccionar un puerto, el archivo
apéndice de servicio puede seleccionar un puerto o WSIF puede seleccionar un puerto predeterminado.
El puerto ofrece una interfaz para recuperar un objeto Operation. Una interfaz WSIFOperation
ofrece la posibilidad de ejecutar la operación proporcionada.
Si el puerto se serializa y se deserializa en un momento posterior, WSIF se asegura de que
el cliente proporcione la información correcta al servidor para identificar la instancia. Si
la instancia de servidor ya no está disponible, el servidor debe decidir
si se debe crear un error o proporcionar una instancia nueva. Este comportamiento puede depender del tipo de servicio. Por ejemplo, para un enterprise bean, la interfaz WSIFPort almacena el inicio de EJB y
lo utiliza para seleccionar el bean antes de cada invocación. El cliente es responsable de
serializar o mantener la instancia de puerto si requiere soporte de instancia.
El cliente debe crear una operación y mensajes nuevos para cada invocación.