Vous pouvez utiliser WSIF (Web Services Invocation Framework) pour lier une référence à un service Web, puis rechercher cette
référence à l'aide de JNDI.
Pourquoi et quand exécuter cette tâche
Vous pouvez accéder à un service Web grâce à des informations fournies dans le document WSDL du service.
Si vous ne connaissez pas l'emplacement du document WSDL du service
mais que vous savez qu'il a été enregistré dans un registre UDDI,
recherchez-le à cet endroit. Les programmes Java™ accèdent aux objets et ressources Java de la même manière, mais en utilisant
une interface JNDI.
Les exemples de code suivants montrent comment utiliser WSIF pour lier une référence à un service Web puis la
rechercher à l'aide de JNDI.
- Définissez les valeurs des arguments du service Web.
Dans WSIF, le service Web est représenté par une instance de la classe org.apache.wsif.naming.WSIFServiceRef. L'objet Referenceable possède le constructeur suivant :
public WSIFServiceRef(
String WSDL,
String sNS,
String sName,
String ptNS,
String ptName)
{
[...]
}
Dans cet exemple
- WSDL est l'emplacement du fichier WSDL qui contient la définition
du service.
- sNS est l'espace de noms complet des définitions de service (null peut être spécifié si un seul service est défini dans le fichier WSDL).
- sName est l'espace de noms complet des définitions de service (null peut être spécifié si un seul service est défini dans le fichier WSDL).
- ptNS est l'espace de noms complet des types de port (portTypes) que vous pouvez utiliser pour accéder au service (null peut être spécifié si un seul type de
port est disponible pour l'accès au service).
- ptName est le nom local du type de port (null peut être
spécifié si un seul type de port est disponible pour l'accès au
service).
Par exemple, si le fichier WSDL du service web est disponible à l'adresse Web
http://myServer/WSDL/Example.WSDL et contient le service et les
définitions de type de port suivants :
<definitions targetNamespace="http://hostname/namespace/example"
xmlns:abc="http://hostname/namespace/abc"
[...]
<portType name="ExamplePT">
<operation name="exampleOp">
<input name="exampleInput" message="tns:ExampleInputMsg"/>
</operation>
</portType>
[...]
<service name="abc:ExampleService">
[...]
</service>
[...]
</definitions>
Vous pouvez indiquer les valeurs d'argument suivantes pour la classe WSIFServiceRef :
- WSDL est http://myServer/WSDL/Example.WSDL
- sNS est http://hostname/namespace/abc
- sName est ExampleService
- ptNS est http://hostname/namespace/example
- ptName est ExamplePT
- Liez le service à l'aide de JNDI.
Pour lier la référence de service dans le registre à l'aide de JNDI, vous pouvez utiliser la classe com.ibm.websphere.naming.JndiHelper
dans WebSphere Application Server :
[...]
import com.ibm.websphere.naming.JndiHelper;
import org.apache.wsif.naming.*;
[...]
try {
Context startingContext = new InitialContext();
WSIFServiceRef ref = new WSIFServiceRef("http://myServer/WSDL/Example.WSDL",
"http://hostname/namespace/abc"
"ExampleService",
"http://hostname/namespace/example",
"ExamplePT");
JndiHelper.recursiveRebind(startingContext,
"myContext/mySubContext/myServiceRef", ref);
}
catch (NamingException e) {
// Gère l'erreur.
}
[...]
- Recherchez le service à l'aide de JNDI.
Le fragment de code suivant montre comment rechercher un service à l'aide de JNDI :
[...]
try {
[...]
InitialContext ic = new InitialContext();
WSIFService myService =
(WSIFService) ic.lookup("myContext/mySubContext/myServiceRef");
[...]
}
catch (NamingException e) {
// Gère l'erreur.
}
[...]