Développement de descripteurs de déploiement pour un client JAX-WS

Des descripteurs de déploiement sont des fichiers texte standard, formatés en XML et intégrés à une application de service Web. Vous pouvez, en option, utiliser les services Web pour la plateforme Java™, Edition Entreprise (Java EE) descripteur de déploiement de référence de service de spécification pour augmenter ou remplacer les métadonnées de l'application indiquées dans les annotations dans le client de services Web Java API for XML-Based Web Services (JAX-WS).

Avant de commencer

Vous devez d'abord générer les artefacts du client de services Web à partir d'un fichier WSDL (Web Services Description Language) à l'aide de la commande wsimport.

Pourquoi et quand exécuter cette tâche

Vous pouvez ajouter des entrées service-ref sans les descripteurs de déploiement EE application-client.xml, web.xml, ou ejb-jar.xml Java. Une entrée service-ref représente une référence à un service Web qui est utilisé par un composant Java EE dans des JavaBeans Web, Entreprise (EJB) ou des conteneurs de client d'application. Une entrée service-ref a un nom JNDI utilisé pour rechercher le service. Spécifier l'entrée service-ref permet aux applications client de localiser le service grâce à une recherche JNDI et vous pouvez également utiliser ces références de services à des fins d'injection de ressources.

Pour chaque entrée service-ref trouvée dans l'un des descripteurs de déploiement, l'objet du service correspondant est associé dans l'espace nom JNDI et les informations sur le port sont incluses, si elles sont indiquées. Le client JAX-WS peut désormais effectuer une recherche JNDI pour récupérer une instance de service ou de port JAX-WS.

Lorsque vous définissez une entrée service-ref qui représente un service JAX-WS, utilisez la sous-classe javax.xml.ws.Service générée par l'outil wsimport comme valeur service-interface. C'est la classe qui contient l'annotation @WebServiceClient. Lorsque vous définissez une entrée service-ref qui représente un port JAX-WS, la valeur service-interface est toujours la sous-classe javax.xml.ws.Service générée par l'outil wsimport et la valeur service-ref-type spécifie la classe de l'interface SEI (service endpoint interface) utilisée par le port. La classe SEI est également générée par wsimport et contient l'annotation @WebService.

Procédure

  1. Définissez l'entrée service-ref dans vos descripteurs de déploiement application-client.xml, web.xml ou ejb-jar.xml.
    Par exemple, supposez qu'un fichier WAR (archive Web) contient un descripteur de déploiement WEB-INF/web.xml qui comprend les entrées service-ref suivantes :
    <service-ref>
      <service-ref-name>service/ExampleService</service-ref-name>
      <service-interface>com.ibm.sample.ExampleService</service-interface>
    </service-ref>
    
    <service-ref>
      <service-ref-name>service/ExamplePort</service-ref-name>
      <service-interface>com.ibm.sample.ExampleService</service-interface>
      <service-ref-type>com.ibm.sample.ExamplePort</service-ref-type>
    </service-ref>
    
    <service-ref>
      <service-ref-name>service/ExamplePortInjected</service-ref-name>
      <service-interface>com.ibm.sample.ExampleService</service-interface>
      <service-ref-type>com.ibm.sample.ExamplePort</service-ref-type>
    
      <injection-target>
        <injection-target-class>com.ibm.sample.J2EEClient</injection-target-class>
        <injection-target-name>injectedPort</injection-target-name>
      </injection-target>
    </service-ref>
    Dans cet exemple, com.ibm.sample.ExampleService est une classe de service JAX-WS générée et cette classe doit être une sous-classe de javax.xml.ws.Service. De plus, la méthode ExampleService.getPort() retourne une instance de com.ibm.sample.ExamplePort.
  2. Utilisez les descripteurs de déploiement dans votre application client de services Web pour personnaliser votre application. Les fragments de code suivants sont des exemples d'utilisation des entrées service-ref par votre application client dans le module WAR :
    import javax.xml.ws.Service;
    import com.ibm.sample.ExampleService;
    import com.ibm.sample.ExamplePort;
    
    // Créez un objet Contexte initial pour effectuer des recherches JNDI.
    InitialContext ic =  new InitialContext();
    
    // Le client obtient une instance de la classe de service générique en utilisant JNDI.
    Service genericService =
    (Service) ic.lookup(“java:comp/env/service/ExampleService”);
    
    // Le client obtient une instance de la classe de service générée en utilisant JNDI.
    ExampleService exampleService =
    (ExampleService) ic.lookup(“java:comp/env/service/ExampleService”);
    
    // Le client obtient une instance du port en utilisant JNDI.
    ExamplePort ExamplePort =
    (ExamplePort) ic.lookup(“java:comp/env/service/ExamplePort”);
    
    // Le conteneur insère une instance de ExamplePort selon le descripteur de déploiement du client
    private ExamplePort injectedPort;

Résultats

Vous pouvez maintenant utiliser les références de service qui ont été définies dans le descripteur de déploiement au sein de votre application client. De plus, vous pouvez utiliser les descripteurs de déploiement pour augmenter ou remplacer les informations indiquées par les annotations @WebServiceRef ou @Resource.

L'élément de descripteur de déploiement <lookup-name> est nouveau dans Java EE 6 et permet de faire indirectement référence à une référence de service déjà définie. Si l'élément <lookup-name> est utilisé, seul l'élément <service-ref-name> peut également être spécifié et aucun autre élément enfant de <service-ref> ne peut être défini.

L'exemple suivant illustre une entrée service-ref dans un fichier WEB-INF/web.xml qui définit une référence à un service JAX-WS, ainsi qu'une entrée service-ref dans le même fichier web.xml qui définit une référence indirecte à la première entrée service-ref :

<service-ref>
  <service-ref-name>service/ExampleService</service-ref-name>
  <service-interface>com.ibm.sample.ExampleService</service-interface>
  <service-ref-type>com.ibm.sample.ExampleServicePortType</service-ref-type>
  <wsdl-file>WEB-INF/wsdl/ExampleService.wsdl</wsdl-file>
</service-ref>

<service-ref>
  <service-ref-name>service/ExampleService2</service-ref>
  <lookup-name>java:comp/env/service/ExampleService</lookup-name>
</service-ref>

En supposant que les entrées service-ref précédentes soient définies dans le fichier WEB-INF/web.xml, l'application client pourrait effectuer une recherche JNDI à l'aide du nom java:comp/env/service/ExampleService2 et le résultat serait une référence au service ExampleService défini dans le document WSDL WEB-INF/wsdl/ExampleService.wsdl, comme défini dans la première entrée service-ref.

Que faire ensuite

Complétez la mise en place du client en saisissant votre code d'application client utilisé pour l'appel du service Web.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxwsclientdd
Nom du fichier : twbs_jaxwsclientdd.html