Hitachi

Cosminexus V11 アプリケーションサーバ Webサービス開発ガイド


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

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

〈この項の構成〉

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

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

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

ディレクトリ

備考

/

WEB-INF/

web.xml

3.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.xml

3.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は,次に示す条件を満たすように作成してください。

  • バージョン

    web.xmlのバージョンは,2.5以上にしてください。

  • リスナ

    web-app要素に,次に示すlistener要素を含めてください。

    <listener>
      <listener-class>
        com.cosminexus.xml.ws.transport.http.servlet.EJBWSServletContextListener
      </listener-class>
    </listener>
  • サーブレット

    web-app要素に,次に示すservlet要素を含めてください。

    <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>
    </servlet>
  • サーブレットマッピング

    web-app要素以下にservlet-mapping要素を記述し,Webサービス実装クラスと同じ数のurl-pattern要素を含めてください。

    servlet-mapping要素の記述例を次に示します。

    <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>

    url-pattern要素の「Webサービスnのサービス名」および「Webサービスnのクラス名」には,次の文字列を記述します。

    • 「Webサービスnのサービス名」

      Webサービス実装クラスのjavax.jws.WebServiceアノテーションのserviceName属性の値を記述します。serviceName属性が省略されている場合,Webサービス実装クラスのクラス名(単純名)にサフィックスとして"Service"を付けた文字列を記述します。

    • 「Webサービスnのクラス名」

      Webサービス実装クラスのjavax.jws.WebServiceアノテーションのname属性の値を記述します。name属性が省略されている場合,Webサービス実装クラスのクラス名(単純名)を記述します。

  • そのほかの要素

    任意に記述できます。WARファイルに作成したサーブレットなどを含める場合,適宜,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を含める場合,リスナ,サーブレット,サーブレットマッピング,およびそのほかの要素が不完全に含まれるとき,動作は保証されません。