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

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

Avant de commencer

Pour développer une application de service Web Java API for XML-Based Web Services (JAX-WS), vous devez d'abord développer une implémentation d'interface de point de terminaison de service (SEI) qui décrit explicitement ou implicitement le SEI.

A propos de 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é en entrée et génère les artefacts portables suivants :
  • Classes Java Architecture for XML Binding (JAXB) requises pour marshaler et démarshaler le contenu du message.
  • un fichier WSDL (Web Services Description Language) si l'argument facultatif -wsdl est spécifié.
Configurations prises en charge : Lewsimport ,wsgen ,schemagen etxjc les outils de ligne de commande ne sont pas pris en charge sur le z/OS® plate-forme. Cette fonctionnalité est assurée par les outils d'assemblage fournis avec WebSphere® Application Server courir sur le z/OS plate-forme. Pour plus d'informations sur ces outils de ligne de commande, reportez-vous aux outils de ligne de commande pour les applications JAX-WS.
Note:WebSphere Application Server fournit l'API Java pour les services Web basés sur XML (JAX-WS) et les outils Java Architecture for XML Binding (JAXB). Les outils de ligne de commande wsimport, wsgen, schemagen et xjc se trouvent dans le répertoire app_server_root\bin\ en profil complet. Les commandes The wsimport et wsgen se trouvent dans le répertoire app_server_root\jaxws\bin\ en profil Liberty. Lexjc etschemagen les commandes se trouvent dans le racine_serveur_app\jaxb\bin\ dans le profil Liberty. Des outils similaires sont fournis par le Java SE Development Kit (JDK) 6. Dans certains cas, les artefacts générés à la fois par les outils fournis par WebSphere Application Server et le JDK prend 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 obtenir une intégration transparente au sein du WebSphere Application Server environnement et de profiter des fonctionnalités qui peuvent être uniquement prises en charge 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\.

Il n'est pas nécessaire de développer un fichier WSDL lors du développement de services Web JAX-WS à l'aide de l'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 unUSE attribut de valeurLITERAL sont pris en charge tandis que la valeur,ENCODED , n'est pas pris 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 une entreprise JavaBeans bean d'implémentation de service qui est appelé à l'aide du transport SOAP sur JMS et que vous souhaitez publier le WSDL afin que le fichier WSDL publié contienne l'URL du point de terminaison JMS entièrement résolu, puiswsgen outil génère le fichier WSDL en spécifiant le -wsdl argument. 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.ws.ant.WsGen dans 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 lewsgen commande pour générer les artefacts portables.
    Lewsgen l'outil est situé dans le racine_serveur_app /bin/ annuaire.
    [Windows]
    app_server_root\bin\wsgen.bat [options] service_implementation_class
    [Linux][AIX][HP-UX][Solaris]
    app_server_root/bin/ wsgen.sh [options] service_implementation_class
    [IBM i]
    app_server_root/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 la création d'un service Web JAX-WS.

Évitez les ennuis : Lewsgen La commande ne différencie pas l'espace de noms XML entre plusieurs annotations XMLType qui ont 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.
Elle vous indique également d'utiliser @XmlType.name et @XmlType.namespace pour leur attribuer des noms différents.
Cette erreur indique que vous avez des cours ou @XMLType.name des valeurs qui portent le même nom, mais qui existent 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.
[HP-UX][Solaris]
Évitez les ennuis : À partir de Sun et de la version HP JDK 1.6 contenant la version des outils JAX-WS 2.1.6, le comportement des environnements d'exécution et des outils JAX-WS a changé dans la façon dont ils déterminent les méthodes exposées en tant qu'opérations de services Web dans le but de mieux respecter les spécifications JAX-WS. Les applications pouvant être touchées par cette modification sont les suivantes : applications de services web ne spécifiant pas de fichier WSDL ou interface de noeud final de service explicite (SEI). Pour plus d'informations sur l'exposition des méthodes, voir les informations relatives aux services Web JAX-WS SEI.

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, consultez 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. Cette classe d'implémentation de service EchoService exemple 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 lewsgen commande du racine_serveur_app répertoire \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 lewsgen commande; 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/
Après la génération des artefacts Java à 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

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

Etape suivante

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