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
Pourquoi et quand exécuter cette tâche
- 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é.


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
Résultats
Vous disposez des artefacts Java requis pour créer un service Web JAX-WS.

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.gotchaAvec 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
- 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); }
- 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.
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\
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/
/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.