Génération d'artefacts Java pour les applications JAX-WS

Utilisez les outils JAX-WS (Java™ API for XML-Based Web Services) pour générer les artefacts Java JAX-WS et JAXB (Java Architecture for XML Binding) requis pour les applications de services Web JAX-WS lors du démarrage de composants JavaBeans ou de beans enterprise.

Avant de commencer

Pour développer une application de services Web JAX-WS (Java API for XML-Based Web Services), vous devez d'abord développer une implémentation SEI (Service Endpoint Interface) qui décrit de manière explicite ou implicite l'interface SEI.

Pourquoi et quand exécuter cette tâche

Lors de l'utilisation d'une approche ascendante pour développer des services Web JAX-WS, utilisez l'outil de ligne de commande wsgen sur l'implémentation de noeud final de service. L'outil wsgen traite une classe d'implémentation de noeud final de service compilée en tant qu'entrée et génère les artecfacts portables suivants :
  • les classes JAXB (Java Architecture for XML Binding) requises pour assembler et désassembler les contenus de message ;
  • un fichier WSDL (Web Services Description Language) si l'argument facultatif -wsdl est spécifié.
Configurations prises en charge Configurations prises en charge: Les outils de ligne de commande wsimport, wsgen, schemagen et xjc ne sont pas pris en charge sur la plateforme z/OS. Leur fonctionnalité est assurée par les outils d'assemblage fournis avec WebSphere Application Server s'exécutant sur la plateforme z/OS. Pour plus d'informations sur ces outils de ligne de commande, reportez-vous aux outils de ligne de commande pour les applications JAX-WS.sptcfg
Pratiques recommandées Pratiques recommandées: WebSphere Application Server fournit des outils JAX-WS (Java API for XML-Based Web Services) et JAXB (Java Architecture for XML Binding). Les outils de ligne de commande wsimport, wsgen, schemagen et xjc se trouvent dans le répertoire app_server_root\bin\ de WebSphere Application Server Traditional.Les commandes xjc et schemagen se trouvent dans le répertoire app_server_root\jaxb\bin\ du profil Liberty. Il peut arriver que les artefacts générés par les outils fournis par WebSphere Application Server et le kit de développement Java SE prennent en charge les mêmes niveaux de spécifications. En général, les artefacts générés par les outils JDK sont compatibles avec d'autres environnements d'exécution conformes. Toutefois, il est recommandé d'utiliser les outils fournis avec ce produit pour effectuer une intégration transparente au sein de l'environnement WebSphere Application Server et pour bénéficier des fonctions qui peuvent être prises en charge uniquement dans WebSphere Application Server. Pour profiter des outils JAX-WS et JAXB V2.2, utilisez les outils fournis avec le serveur d'applications qui se trouvent dans le répertoire racine_serveur_app\bin\.bprac

Vous n'êtes pas tenu de développer un fichier WSDL lors du développement de services Web JAX-WS selon une approche ascendante de démarrage avec JavaBeans. L'utilisation d'annotations fournit toutes les informations WSDL nécessaires à la configuration du noeud final de service du client. Le serveur d'applications prend en charge les documents WSDL 1.1 compatibles avec les spécifications Web Services-Interoperability (WS-I) Basic Profile 1.1 et sont des documents de style Document/Literal ou RPC/Literal. De plus, les documents WSDL avec des liaisons qui déclarent un attribut USE de valeur LITERAL sont pris en charge alors que la valeur ENCODED n'est pas prise en charge. Pour les documents WSDL qui implémentent un modèle encapsulé Document/Literal, un élément root est déclaré dans le schéma XML et est utilisé en tant qu'encapsuleur d'opération pour un flux de messages. Il existe des définitions d'élément d'encapsuleur séparées pour la demande et la réponse.

Pour vous assurer qu'il ne manque pas des méthodes héritées dans la commande wsgen sur un bean d'implémentation de noeud final de service, vous devez ajouter l'annotation @WebService à la superclasse souhaitée ou vous pouvez remplacer la méthode héritée dans la classe d'implémentation avec un appel de la méthode de superclasse.

Bien qu'un fichier WSDL soit en général facultatif lors du développement d'un bean d'implémentation de service JAX-WS, il est nécessaire si vos noeuds finaux JAX-WS sont exposés à l'aide du transport SOAP sur JMS et que vous publiez votre fichier WSDL. Si vous développez un bean d'implémentation de service Enterprise JavaBeans qui est appelé à l'aide du transport SOAP sur JMS et que vous souhaitez publier le WSDL de sorte que le fichier WSDL publié contienne l'URL de noeud final JMS complète résolue, l'outil wsgen doit alors générer le fichier WSDL en spécifiant l'argument -wsdl. Dans ce cas, vous devez placer le fichier WSDL dans votre application de services Web.

Outre l'utilisation des outils à partir de la ligne de commande, vous pouvez appeler ces outils JAX-WS à partir des environnements de génération Ant. Utilisez la tâche Ant com.sun.tools.ant.WsGen à partir de l'environnement de génération Ant pour appeler l'outil wsgen. Pour fonctionner correctement, la tâche Ant doit être appelée par le script ws_ant.

Procédure

  1. Définissez l'emplacement du fichier classe d'implémentation de noeud final de service.
  2. Exécutez la commande wsgen pour générer les artefacts portables. L'outil wsgen est disponible dans le répertoire racine_serveur_app/bin/.
    [Windows]
    racine_serveur_app\bin\wsgen.bat [options] service_implementation_class
    [AIX][HP-UX][Linux][Solaris]
    racine_serveur_app/bin/ wsgen.sh [options] service_implementation_class
    [IBM i]
    racine_serveur_app/bin/ wsgen [options] service_implementation_class
    (Facultatif) Utilisez les options suivantes avec la commande wsgen :
    • L'option -verbose permet d'afficher une liste des fichiers générés ainsi que des messages informatifs supplémentaires.
    • L'option -keep permet de conserver les fichiers Java générés.
    • L'option -wsdl permet de générer un fichier WSDL. Si vous développez un bean d'implémentation de services qui sera appelé à l'aide du transport HTTP, le fichier WSDL généré par l'outil de ligne de commande wsgen au cours de cette étape est facultatif. Cependant, si vous développez un bean d'implémentation de services qui sera appelé à l'aide du transport SOAP sur JMS, le fichier WSDL généré par l'outil wsgen au cours de cette étape est requis dans les étapes suivantes du développement d'applications JAX-WS, et n'est de ce fait pas facultatif.

    Pour plus d'informations sur la commande wsgen et les options supplémentaires qui peuvent être spécifiées, voir la rubrique correspondante.

Résultats

Vous disposez des artefacts Java requis pour créer un service Web JAX-WS.

Eviter les incidents Eviter les incidents: La commande wsgen ne différencie pas l'espace de nom XML dans plusieurs annotations XMLType ayant le même nom @XMLType défini dans différents packages Java. Dans ce cas, l'erreur suivante s'affiche :
L'erreur indique que deux classes ont le même nom de type XML.
Utilisez @XmlType.name et @XmlType.namespace pour leur affecter des noms différents.
Cette erreur signale que des classes ou des valeurs @XMLType.name portent des noms identiques mais se trouvent dans différents packages Java. Pour éviter cette erreur, ajoutez la classe espace de nom @XML.Type. à l'annotation @XMLType afin de faire la différence entre les types XML.gotcha

Avec les applications JAX-WS, l'outil de ligne de commande wsgen risque de ne pas trouver les fichiers de classe partagés. Vous pouvez spécifier l'emplacement de ces fichiers de classe à l'aide de la propriété personnalisée com.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath. Pour plus d'informations, reportez-vous à la documentation sur les propriétés personnalisées de la machine virtuelle Java.

Exemple

L'exemple suivant explique comment utiliser la commande wsgen pour traiter la classe d'implémentation de noeud final de service afin de générer des artefacts JAX-WS. Cet exemple de classe d'implémentation de service EchoService utilise un noeud final de service JavaBeans explicite.
  1. Copiez le fichier de classe d'implémentation de service EchoServicePortTypeImpl exemple et le fichier de classe d'interface de service EchoServicePortType associé dans un répertoire. Le répertoire doit contenir une arborescence de répertoires qui correspond au nom de package com.ibm.was.wssample.echo pour le fichier de classe.
    /* This is a sample EchoServicePortTypeImpl.java file.    */
    package com.ibm.was.wssample.echo;
    
    
    @javax.jws.WebService(serviceName = "EchoService", endpointInterface = 
    "com.ibm.was.wssample.echo.EchoServicePortType", 
    targetNamespace="http://com/ibm/was/wssample/echo/",
    portName="EchoServicePort")
    
    public class EchoServicePortTypeImpl implements EchoServicePortType {
    
    	public EchoServicePortTypeImpl() {
    	}
    
    	public String invoke(String obj) {
    		System.out.println(">> JAXB Provider Service: 
    Request received.\n");
    		String str = "Failed";
    		if (obj != null) {
    			try {
    				str = obj;
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return str;
    
    	}
    
    }	
    /* This is a sample EchoServicePortType.java file.    */
    package com.ibm.was.wssample.echo;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    import javax.xml.ws.RequestWrapper;
    import javax.xml.ws.ResponseWrapper;
    
    
    @WebService(name = "EchoServicePortType", targetNamespace = 
    "http://com/ibm/was/wssample/echo/", 
     wsdlLocation="WEB-INF/wsdl/Echo.wsdl")
    
    public interface EchoServicePortType {
    
    
        /**
         * 
         * @param arg0
         * @return
         *     returns java.lang.String
         */
        @WebMethod
        @WebResult(name = "response", targetNamespace = 
        "http://com/ibm/was/wssample/echo/")
        @RequestWrapper(localName = "invoke", targetNamespace = 
        "http://com/ibm/was/wssample/echo/", 
         className = "com.ibm.was.wssample.echo.Invoke")
        @ResponseWrapper(localName = "echoStringResponse", 
         targetNamespace = "http://com/ibm/was/wssample/echo/", 
         className = "com.ibm.was.wssample.echo.EchoStringResponse")
        public String invoke(
            @WebParam(name = "arg0", targetNamespace = 
            "http://com/ibm/was/wssample/echo/")
            String arg0);
    
    }
  2. Exécutez la commande wsgen à partir du répertoire racine_serveur_app\bin\. L'option -cp définit l'emplacement du fichier de classe d'implémentation de service. L'option -s spécifie le répertoire des fichiers source générés. L'option -d définit le répertoire pour les fichiers de sortie générés. Lors de l'utilisation des options -s ou -d, vous devez tout d'abord créer le répertoire pour les fichiers de sortie générés.
    [Windows]
    app_server_root\bin\wsgen.bat -wsdl -s c:\generated_source\ -cp c:\my_application\classes\ 
    com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:\generated_artifacts\
    [Linux][AIX][HP-UX][Solaris]Exécutez la commande wsgen. Par exemple :
    app_server_root/bin/wsgen.sh -wsdl -s c:/generated_source/ -cp c:/my_application/classes/ 
    com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:/generated_artifacts/
Une fois les artefacts Java générés à l'aide de la commande wsgen, les fichiers suivants sont générés :
/generated_source/com/ibm/was/wssample/echo/EchoStringResponse.java
/generated_source/com/ibm/was/wssample/echo/Invoke.java
/generated_artifacts/EchoService.wsdl
/generated_artifacts/EchoService_schema1.xsd
/generated_artifacts/com/ibm/was/wssample/echo/EchoStringResponse.class
/generated_artifacts/com/ibm/was/wssample/echo/Invoke.class

Les fichiers EchoStringResponse.java et Invoke.java sont les fichiers de classe Java générés. Les versions compilées des fichiers Java générés sont les fichiers EchoStringResponse.class et Invoke.class. Les fichiers EchoService.wsdl et EchoService_schema1.xsd sont générés car l'option -wsdl a été spécifiée.

Que faire ensuite

Effectuez l'implémentation de votre application de services Web JAX-WS.


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_devjaxwsartifactsbean
Nom du fichier : twbs_devjaxwsartifactsbean.html