URL-Muster in der Datei "web.xml" für JAX-WS-Anwendungen anpassen

Die Datei "web.xml" enthält Informationen zur Struktur und zu den externen Abhängigkeiten von Webkomponenten im Modul und beschreibt, wie die Komponenten zur Laufzeit verwendet werden. Für JAX-WS-Anwendungen (Java™ API for XML-Based Web Services) können Sie das URL-Muster in der Datei web.xml anpassen.

Vorbereitungen

Führen Sie die JavaBeans -Implementierung aus.

Informationen zu dieser Task

Wenn Sie eine JavaBeans-basierte JAX-WS-Anwendung als Web-Service packen, ist der Web-Service in einer WAR-Datei (Webarchiv) oder in einem WAR-Modul in einer EAR-Datei (Unternehmensarchiv) enthalten. Eine WAR-Datei, die für JAX-WS aktiviert ist, enthält die folgenden Komponenten:
  • eine Datei "WEB-INF/web.xml", die die Konfigurations- und Implementierungsinformationen für die Webkomponenten enthält, aus denen sich eine Webanwendung zusammensetzt,
  • annotierte Klassen, die die Web-Services implementieren, die im Anwendungsmodul enthalten sind, einschließlich der Implementierungsklasse des Serviceendpunkts,
  • JAXB-Klassen,
  • (optional) WSDL-Dokumente (Web Services Description Language), die die Web-Services beschreiben, die im Anwendungsmodul enthalten sind,
  • (optional) XML-Schemadatei,
  • (optional) Dienstprogrammklassen,
  • (optional) Web-Service-Clients.

Das URL-Standardmuster wird mit dem Attribut "@WebService.serviceName" definiert, das in der Web-Service-Implementierungsklasse enthalten ist. Wenn die WSDL-Datei, die der Serviceimplementierungsklasse zugeordnet ist, eine einzelne Portdefinition enthält, können Sie das URL-Standardmuster verwenden oder das URL-Muster in der Datei "web.xml" anpassen. Wenn die WSDL-Datei, die der Serviceimplementierungsklasse zugeordnet ist, mehrere Portdefinitionen in derselben Servicedefinition enthält, sind angepasste URL-Muster erforderlich. Wenn die Serviceimplementierungsklasse mehrere Portdefinitionen enthält und Sie das URL-Standardmuster verwenden, werden demselben URL-Muster mehrere Serviceimplementierungsklassen zugeordnet, was zu einer Fehlerbedingung führt. Sie müssen die Datei "web.xml" bearbeiten und die URL-Muster für jede Servicedefinition anpassen. Jeder Port ist einer Web-Service-Implementierungsklasse und einem eigenen angepassten URL-Muster zugeordnet. Durch Anpassung des URL-Musters in der Datei "web.xml" korrigieren Sie URL-Musterdefinitionen, die miteinander in Konflikt stehen.

Wenn Ihre JAX-WS-Anwendung in einer EJB-JAR-Datei (Enterprise JavaBeans ) in einer EAR-Datei gepackt ist, können Sie die URL-Muster mit dem Befehl endptEnabler anpassen.

Vorgehensweise

  1. Legen Sie fest, ob angepasste URL-Muster erforderlich oder gewünscht sind.
    Angepasste URL-Muster sind nur erforderlich, wenn die WSDL-Datei für Ihren JAX-WS-Web-Service mehrere Portdefinitionen in einem einzigen Service enthält. Andernfalls können Sie optional angepasste URL-Muster definieren.
  2. Zum Anpassen des URL-Musters für eine Serviceimplementierungsklasse bearbeiten Sie die Datei web.xml und geben Sie einen Eintrag < servlet> und einen entsprechenden Eintrag < servlet-mapping> für jede JAX-WS-Web-Service-Implementierungsklasse an, für die ein angepasstes URL-Muster verwendet werden soll.
    Sie müssen den Wert < url-muster> im Eintrag < servlet-mapping> definieren.

Ergebnisse

Sie haben eine Web-Service-fähige WAR-Datei mit angepassten URL-Mustern erstellt.

Einzelne WSDL-Portdefinition in einer Serviceimplementierungsklasse

Das folgende Beispiel zeigt das URL-Standardmuster und veranschaulicht, wie das URL-Muster angepasst wird, wenn die WSDL-Datei, die der Serviceimplementierungsklasse zugeordnet ist, eine einzelne Portdefinition enthält.

Dies ist ein Auszug aus einer Web-Service-Beispielimplementierungsklasse.

package com.ibm.test;
@WebService(serviceName="EchoService", portName="SOAP11EchoServicePort")
public class EchoServiceSOAP11{

Dies ist ein Auszug aus der WSDL-Datei, die der Web-Service-Implementierungsklasse "EchoServiceSOAP11" zugeordnet ist:

<wsdl:service name="EchoService">
	<wsdl:port name="SOAP11EchoServicePort" tns:binding="..." >
		...
	</wsdl:port>
</wsdl:service>

Gemäß Spezifikation JSR-109 wird das URL-Standardmuster in diesem Beispiel über das Attribut @WebService.serviceName erstellt, und das URL-Standardmuster ist /EchoService.

Wenn Sie das URL-Muster für dieses Beispiel anpassen möchten, editieren Sie die Datei "web.xml" und fügen Sie den Eintrag url-pattern hinzu. In diesem Beispiel heißt das angepasste URL-Muster jetzt /EchoServiceSOAP11.

Der folgende Auszug stammt aus einer Beispieldatei "web.xml", die die Konfiguration eines Servlets veranschaulicht:

<servlet id="...">
	<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
	<servlet-class>com.ibm.test.EchoServiceSOAP11</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
	<url-pattern>/EchoServiceSOAP11</url-pattern> ---->  Defining the URL pattern and 
pointing it to the service implementation class.
</servlet-mapping>

Mehrere WSDL-Portdefinitionen in einer Serviceimplementierungsklasse

Im folgenden Beispiel werden die erforderlichen Anpassungen beschrieben, die am URL-Muster vorgenommen werden müssen, wenn die WSDL-Datei, die der Serviceimplementierung zugeordnet ist, mehrere Portdefinitionen enthält. Dies ist ein Auszug aus einer Beispielimplementierungsklasse für Web-Services:

package com.ibm.test;
@WebService(serviceName="EchoService", portName="SOAP11EchoServicePort")
public class EchoServiceSOAP11{
	...
}
package com.ibm.test;
@WebService(serviceName="EchoService", portName="SOAP12EchoServicePort")
public class EchoServiceSOAP12{
	...
}

Der folgende Auszug stammt aus der WSDL-Datei, die der Web-Service-Implementierungsklasse "EchoServiceSOAP11" stammt. Jeder Port in der WSDL-Datei wird einem Element "portName" in der Web-Service-Implementierungsklasse zugeordnet.

<wsdl:service name="EchoService">
	<wsdl:port name="SOAP11EchoServicePort" tns:binding="..." >
		...
	</wsdl:port>
	<wsdl:port name="SOAP12EchoServicePort" tns:binding="..." >
		...
	</wsdl:port>
</wsdl:service>

Weil die WSDL-Datei in diesem Szenario mehrere Portdefinitionen enthält, müssen Sie das URL-Muster durch Editieren der Datei "web.xml" anpassen. Geben Sie angepasste URL-Muster für jeden Service an.

Der folgende Auszug stammt aus einer Beispieldatei "web.xml", die die Konfiguration eines Servlets veranschaulicht:

<servlet id="...">
	<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
	<servlet-class>com.ibm.test.EchoServiceSOAP11</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>com.ibm.test.EchoServiceSOAP11</servlet-name>
	<url-pattern>/EchoServiceSOAP11</url-pattern>
</servlet-mapping>

<servlet id="...">
	<servlet-name>com.ibm.test.EchoServiceSOAP12</servlet-name>
	<servlet-class>com.ibm.test.EchoServiceSOAP12</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>com.ibm.test.EchoServiceSOAP12</servlet-name>
	<url-pattern>/EchoServiceSOAP12</url-pattern>
</servlet-mapping>

Nächste Schritte

Assemblieren Sie eine WAR-Datei, die für Web-Services aus Java-Code aktiviert ist.