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
A propos de cette tâche
- 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é.
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
Résultats
Vous disposez des artefacts Java requis pour la création d'un service Web JAX-WS.
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.
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
- Copiez le fichier de classe d'implémentation de service
EchoServicePortTypeImplexemple et le fichier de classe d'interface de serviceEchoServicePortTypeassocié dans un répertoire. Le répertoire doit contenir une arborescence de répertoires qui correspond au nom de packagecom.ibm.was.wssample.echopour 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 lewsgen commande du racine_serveur_app répertoire \bin\. L'option
-cpdéfinit l'emplacement du fichier de classe d'implémentation de service. L'option-sspécifie le répertoire des fichiers source générés. L'option-ddéfinit le répertoire pour les fichiers de sortie générés. Lors de l'utilisation des options-sou-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 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/
/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.classLe 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.