3.5.4 EJBのWebサービスの設定用WARファイルの作成

EJBのWebサービス呼び出し機能は,EARファイルに設定用WARファイルを含めない構成で利用できます。ただし,WARファイルの指定が必要なアプリケーションサーバの機能を利用するために,EARファイルに設定用WARファイルを含めることができます。ここでは設定用WARファイルについて説明します。

<この項の構成>
(1) EARファイルに設定用WARファイルを含めない場合
(2) EARファイルに設定用WARファイルを含める場合
(3) 設定用WARファイル名
(4) 設定用WARファイルのweb.xml

(1) EARファイルに設定用WARファイルを含めない場合

EARファイルにEJB JARファイルが含まれていて,さらにEJB JARファイルにEJBのWebサービス実装クラスが含まれるとき,JAX-WSエンジンは設定用WARファイルを含むと仮定して動作します。仮定される設定用WARファイルの構成を次の表に示します。

表3-3 仮定される設定用WARファイルの構成

ディレクトリ備考
/


WEB-INF/
web.xml3.5.4(4)を参照してください。
META-INF/
(凡例)
-:説明や補足事項が特にないことを示します。

(2) EARファイルに設定用WARファイルを含める場合

EJBのWebサービス実装クラスを呼び出す際に同時にサーブレットフィルタ機能を適用するなど,web.xmlに設定を加えたい場合,作成したweb.xmlを設定用WARファイルに格納し,EARファイルに含めます。設定用WARファイルの構成を次の表に示します。なお,設定用WARファイルには命名規則があります。設定用WARファイルのファイル名については,「3.5.4(3) 設定用WARファイル名」を参照してください。

表3-4 設定用WARファイルの構成

ディレクトリ備考
/










WEB-INF/


classes/コンパイルしたJavaクラスを格納します。フィルタを使用する場合は,フィルタのJavaクラスをこのディレクトリに格納します。


lib/コンパイルしたJavaクラスを含むJARファイルを格納します。フィルタを使用する場合は,フィルタのJavaクラスを含むJARファイルをこのディレクトリに格納します。
web.xml3.5.4(4)を参照してください。
META-INF/
(凡例)
-:説明や補足事項が特にないことを示します。
注※
設定用WARファイルのclassesにPOJOのWebサービスを含めないでください。POJOのWebサービスを含めた場合の動作は保証されません。

(3) 設定用WARファイル名

EARファイルに設定用WARファイルを含める場合,EJBのWebサービスの設定用WARファイル名は,J2EEサーバ用ユーザプロパティファイル(usrconf.properties)のwebserver.container.jaxws.webservice.wsee.warnameプロパティで指定したファイル名にする必要があります。

EARファイルに設定用WARファイルを含めない場合,webserver.container.jaxws.webservice.wsee.warnameプロパティで指定したファイル名の設定用WARファイルを含むと仮定して動作します。EARファイルに設定用WARファイルを含めない場合,メッセージがJ2EEサーバのログに出力されるので,JAX-WSエンジンが設定用WARファイルを含むと仮定したことを確認できます(KDJE42391-I)。このメッセージが出力されなかった場合は,プロパティで指定した設定用WARファイルがEARファイルに含まれることを確認できます。

なお,プロパティのデフォルト値は「CosminexusWSEE.war」です。

EJBのWebサービス呼び出しに対して,次に示す設定を使用できます。これらの設定を使用する場合は,設定用WARファイルをEARファイルに含めて,設定用WARファイル名を指定してください。

(4) 設定用WARファイルのweb.xml

ここではEJBのWebサービスの設定用WARファイルに含まれるweb.xmlについて説明します。

web.xmlを作成する場合,ファイル名称は"web.xml"とし,WARファイルを構成するWEB-INFディレクトリの直下に格納します。web.xmlの格納が必須かどうかは,J2EEサーバ用ユーザプロパティファイル(usrconf.properties)のwebserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値によって異なります。

次に,設定用WARファイルにweb.xmlを含めない場合の動作および設定用WARファイルにweb.xmlを含める場合の動作について説明します。

(a) 設定用WARファイルにweb.xmlを含めない場合

webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値に"strict",または"lax"を設定して,EJBのWebサービスの設定用WARファイルにweb.xmlを含めない場合,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.EJBWSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>EJB Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsEjbServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsEjbServlet</servlet-name>
   <url-pattern>"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名</url-pattern>
   <url-pattern>"/" + Webサービス2のサービス名+ "/" + Webサービス2のクラス名</url-pattern>
     :
   <url-pattern>"/" + Webサービスnのサービス名+ "/" + Webサービスnのクラス名</url-pattern>
 </servlet-mapping>
 <session-config>
   <session-timeout>60</session-timeout>
 </session-config>
</web-app>

url-pattern要素の「"/" + Webサービス1のサービス名+ "/" + Webサービス1のクラス名」は,Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性とname属性の値に,プレフィクスとして「/」(スラッシュ)を付けた文字列が定義されます。

設定用WARファイル内に格納したすべてのWebサービス実装クラスについて,url-pattern要素があるかのように動作します。

注意
  • JAX-WSエンジンが仮定したweb.xmlは,実際に設定用WARファイル内に生成されるわけではありません。Webサービスが呼び出される場合を除いて,すべてこの仮定はないものとして扱われます。
(例)
cjgetapppropコマンドで取得できる属性ファイルには,web.xmlに関する情報は含まれません。また,webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlを設定用WARファイルに含めた場合は,実際に含まれているweb.xmlに関する情報だけが取得できます。
  • webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"lax"を設定して不正な内容のweb.xmlを設定用WARファイルに含めた場合,JAX-WSエンジンがWebサービス呼び出し時に仮定するweb.xmlの内容が,実際のweb.xmlに記載されるわけではありません。
(b) 設定用WARファイルにweb.xmlを含める場合

webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティに"strict"を設定してweb.xmlをWARファイルに含める場合,または"none"を設定した場合,web.xmlは,次に示す条件を満たすように作成してください。

EJBのWebサービスの設定用WARファイルに含める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>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.EJBWSServletContextListener
   </listener-class>
 </listener>
 <servlet>
   <description>EJB Endpoint servlet for Cosminexus JAX-WS</description>
   <display-name>EJB_Endpoint_servlet_for_Cosminexus_JAX_WS</display-name>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <servlet-class>
     com.cosminexus.xml.ws.transport.http.servlet.EJBWSServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>CosminexusJaxwsServlet</servlet-name>
   <url-pattern>/AddNumbersImplService/AddNumbersImpl</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"にしてください。

この例では,Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値が「AddNumbersImplService」で,さらにname属性が「AddNumbersImpl」であることを想定しています。

webserver.container.jaxws.webservice.wsee.no_webxml.enabledプロパティの設定値に"lax"を設定し,設定用WARファイルにweb.xmlを含める場合,リスナ,サーブレット,サーブレットマッピング,およびそのほかの要素が不完全に含まれるとき,動作は保証されません。