3.4. Web Services サブシステムの設定

JBossWS コンポーネントは Web サービスエンドポイントの処理を処理し、webservices サブシステムを介して JBoss EAP に提供されます。サブシステムは、パブリッシュされたエンドポイントアドレスおよびエンドポイントハンドラーチェーンの設定をサポートします。

デフォルトの webservices サブシステムはサーバーのドメインおよびスタンドアロン設定ファイルで提供されます。これには、事前定義されたエンドポイントおよびクライアント設定が複数含まれます。

<subsystem xmlns="urn:jboss:domain:webservices:2.0">
  <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
  <endpoint-config name="Standard-Endpoint-Config"/>
  <endpoint-config name="Recording-Endpoint-Config">
    <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
      <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
    </pre-handler-chain>
  </endpoint-config>
  <client-config name="Standard-Client-Config"/>
</subsystem>

3.4.1. エンドポイント設定

JBossWS では、追加の設定データを事前定義し、エンドポイント実装に関連付けることができます。事前定義されたエンドポイント設定は JAX-WS クライアントおよび JAX-WS エンドポイントの設定に使用できます。エンドポイント設定には JAX-WS ハンドラーとキー/値のプロパティー宣言を含めることができます。この機能は、ハンドラーを Web サービスのエンドポイントに追加し、JBossWS および Apache CXF 内部を制御する key/value プロパティーを設定する便利な方法を提供します。

webservices サブシステムを使用すると、エンドポイント設定データの名前付きセットを定義できます。各エンドポイント設定にはサブシステム内で一意な名前を付ける必要があります。その後、org.jboss.ws.api.annotation.EndpointConfig アノテーションを使用して、デプロイされたプリケーションの JAX-WS 実装にエンドポイント設定を割り当てることができます。エンドポイント設定の割り当ての詳細は、Assigning a Configuration を参照してください。

デフォルトの JBoss EAP 設定には、事前定義されたエンドポイント設定があります。

  • Standard-Endpoint-Config は、明示的に割り当てられたエンドポイント設定のないエンドポイントに使用されるエンドポイント設定です。
  • Recording-Endpoint-Config は、録画ハンドラーを含むカスタムエンドポイント設定の例になります。
エンドポイント設定の追加

管理 CLI を使用して新しいエンドポイント設定を追加できます。

/subsystem=webservices/endpoint-config=My-Endpoint-Config:add
エンドポイント設定の設定

管理 CLI を使用してエンドポイント設定の key/value プロパティー宣言を追加できます。

/subsystem=webservices/endpoint-config=Standard-Endpoint-Config/property=PROPERTY_NAME:add(value=PROPERTY_VALUE)

これらのエンドポイント設定の handler chains および handlers を設定できます。

エンドポイント設定の削除

管理 CLI を使用してエンドポイント設定を削除できます。

/subsystem=webservices/endpoint-config=My-Endpoint-Config:remove

3.4.2. ハンドラーチェーン

各エンドポイント設定は PRE または POST ハンドラーチェーンに関連付けることができます。各ハンドラーチェーンには JAX-WS 準拠のハンドラーが含まれ、メッセージに対して追加の処理を実行できます。アウトバウンドメッセージの場合、PRE ハンドラーチェーンハンドラーは、@HandlerChain アノテーションなどの標準の JAX-WS を使用してエンドポイントにアタッチされたハンドラーの前に実行されます。POST ハンドラーチェーンハンドラーは、通常のエンドポイントハンドラーの後に実行されます。受信メッセージには、逆が適用されます。

サーバーアウトバウンドメッセージ

Endpoint --> PRE Handlers --> Endpoint Handlers --> POST Handlers --> ... --> Client

サーバーインバウンドメッセージ

Client --> ... --> POST Handlers --> Endpoint Handlers --> PRE Handlers --> Endpoint

ハンドラーチェーンの追加

以下の管理 CLI コマンドを使用すると、POST ハンドラーチェーンをエンドポイント設定に追加できます。

/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-post-handler-chain:add

以下の管理 CLI コマンドを使用すると、PRE ハンドラーチェーンをエンドポイント設定に追加できます。

/subsystem=webservices/endpoint-config=My-Endpoint-Config/pre-handler-chain=my-pre-handler-chain:add
ハンドラーチェーンの設定

protocol-bindings 属性を使用して、ハンドラーチェーンの開始をトリガーするプロトコルを設定します。

/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-post-handler-chain:write-attribute(name=protocol-bindings,value=##SOAP11_HTTP)

ハンドラーチェーンのハンドラーの設定に関する詳細は、ハンドラー のセクションを参照してください。

ハンドラーチェーンの削除

管理 CLI を使用してハンドラーチェーンを削除できます。

/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-post-handler-chain:remove

3.4.3. ハンドラー

JAX-WS ハンドラーがハンドラーチェーンに追加され、ハンドラークラスの完全修飾名を指定します。エンドポイントがデプロイされると、参照デプロイメントごとにそのクラスのインスタンスが作成されます。org.jboss.as.webservices.server.integration モジュールのデプロイメントクラスローダーまたはクラスローダーのいずれかがハンドラークラスをロードできる必要があります。

利用可能なハンドラーの一覧は、Handler Java ドキュメントを参照してください。

ハンドラーの追加

以下の管理 CLI コマンドを使用するとハンドラーをハンドラーチェーンに追加できます。ハンドラーのクラス名を指定する必要があります。

/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-post-handler-chain/handler=my-handler:add(class="com.arjuna.webservices11.wsarj.handler.InstanceIdentifierInHandler")
ハンドラーの設定

管理 CLI を使用してハンドラーのクラスを更新できます。

/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-post-handler-chain/handler=my-handler:add(class="org.jboss.ws.common.invocation.RecordingServerHandler")
ハンドラーの削除

管理 CLI を使用してハンドラーを削除できます。

/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-post-handler-chain/handler=my-handler:

3.4.4. 公開されたエンドポイントアドレス

WSDL コントラクトで公開されるエンドポイントの <soap:address> 要素の書き換えがサポートされます。この機能は、各エンドポイントのクライアントに公開されるサーバーアドレスを制御するのに役立ちます。

以下の表は、この機能に設定できる属性を表しています。

名前説明

modify-wsdl-address

このブール値は、アドレスのリライト機能を有効化・無効化します。

modify-wsdl-addresstrue に設定され、<soap:address> の内容が有効な URL の場合、JBossWS は wsdl-host および wsdl-port または wsdl-secure-port の値を使用して URL を再書き込みします。

modify-wsdl-addressfalse に設定され、<soap:address> の内容が有効な URL の場合、JBossWS は URL を再書き込みしません。<soap:address> URL が使用されます。

<soap:address> の内容が有効な URL ではない場合、JBossWS は modify-wsdl-address の設定に関係なく書き直します。modify-wsdl-addresstrue に設定され、wsdl-host が定義されていないか、jbossws.undefined.host に明示的に設定されている場合、<soap:address> URL の内容が使用されます。JBossWS は <soap:address> の書き換え時にリクエスターのホストを使用します。

modify-wsdl-address が定義されていない場合、JBossWS はデフォルト値の true を使用します。

wsdl-host

<soap:address> の書き換えに使用するホスト名または IP アドレス。wsdl-hostjbossws.undefined.host に設定されている場合、JBossWS は <soap:address> の書き換え時にリクエスターのホストを使用します。wsdl-host が定義されていない場合、JBossWS はデフォルト値の jbossws.undefined.host を使用します。

wsdl-path-rewrite-rule

この文字列は、サーバーから公開される各 <soap:address> URL のパスコンポーネントに対して JBossWS が実行される s/regexp/replacement/g などの SED の代コマンドを定義します。wsdl-path-rewrite-rule が定義されていない場合、JBossWS は各 <soap:address> URL の元のパスコンポーネントを保持します。Modify-ogg-addressfalse に設定されている場合、この要素は無視されます。

wsdl-port

SOAP アドレスの書き換えに使用される HTTP ポートを明示的に定義するには、このプロパティーを設定します。それ以外の場合は、インストールされた HTTP コネクターのリストをクエリーして HTTP ポートを特定します。

wsdl-secure-port

SOAP アドレスの書き換えに使用される HTTPS ポートを明示的に定義するには、このプロパティーを設定します。そうでない場合は、インストールされた HTTPS コネクターのリストをクエリーして HTTPS ポートを特定します。

wsdl-uri-scheme

このプロパティーは、<soap:address> の書き換えに使用する URI スキームを明示的に設定します 。有効な値は http および https です。この設定により、トランスポート保証が指定されている場合でも、エンドポイントの処理によって計算されたスキームが上書きされます。wsdl-port および wsdl-secure-port の指定の値、またはそのデフォルト値は、指定されたスキームによって異なります。

管理 CLI を使用してこれらの属性を更新できます。例を以下に示します。

/subsystem=webservices:write-attribute(name=wsdl-uri-scheme, value=https)

3.4.5. ランタイム情報の表示

各 Web サービスエンドポイントは、エンドポイント実装を提供するデプロイメントで公開されます。各エンドポイントはデプロイメントリソースとしてクエリーできます。各 Web サービスのエンドポイントは、Web コンテキストと WSDL URL を指定します。管理 CLI または管理コンソールを使用してこのランタイム情報にアクセスできます。

以下の管理 CLI コマンドは、jaxws-samples-handlerchain.war デプロイメントからの TestService エンドポイントの詳細を表示します。

/deployment="jaxws-samples-handlerchain.war"/subsystem=webservices/endpoint="jaxws-samples-handlerchain:TestService":read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "average-processing-time" => 23L,
        "class" => "org.jboss.test.ws.jaxws.samples.handlerchain.EndpointImpl",
        "context" => "jaxws-samples-handlerchain",
        "fault-count" => 0L,
        "max-processing-time" => 23L,
        "min-processing-time" => 23L,
        "name" => "TestService",
        "request-count" => 1L,
        "response-count" => 1L,
        "total-processing-time" => 23L,
        "type" => "JAXWS_JSE",
        "wsdl-url" => "http://localhost:8080/jaxws-samples-handlerchain?wsdl"
    }
}
注記

read-resource 操作で include-runtime=true フラグを使用すると、ランタイム統計が返されます。ただし、Web サービスエンドポイントの統計収集はデフォルトで無効にされています。以下の管理 CLI コマンドを使用すると、Web サービスエンドポイントの統計を有効にできます。

/subsystem=webservices:write-attribute(name=statistics-enabled,value=true)

管理コンソールの Runtime タブから、Web サービスエンドポイントのランタイム情報を表示することもできます。そのためには、該当するサーバーを選択し、Webservices を選択してエンドポイントを選択します。