Java-Artefakte für JAX-WS-Anwendungen generieren

Verwenden Sie JAX-WS-Tools (Java™ API for XML-Based Web Services), um die erforderlichen JAX-WS- und JAXB-Java-Artefakte zu generieren, die für JAX-WS-Web-Service-Anwendungen erforderlich sind, wenn sie über JavaBeans- oder Enterprise-Bean-Komponenten gestartet werden.

Vorbereitende Schritte

Zum Entwickeln einer JAX-WS-Web-Service-Anwendung müssen Sie zuerst eine Serviceendpunktschnittstellenimplementierung entwickeln, die die Serviceendpunktschnittstelle explizit oder implizit beschreibt.

Informationen zu diesem Vorgang

Wenn Sie einen Bottom-up-Ansatz für die Entwicklung von JAX-WS-Web-Services verwenden, verwenden Sie das Befehlszeilentool wsgen für die vorhandene Serviceendpunktimplementierung. Das Tool wsgen verarbeitet eine kompilierte Serviceendpunktimplementierungsklasse als Eingabe und generiert die folgenden portierbaren Artefakte:
  • JAXB-Klassen, die für das Marshaling und Unmarshaling des Nachrichteninhalts erforderlich sind.
  • Eine WSDL-Datei, wenn das optionale Argument -wsdl angegeben ist.
Unterstützte Konfigurationen Unterstützte Konfigurationen: Die Befehlszeilentools wsimport, wsgen, schemagen und xjc werden auf der Plattform z/OS nicht unterstützt. Diese Funktionalität wird von den Assembliertools, die in der z/OS-Version von WebSphere Application Server enthalten sind, bereitgestellt. Weitere Informationen zur Verwendung dieser Befehlszeilentools für JAX-WS-Anwendungen finden Sie in der Dokumentation zu diesen Tools.sptcfg
Bewährtes Verfahren Bewährtes Verfahren: WebSphere Application Server stellt Tools für Java API for XML-Based Web Services (JAX-WS) und Java Architecture for XML Binding (JAXB) bereit. Die Befehlszeilentools wsimport, wsgen, schemagen und xjc befinden sich im Verzeichnis "Stammverzeichnis_des_Anwendungsservers\bin\" von WebSphere Application Server Traditional. Die Befehle xjc und schemagen befinden sich im Verzeichnis Stammverzeichnis_des_Anwendungsservers\jaxb\bin\ im Liberty-Profil. In einigen Fällen unterstützen die von den WebSphere Application Server-Tools und den JDK-Tools generierten Artefakte dieselben Spezifikationsstufen. Im Allgemeinen sind die von den JDK-Tools generierten Artefakte in kompatible Laufzeitumgebungen portierbar. Es empfiehlt sich jedoch, die WebSphere-Tools zu verwenden, um eine nahtlose Integration in die Umgebung von WebSphere Application Server zu erreichen und die Features zu nutzen, die möglicherweise nur in WebSphere Application Server unterstützt werden. Um den Vorteil der JAX-WS- und JAXB-V2.2-Tools zu nutzen, verwenden Sie die mit Application Server bereitgestellten Tools, die sich im Verzeichnis Stammverzeichnis_des_Anwendungsservers\bin\ befinden.bprac

Wenn Sie den Bottom-up-Ansatz mit JavaBeans als Ausgangspunkt verwenden, müssen Sie beim Entwickeln von JAX-WS-Web-Services keine WSDL-Datei entwickeln. Durch die Verwendung von Annotationen werden alle WSDL-Informationen bereitgestellt, die zum Konfigurieren des Serviceendpunkts oder Clients erforderlich sind. Der Anwendungsserver unterstützt WSDL-Dokumente der Version 1.1, die der Spezifikation "Web Services-Interoperability (WS-I) Basic Profile 1.1" entsprechen und entweder Document/Literal-Dokumente oder RPC/Literal-Dokumente sind. Außerdem werden WSDL-Dokumente mit Bindungen unterstützt, die ein Attribut USE mit dem Wert LITERAL deklarieren. Der Wert ENCODED wird jedoch nicht unterstützt. Für WSDL-Dokumente, die ein eingeschlossenes Muster vom Typ "Document/Literal" implementiert, wird im XML-Schema ein Stammelement deklariert und als Operations-Wrapper für eine Nachrichtenfolge verwendet. Für Anforderung und Antwort sind gesonderte Wrapper-Elementdefinitionen vorhanden.

Um sicherzustellen, dass der Befehl wsgen keine übernommenen Methoden in der Implementierungsklasse eines Serviceendpunkts auslässt, müssen Sie der gewünschten Superklasse die Annotation "@WebService" hinzufügen oder die übernommene Methode in der Implementierungsklasse durch einen Aufruf der Methode aus der Superklasse überschreiben.

Obwohl eine WSDL-Datei (Web Services Description Language) bei der Entwicklung einer JAX-WS-Serviceimplementierungsbean gewöhnlich optional ist, muss sie jedoch erstellt werden, wenn Ihre JAX-WS-Endpunkte über den Transport "SOAP over JMS" bereitgestellt werden und wenn Sie Ihre WSDL-Datei veröffentlichen. Wenn Sie eine EJB-Serviceimplementierungsbean entwickeln, die über den Transport "SOAP over JMS" aufgerufen wird, und die WSDL-Datei veröffentlichen möchten, damit die veröffentlichte WSDL-Datei den vollständig aufgelösten JMS-Endpunkt-URL enthält, generieren Sie die WSDL-Datei mit dem Tool wsgen, und geben Sie das Argument -wsdl an. In diesem Szenario müssen Sie die WSDL-Datei mit Ihrer Web-Service-Anwendung packen.

Sie können diese JAX-WS-Tools nicht nur über die Befehlszeile, sondern auch in den Ant-Build-Umgebungen aufrufen. Verwenden Sie die Ant-Task com.sun.tools.ws.ant.WsGen in der Ant-Build-Umgebung, um das Tool "wsgen" aufzurufen. Damit diese Ant-Task richtig ausgeführt wird, müssen Sie Ant mit dem Script "ws_ant" aufrufen.

Vorgehensweise

  1. Suchen Sie die Klassendatei Ihrer Serviceendpunktimplementierung.
  2. Führen Sie den Befehl wsgen aus, um die portierbaren Artefakte zu generieren. Sie finden das Tool wsgen im Verzeichnis "Stammverzeichnis_des_Anwendungsservers/bin/".
    [Windows]
    Stammverzeichnis_des_Anwendungsservers\bin\wsgen.bat [Optionen] Serviceimplementierungsklasse
    [AIX][HP-UX][Linux][Solaris]
    Stammverzeichnis_des_Anwendungsservers/bin/ wsgen.sh [Optionen] Serviceimplementierungsklasse
    [IBM i]
    Stammverzeichnis_des_Anwendungsservers/bin/ wsgen [Optionen] Serviceimplementierungsklasse
    (Optional) Verwenden Sie die folgenden Optionen mit dem Befehl wsgen:
    • Verwenden Sie die Option -verbose, wenn eine der generierten Dateien zusammen mit zusätzlichen Informationsnachrichten ausgegeben werden soll.
    • Verwenden Sie die Option -keep , um die generierten Java-Dateien beizubehalten.
    • Verwenden Sie die Option -wsdl , um eine WSDL-Datei zu generieren. Wenn Sie eine Serviceimplementierungsbean entwickeln die über den HTTP-Transport aufgerufen wird, ist die in diesem Schritt vom Befehlszeilentool wsgen generierte WSDL-Datei optional. Wenn Sie eine Serviceimplementierungsbean entwickeln, die über den Transport "SOAP over JMS" aufgerufen wird, ist die vom Tool wsgen in diesem Schritt generierte WSDL-Datei in nachfolgenden Schritten der Entwicklung von JAX-WS-Anwendungen erforderlich.

    Lesen Sie die Dokumentation zum Tool wsgen, um mehr über diesen Befehl und die weiteren Optionen zu erfahren, die Sie angeben können.

Ergebnisse

Sie haben die erforderlichen Java-Artefakte für die Erstellung eines JAX-WS-Web-Service generiert.

Fehler vermeiden Fehler vermeiden: Der Befehl wsgen unterscheidet beim XML-Namespace nicht zwischen mehreren XMLType-Annotationen, für die derselbe @XMLType-Name in verschiedenen Java-Paketen definiert ist. Tritt dieser Fall ein, wird die folgende Fehlernachricht angezeigt:
Error: Two classes have the same XML type name ....
Use @XmlType.name and @XmlType.namespace to assign different names to them...
Diese Fehlernachricht zeigt an, dass Sie Klassen oder @XMLType.name-Werte mit demselben Namen haben, die sich jedoch in verschiedenen Java-Paketen befinden. Fügen Sie zur Vermeidung dieses Fehlers die Klasse "@XML.Type.namespace" zur vorhandenen Annotation "@XMLType" hinzu, um die Unterscheidung zwischen den XML-Typen zu ermöglichen. gotcha

Bei JAX-WS-Anwendungen ist das Befehlszeilentool wsgen möglicherweise nicht in der Lage, gemeinsam genutzte Klassendateien zu lokalisieren. Sie können die Position dieser Klassendateien mit der angepassten Eigenschaft com.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath angeben. Weitere Informationen finden Sie in der Dokumentation zu den angepassten Eigenschaften der Java Virtual Machine.

Beispiel

Das folgende Beispiel veranschaulicht, wie Sie mit dem Befehl wsgen die Implementierungsklasse des Serviceendpunkts verarbeiten, um JAX-WS-Artefakte zu generieren. In diesem Beispiel verwendet die Serviceimplementierungsklasse "EchoService" einen expliziten JavaBeans-Serviceendpunkt.
  1. Kopieren Sie die Beispielklassendatei EchoServicePortTypeImpl für die Serviceimplementierung und die zugehörige Klassendatei EchoServicePortType der Serviceschnittstelle in ein Verzeichnis. Das Verzeichnis muss eine Verzeichnisstruktur enthalten, die dem Paketnamen com.ibm.was.wssample.echo für die Klassendatei entspricht.
    /* Dies ist ein Beispiel für die Datei EchoServicePortTypeImpl.java.    */
    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;
    
    	}
    
    }	
    /* Dies ist ein Beispiel für die Datei EchoServicePortType.java.    */
    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. Führen Sie den Befehl wsgen im Verzeichnis "Stammverzeichnis_des_Anwendungsservers\bin\" aus. Die Option -cp gibt die Position der Klassendatei für die Serviceimplementierung an. Die Option -s gibt das Verzeichnis für die generierten Quellendateien an. Die Option -d gibt das Verzeichnis für die generierten Ausgabedateien an. Wenn Sie die Option -s oder -d verwenden, müssen Sie zuerst das Verzeichnis für die generierten Ausgabedateien erstellen.
    [Windows]
    Stammverzeichnis_des_Anwendungsservers\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]Führen Sie den Befehl wsgen aus. Beispiel:
    Stammverzeichnis_des_Anwendungsservers/bin/wsgen.sh -wsdl -s c:/generated_source/ -cp c:/my_application/classes/
    com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:/generated_artifacts/
Nach dem Generieren der Java-Artefakte mit dem Befehl wsgen werden die folgenden Dateien generiert:
/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

Die Dateien "EchoStringResponse.java" und "Invoke.java" sind die generierten Java-Klassendateien. Die kompilierten Versionen der generierten Java-Dateien sind "EchoStringResponse.class" und "Invoke.class". Die Dateien "EchoService.wsdl" und "EchoService_schema1.xsd" wurden generiert, weil die Option -wsdl angegeben wurde.

Nächste Schritte

Vervollständigen Sie die Implementierung Ihrer JAX-WS-Web-Service-Anwendung.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_devjaxwsartifactsbean
Dateiname:twbs_devjaxwsartifactsbean.html