Java-Artefakte für JAX-WS-Anwendungen aus einer WSDL-Datei generieren
Verwenden Sie JAX-WS zum Generieren der Java™-Artefakte, die Sie benötigen, um JAX-WS-Web-Services ausgehend von einer WSDL-Datei (Web Services Description Language) zu entwickeln.
Vorbereitende Schritte
Wenn Sie zum Entwickeln von JAX-WS-Web-Services (Java API for XML-Based Web Services) einen Top-down-Ansatz unter Verwendung einer WSDL-Datei verwenden (Web Services Description Language), müssen Sie den URL (Uniform Resource Locator) der WSDL-Datei kennen.
Wenn die WSDL-Datei eine lokale Datei ist, sieht der URL wie folgt aus:
file:Laufwerk:\Pfad\Dateiname.wsdl.
Wenn die WSDL-Datei
eine lokale Datei ist,
sieht der URL wie folgt aus: file:/Pfad/Dateiname.wsdl.
Lokale Dateien können Sie auch mit dem absoluten oder relativen Dateisystempfad angeben.
Informationen zu diesem Vorgang
- Serviceendpunktschnittstelle
- Serviceklasse
- Ausnahmeklasse, die über die Klasse wsdl:fault zugeordnet ist (sofern vorhanden)
- Generierte JAXB-Typwerte (Java Architecture for XML Binding), bei denen es sich um Java-Klassen handelt, die über XML-Schematypen zugeordnet werden


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.WsImport in der Ant-Build-Umgebung, um das Tool "wsimport" aufzurufen. Damit diese Ant-Task richtig ausgeführt wird, müssen Sie Ant mit dem Script "ws_ant" aufrufen.
Vorgehensweise
![[Windows]](../images/windows.gif)
Stammverzeichnis_des_Anwendungsservers\bin\wsimport.bat WSDL-URL
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
Stammverzeichnis_des_Anwendungsservers/bin/wsimport.sh WSDL-URL
![[IBM i]](../images/iseries.gif)
Stammverzeichnis_des_Anwendungsservers/bin/wsimport WSDL-URL
- Verwenden Sie die Option -verbose, um eine Liste der generierten Dateien anzuzeigen, wenn die Sie den Befehl ausführen.
- Verwenden Sie die Option -keep , um die generierten Java-Dateien beizubehalten.
- Verwenden Sie die Option -wsdlLocation, um die Position der WSDL-Datei anzugeben.
Bewährtes Verfahren: Um sicherzustellen, dass eine EAR-Datei für einen JAX-WS-Web-Service-Client erzeugt wird, die auf andere Systeme portierbar ist, empfiehlt es sich, das WSDL-Dokument in das Anwendungsmodul, z. B. eine JAR-Datei für den Web-Service-Client oder eine WAR-Datei, zu packen. Mit dem Annotationsattribut -wsdllocation können Sie einen relativen URI für die Position der WSDL-Datei angeben. Wenn sich Ihre Datei MyService.wsdl beispielsweise im Verzeichnis META-INF/wsdl/ befindet, führen Sie das Tool wsimport aus, und verwenden Sie die Option -wsdllocation, um den Wert anzugeben, der für die Position der WSDL-Datei verwendet werden soll. Auf diese Weise wird sichergestellt, dass die generierten Artefakte die richtigen -wsdllocation-Informationen haben, die erforderlich sind, wenn die Anwendung in die Administrationskonsole geladen wird;
bpracwsimport -keep -wsdllocation=META-INF/wsdl/MyService.wsdl
- Verwenden Sie die Option -b, wenn Sie WSDL- oder Schemaanpassungen verwenden, um externe Bindungsdateien
anzugeben, die Ihre Anpassungen enthalten.
Sie können die Bindungen in Ihrer WSDL-Datei anpassen, um asynchrone Zuordnungen oder Anhänge zu ermöglichen. Fügen Sie zum Generieren asynchroner Schnittstellen die Bindungsdeklaration enableAsyncMapping für clientseitige Anpassungen dem Element wsdl:definitions oder einer externen Bindungsdatei, die in der WSDL-Datei definiert ist, hinzu. Verwenden Sie die Bindungsdeklaration enableMIMEContent in Ihrer Client- oder Serverbindungsdatei, um die "mime:content"-Standardzuordnungsregeln zu aktivieren oder zu inaktivieren. Weitere Informationen zu angepassten Bindungsdeklarationen finden Sie in Kapitel 8 der JAX-WS-Spezifikation.
Lesen Sie die Dokumentation zum Befehl wsimport, um mehr über diesen Befehl und die zusätzlichen Optionen zu erfahren, die Sie angeben können.
Ergebnisse
Beispiel
- Kopieren Sie die folgende WSDL-Datei ping.wsdl in ein temporäres Verzeichnis.
<?xml version="1.0" encoding="UTF-8"?> <!-- * Dieses Programm darf für Entwicklungs-, Nutzungs-, Marketing- und * Vertriebszwecke gebührenfrei genutzt, ausgeführt, kopiert, geändert und * vertrieben werden. --> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="PingService" targetNamespace="http://com/ibm/was/wssample/sei/ping/"> <wsdl:types> <xsd:schema targetNamespace="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="pingStringInput"> <xsd:complexType> <xsd:sequence> <xsd:element name="pingInput" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="pingOperationRequest"> <wsdl:part element="tns:pingStringInput" name="parameter" /> </wsdl:message> <wsdl:portType name="PingServicePortType"> <wsdl:operation name="pingOperation"> <wsdl:input message="tns:pingOperationRequest" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="PingSOAP" type="tns:PingServicePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="pingOperation"> <soap:operation soapAction="pingOperation" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="PingService"> <wsdl:port binding="tns:PingSOAP" name="PingServicePort"> <soap:address location="http://localhost:9080/WSSampleSei/PingService" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
- Führen Sie den Befehl
wsimport im Verzeichnis Stammverzeichnis_des_Anwendungsservers\bin\
aus.
Stammverzeichnis_des_Anwendungsservers\bin\wsimport.bat -keep -verbose ping.wsdl
Betriebssysteme wie AIX oder Linux führen das Script im Prozesskontext der übergeordneten Shell aus, um die exportierten Variablen durch Ausführen des folgenden Befehls zu übernehmen:
im Verzeichnis . /Stammverzeichnis_des_Anwendungssservers>/bin. Führen Sie den folgenden Befehl wsimport aus:. ./setupCmdLine.sh (Beachten Sie das Leerzeichen zwischen den Punkten.)
Stammverzeichnis_des_Anwendungsservers/bin/wsimport.sh -keep -verbose ping.wsdl
Stammverzeichnis_des_Anwendungsservers/bin/wsimport -keep -verbose ping.wsdl
com\ibm\was\wssample\sei\ping\ObjectFactory.java
com\ibm\was\wssample\sei\ping\package-info.java
com\ibm\was\wssample\sei\ping\PingServicePortType.java
com\ibm\was\wssample\sei\ping\PingStringInput.java
com\ibm\was\wssample\sei\ping\PingService.java
Die Datei ObjectFactory.java enthält Factory-Methoden für jede Java-Content-Schnittstelle und Java-Element-Schnittstelle, die im zugehörigen Ping-Paket generiert wird. Die Datei package-info.java verwendet den Wert von targetNamespace und erstellt die Verzeichnisstruktur. Die Datei PingServicePortType.java ist die generierte SEI-Klasse (Service Endpoint Interface, Serviceendpunktschnittstelle), die die ping-Methodendefinition enthält. Die Datei PinStringInput.java enthält die von JAXB generierten Typwerte, bei denen es sich um Java-Klassen handelt, die über XML-Schematypen zugeordnet werden. Die Datei PingService.java ist die generierte Service-Provider-Klassendatei, die vom JAX-WS-Client verwendet wird.