Puede utilizar WSIF (Web Services Invocation Framework) para enlazar
una referencia con un servicio web, luego buscar la referencia utilizando la JNDI.
Acerca de esta tarea
Puede acceder a un servicio web utilizando la información que se facilita en el documento WSDL
(web Services Description Language) para el servicio.
Si no sabe dónde encontrar el documento WSDL del servicio, pero
sabe que está registrado en Registro UDDI, búsquelo en dicho registro. Los programas Java™ acceden a los recursos y objetos Java de forma parecida, aunque utilizan una interfaz JNDI.
Los fragmentos de código de los pasos siguientes muestran cómo, mediante WSIF, puede enlazar una referencia a
un servicio web y, a continuación, buscar la referencia utilizando JNDI.
- Especifique los valores de argumento para el servicio web.
El servicio web se representa en WSIF mediante una instancia de la clase
org.apache.wsif.naming.WSIFServiceRef. Este objeto Referenciable simple tiene el constructor siguiente:
public WSIFServiceRef(
String WSDL,
String sNS,
String sName,
String ptNS,
String ptName)
{
[...]
}
En este ejemplo
- WSDL es la ubicación del archivo WSDL que contiene la definición del servicio.
- sNS es el espacio de nombres completo para la definición del
servicio (se puede especificar null si sólo se define uno de los servicios
en el archivo WSDL).
- sName es el nombre local para la definición del servicio (se
puede especificar null si sólo se define uno de los servicios en el archivo
WSDL).
- ptNS es el espacio de nombres completo para el tipo de puerto
incluido en el servicio que desea utilizar (se puede especificar null si
sólo está disponible un tipo de puerto para el servicio).
- ptName es el nombre local para el tipo de puerto (se puede
especificar null si sólo está disponible un tipo de puerto para el
servicio).
Por ejemplo, si el archivo WSDL para el servicio web está disponible
desde la dirección web
http://myServer/WSDL/Example.WSDL
y contiene las siguientes definiciones de servicio y tipo de puerto:
<definitions targetNamespace="http://nombrehost/espacionombres/ejemplo"
xmlns:abc="http://nombrehost/espacionombres/abc"
[...]
<portType name="ExamplePT">
<operation name="exampleOp">
<input name="exampleInput" message="tns:ExampleInputMsg"/>
</operation>
</portType>
[...]
<service name="abc:ExampleService">
[...]
</service>
[...]
</definitions>
Puede especificar los siguientes valores de argumento para la clase
WSIFServiceRef:
- WSDL es http://miServidor/WSDL/Ejemplo.WSDL
- sNS es http://nombrehost/espacionombres/abc
- sName es ServicioEjemplo
- ptNS es http://nombrehost/espacionombres/ejemplo
- ptName es TPEjemplo
- Enlace el servicio utilizando JNDI.
Para enlazar la referencia de servicio en el directorio de denominación utilizando JNDI, puede
utilizar la clase com.ibm.websphere.naming.JndiHelper
en WebSphere
Application Server:
[...]
import com.ibm.websphere.naming.JndiHelper;
import org.apache.wsif.naming.*;
[...]
try {
Context startingContext = new InitialContext();
WSIFServiceRef ref = new WSIFServiceRef("http://miServidor/WSDL/Ejemplo.WSDL",
"http://nombrehost/espacionombres/abc"
"ServicioEjemplo",
"http://nombrehost/espacionombres/ejemplo",
"TPEjemplo");
JndiHelper.recursiveRebind(startingContext,
"miContexto/miSubContexto/miServicioRef", ref);
}
catch (NamingException e) {
// Error de manejador.
}
[...]
- Busque el servicio utilizando JNDI.
En el fragmento de código siguiente se muestra la búsqueda de un servicio utilizando JNDI:
[...]
try {
[...]
InitialContext ic = new InitialContext();
WSIFService myService =
(WSIFService) ic.lookup("miContexto/miSubContexto/miServicioRef");
[...]
}
catch (NamingException e) {
// Error de manejador.
}
[...]