web.xml ファイルには、モジュール内の Web コンポーネントの構造、および外部との依存関係に関する情報が含まれ、 実行時のコンポーネントの使用方法が記述されています。 Java API for XML-Based Web Services (JAX-WS) アプリケーションの場合、 web.xml ファイル内で URL パターンをカスタマイズできます。
デフォルトの URL パターンは、Web サービス実装クラスに含まれている @WebService.serviceName 属性によって定義されます。 サービス実装クラスに関連付けられている WSDL ファイルに単一ポート定義が含まれている場合は、 デフォルトの URL パターンの使用を選択することも、web.xml ファイル内の URL パターンをカスタマイズすることもできます。 サービス実装クラスに関連付けられている WSDL ファイルに同一サービス定義内の複数のポート定義が含まれている場合は、カスタマイズした URL パターンが必要です。 サービス実装クラスに複数のポート定義が含まれているときにデフォルトの URL パターンを使用すると、 複数のサービス実装クラスが同一の URL パターンにマップされ、エラー条件が発生します。 web.xml ファイルを編集し、サービス定義別に URL パターンをカスタマイズする必要があります。 各ポートは、Web サービス実装クラスとその独自のカスタム URL パターンにマップされます。 web.xml ファイルの URL パターンをカスタマイズすることにより、 URL パターン定義の競合を訂正します。
サービス実装クラス内の単一 WSDL ポート定義
次の例では、サービス実装クラスに関連付けられている WSDL ファイルに単一ポート定義が含まれている場合に、デフォルト URL パターンと、URL パターンをカスタマイズする方法について図示しています。
これは、サンプルの Web サービス実装クラスからの抜粋です。
package com.ibm.test; @WebService(serviceName="EchoService", portName="SOAP11EchoServicePort") public class EchoServiceSOAP11{
これは、EchoServiceSOAP11 Web サービス実装クラスに関連付けられている WSDL ファイル からの抜粋です。
<wsdl:service name="EchoService"> <wsdl:port name="SOAP11EchoServicePort" tns:binding="..." > ... </wsdl:port> </wsdl:service>JSR-109 によって規定されているように、 この例のデフォルト URL パターンは、@WebService.serviceName 属性を使用して 構成されています。ここで、デフォルト URL パターンは /EchoService です。
この例の URL パターンをカスタマイズする場合には、 web.xml ファイルを編集して、url-pattern エントリーを付与します。 この例では、カスタマイズ後の URL パターンは /EchoServiceSOAP11 になっています。
以下の抜粋は、サーブレットのセットアップを示すサンプル web.xml ファイルからのものです。
<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>
サービス実装クラス内の複数 WSDL ポート定義
次の例では、サービス実装クラスに関連付けられている WSDL ファイルに複数のポート定義が含まれている場合に必要な、URL パターンのカスタマイズについて図示しています。
以下の抜粋は、サンプルの Web サービス実装クラスからのものです。
package com.ibm.test; @WebService(serviceName="EchoService", portName="SOAP11EchoServicePort") public class EchoServiceSOAP11{ ... } package com.ibm.test; @WebService(serviceName="EchoService", portName="SOAP12EchoServicePort") public class EchoServiceSOAP12{ ... }
以下の抜粋は、EchoServiceSOAP11 Web サービス実装クラスに関連付けられている WSDL ファイル からのものです。 WSDL ファイル内の各ポートは、Web サービス実装クラスの portName にマップされます。
<wsdl:service name="EchoService"> <wsdl:port name="SOAP11EchoServicePort" tns:binding="..." > ... </wsdl:port> <wsdl:port name="SOAP12EchoServicePort" tns:binding="..." > ... </wsdl:port> </wsdl:service>
このシナリオでは、WSDL ファイル内に複数のポート定義があるので、 web.xml ファイルを編集することで URL パターンをカスタマイズする必要があります。 各サービスのカスタム URL パターンを指定します。
以下の抜粋は、サーブレットのセットアップを示すサンプル web.xml ファイルからのものです。
<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>