3.4 web.xmlの作成
ここでは,POJOのWebサービスで使用するWARファイルに含まれるweb.xmlについて説明します。
web.xmlを作成する場合,ファイル名称は"web.xml"とし,WARファイルを構成するWEB-INFディレクトリの直下に格納します。web.xmlの格納が必須かどうかは,J2EEサーバ用ユーザプロパティファイル(usrconf.properties)のwebserver.container.jaxws.webservice.no_webxml.enabledプロパティの設定値によって異なります。
- "strict"または"true"(推奨は"strict")を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合,Webサービスの実行に必要な定義が記述されていなければなりません。
- "lax"を設定した場合
WEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納するかどうかは任意です。格納する場合,Webサービスの実行に必要な定義が記述されていなくてもかまいません。
- "none"または"false"(推奨は"none")を設定した場合
必ずWEB-INFディレクトリの直下に"web.xml"という名称でweb.xmlを格納してください。
次に,Webサービスの実行に必要な定義,web.xmlの例,およびweb.xmlをWARファイルに含めない場合の動作について説明します。
- <この節の構成>
- (1) Webサービスの実行に必要な定義
- (2) web.xmlの例
- (3) web.xmlをWARファイルに含めない場合の動作
(1) Webサービスの実行に必要な定義
webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"strict"を設定してweb.xmlをWARファイルに含める場合,または"none"を設定した場合,web.xmlは,次に示す条件を満たすように作成してください。
- バージョン
web.xmlのバージョンは,2.5以上にしてください。
- リスナ
web-app要素に,次に示すlistener要素を含めてください。
<listener>
<listener-class>
com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener> |
- サーブレット
web-app要素に,次に示すservlet要素を含めてください。
<servlet>
<description>Endpoint servlet for Cosminexus JAX-WS</description>
<display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
<servlet-name>CosminexusJaxwsServlet</servlet-name>
<servlet-class>
com.cosminexus.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet> |
- サーブレットマッピング
web-app要素以下にservlet-mapping要素を記述し,Webサービス実装クラスまたはプロバイダ実装クラスと同じ数のurl-pattern要素を含めてください。
servlet-mapping要素の記述例を次に示します。
<servlet-mapping>
<servlet-name>CosminexusJaxwsServlet</servlet-name>
<url-pattern>" / "+Webサービス1のサービス名</url-pattern>
<url-pattern>" / "+Webサービス2のサービス名</url-pattern>
:
<url-pattern>" / "+Webサービスnのサービス名</url-pattern>
</servlet-mapping> |
url-pattern要素の「" / "+Webサービス1のサービス名」は,次の値にプレフィクスとして「/」(スラッシュ)を付けた文字列を記述します。
- Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値
- プロバイダ実装クラスのjavax.xml.ws.WebServiceProviderアノテーションのserviceName属性の値
- 参考
- WARファイルにcosminexus-jaxws.xmlを含める場合
- cosminexus-jaxws.xmlのWebサービス実装クラス,またはプロバイダ実装クラスに対応するendpoint要素のurl-pattern属性の値を記述してください。cosminexus-jaxws.xmlについては,「10.3 cosminexus-jaxws.xmlによるカスタマイズ」を参照してください。
- そのほかの要素
任意に記述できます。WARファイルに作成したサーブレット,リスナ,JSPなどを含める場合,適宜,web.xmlに定義してください。
(2) web.xmlの例
web.xmlの例を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<description>Sample web service "fromwsdl"</description>
<display-name>Sample_web_service_fromwsdl</display-name>
<listener>
<listener-class>
com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<description>Endpoint servlet for Cosminexus JAX-WS</description>
<display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
<servlet-name>CosminexusJaxwsServlet</servlet-name>
<servlet-class>
com.cosminexus.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CosminexusJaxwsServlet</servlet-name>
<url-pattern>/TestJaxWsService</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app> |
バージョン2.5のweb.xmlを作成する場合は,web-app要素のversion属性を"2.5"に,xsd:schemaLocation属性の二つ目のロケーション情報を"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"にしてください。
この例では,次の属性の値が「TestJaxWsService」であることを想定しています。
- Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性
- プロバイダ実装クラスのjavax.xml.ws.WebServiceProviderアノテーションのserviceName属性
このとき,url-pattern要素の値は「/」(スラッシュ)を付けて「/TestJaxWsService」と記述します。
- 参考
- WARファイルにcosminexus-jaxws.xmlを含める場合
- Webサービス実装クラスまたはプロバイダ実装クラスに対応するendpoint要素のurl-pattern属性の値が「/TestJaxWsService」であれば,例と同じように記述します。
(3) web.xmlをWARファイルに含めない場合の動作
Application ServerのJAX-WS機能では,webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"strict",または"lax"を設定してweb.xmlをWARファイルに含めない場合,Webサービス呼び出し時に次に示す内容のweb.xmlがあるものとして処理されます。
<?xml version="1.0" encoding="UTF-8"?>
<!-- web-app要素を記述する -->
<description>Cosminexus JAX-WS Default web.xml</description>
<display-name>Cosminexus_JAX_WS_Default_web_xml</display-name>
<listener>
<listener-class>
com.cosminexus.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<description>Endpoint servlet for Cosminexus JAX-WS</description>
<display-name>Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
<servlet-name>CosminexusJaxwsServlet</servlet-name>
<servlet-class>
com.cosminexus.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CosminexusJaxwsServlet</servlet-name>
<url-pattern>"/"+Webサービス1のサービス名</url-pattern>
<url-pattern>"/"+Webサービス2のサービス名</url-pattern>
:
<url-pattern>"/"+Webサービスnのサービス名</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app> |
url-pattern要素の「" / "+Webサービス1のサービス名」は,次の属性の値に,プレフィクスとして「/」(スラッシュ)を付けた文字列が定義されます。
- Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値
- プロバイダ実装クラスのjavax.xml.ws.WebServiceProviderアノテーションのserviceName属性の値
WARファイル内に格納したすべてのWebサービス実装クラスまたはプロバイダ実装クラスについて,url-pattern要素があるかのように動作します。
webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定してweb.xmlをWARファイルに含める場合でも,「3.4(1) Webサービスの実行に必要な定義」の内容が正しくweb.xmlに記述されていないときは,web.xmlが含まれない場合と同様に,上記に示す内容のweb.xmlがあるものと仮定してWebサービスを呼び出します。なお,このとき仮定されるweb.xmlは,上記の内容からsession-config要素以下を除いた内容です。
- 注意
- JAX-WSエンジンが仮定したweb.xmlは,実際にWARファイル内に生成されるわけではありません。Webサービスが呼び出される場合を除いて,すべてこの仮定はないものとして扱われます。
- (例)
- cjgetapppropコマンドで取得できる属性ファイルには,web.xmlに関する情報は含まれません。また,webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlをWARファイルに含めた場合は,実際に含まれているweb.xmlに関する情報だけが取得できます。
- webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlをWARファイルに含めた場合,JAX-WSエンジンがWebサービス呼び出し時に仮定するweb.xmlの内容が,実際のweb.xmlに記載されるわけではありません。
- webserver.container.jaxws.webservice.no_webxml.enabledプロパティに"lax"を設定する場合,「3.4(1) Webサービスの実行に必要な定義」の内容をすべて定義したweb.xmlをWARファイルに含めてください。一部だけを定義したweb.xmlをWARファイルに含めた場合の動作は保証されません。