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.
Vorbereitende Schritte
Informationen zu diesem Vorgang
- 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 innerhalb einer EAR-Datei gepackt ist, können Sie die URL-Muster mit dem Befehl endptEnabler anpassen.
Vorgehensweise
- 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.
- Zum Anpassen des URL-Musters für eine Serviceimplementierungsklasse editieren 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 Sie ein angepasstes URL-Muster verwenden möchten. Sie müssen den Wert <url-pattern> im Eintrag <servlet-mapping> definieren.
Ergebnisse
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> ----> URL-Muster definieren und auf die Serviceimplementierungsklasse verweisen
</servlet-mapping>
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.
Der folgende Auszug stammt 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>