12.2. webservices サブシステムの設定

JBoss Enterprise Application Platform 6 にデプロイされた Web サービスの振る舞いを制御する webservices サブシステムには、数多くの設定オプションを使用することができます。管理 CLI スクリプト (EAP_HOME/bin/jboss-cli.sh または EAP_HOME/bin/jboss-cli.bat) 内の各要素を変更するためのコマンドが提供されています。スタンドアローンサーバーには、/profile=default の部分は削除します。また、管理対象ドメイン上の異なるプロファイルには、この部分を修正してサブシステムを変更してください。
エンドポイントアドレスの公開

エンドポイントで公開している WSDL コントラクトの <soap:address> 要素を書き換えることができます。この機能は、各エンドポイントのクライアントに対してアドバタイズされたサーバーアドレスを制御するのに使用することができます。以下のオプション要素はそれぞれ、必要に応じて修正することができます。これらのいずれかの要素を修正した場合には、サーバーを再起動する必要があります。

表12.1 公開されるエンドポイントアドレスの設定要素

要素 説明 CLI コマンド
modify-wsdl-address
WSDL アドレスを常に変更するかどうかを設定します。true に指定した場合には、<soap:address> の内容は常に上書きされます。false に指定した場合には、<soap:address> の内容は URL が有効でない場合のみ上書きされます。使用する値は、wsdl-hostwsdl-port、および wsdl-secure-port で、以下に説明を記載しています。
/profile=default/subsystem=webservices/:write-attribute(name=modify-wsdl-address,value=true)
wsdl-host
<soap:address> を書き換える際に使用するホスト名 / IP アドレス。wsdl-host を文字列 jbossws.undefined.host に設定すると、<soap:address> 書き換えの際にリクエスターのホストが使用されます。
/profile=default/subsystem=webservices/:write-attribute(name=wsdl-host,value10.1.1.1)
wsdl-port SOAP アドレスの書き換えに使用される HTTP ポートを明示的に定義する整数。未定義の場合には、インストール済みの HTTP コネクターの一覧に対してクエリを実行することによってHTTP ポートが識別されます。
/profile=default/subsystem=webservices/:write-attribute(name=wsdl-port,value=8080)
wsdl-secure-port SOAP アドレスの書き換えに使用される HTTPS ポートを明示的に定義する整数。未定義の場合には、インストール済みの HTTPS コネクターの一覧に対してクエリを実行することによって HTTPS ポートが識別されます。
/profile=default/subsystem=webservices/:write-attribute(name=wsdl-secure-port,value=8443)
事前定義済みのエンドポイント設定

エンドポイントの実装が参照可能なエンドポイント設定を定義することができます。その用途の一つとして、@org.jboss.ws.api.annotation.EndpointConfig のアノテーションが付いた所定のエンドポイント設定でマークされた任意の WS エンドポイントに所定のハンドラーを追加することができます。

JBoss Enterprise Application Platform にはデフォルトの Standard-Endpoint-Config が含まれています。また、カスタム設定の例である Recording-Endpoint-Config も含まれています。これは、レコーディングハンドラーの例を提供します。Standard-Endpoint-Config は、どの設定とも関連付けされていないエンドポイントに自動的に使用されます。
管理 CLI を使用して Standard-Endpoint-Config を読み取るには、次のコマンドを実行します。
/profile=default/subsystem=webservices/endpoint-config=Standard-Endpoint-Config/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)
エンドポイントの設定

エンドポイントの設定は、管理 API では endpoint-config と呼ばれており、post-handler-chainpost-handler-chain および特定のエンドポイントに適用される一部のプロパティーが含まれます。endpoint config の読み取りには以下のコマンドを使用します。

例12.1 endpoint config の読み取り

/profile=default/subsystem=webservices/endpoint-config=Recording-Endpoint-Config:read-resource

例12.2 endpoint config の追加

/profile=default/subsystem=webservices/endpoint-config=My-Endpoint-Config:add
ハンドラーチェーン

各 endpoint config は PRE および POST ハンドラーチェーンと関連付けすることができます。各ハンドラーチェーンには、JAXWS に準拠したハンドラーを追加することが可能です。送信メッセージの場合は、@HandlerChain アノテーションなどの 標準的な JAXWS の方法を使用してエンドポイントに接続されるハンドラーよりも前に、PRE ハンドラーチェーンのハンドラーが実行されます。POST ハンドラーチェーンのハンドラーは、通常のエンドポイントハンドラーの後に実行されます。 受信メッセージの場合は、その逆が適用されます。JAX-WS は、XML ベース Web サービス向けの標準 API で、http://jcp.org/en/jsr/detail?id=224 に文書化されています。

ハンドラーチェーンには、チェーンの開始をトリガーするプロトコルを設定する protocol-binding 属性を追加することも可能です。

例12.3 ハンドラーチェーンの読み取り

/profile=default/subsystem=webservices/endpoint-config=Recording-Endpoint-Config/pre-handler-chain=recording-handlers:read-resource

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

/profile=default/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers:add(protocol-bindings="##SOAP11_HTTP")
ハンドラー

JAXWS ハンドラーは、ハンドラーチェーン内の子エレメント <handler> です。このハンドラは、ハンドラー暮らすの完全修飾クラス名である class 属性を取ります。エンドポイントがデプロイされる際には、参照するデプロイメントごとにそのクラスのインスタンスが作成されます。デプロイメントクラスローダーまたは org.jboss.as.webservices.server.integration モジュール用のクラスローダーのいずれかがハンドラークラスをロード可能である必要があります。

例12.5 ハンドラーの読み取り

/profile=default/subsystem=webservices/endpoint-config=Recording-Endpoint-Config/pre-handler-chain=recording-handlers/handler=RecordingHandler:read-resource

例12.6 ハンドラーの追加

/subsystem=webservices/endpoint-config=My-Endpoint-Config/post-handler-chain=my-handlers/handler=foo-handler:add(class="org.jboss.ws.common.invocation.RecordingServerHandler")
Web サービスについてのランタイム情報

Web コンテキストや WSDL URL などの Web サービスのランタイム情報は、エンドポイント自体にクエリを実行することによって表示することができます。* の文字を使用すると、全エンドポイントに対して一度にクエリを実行することができます。/deployment は管理 API のトップレベル要素である点に注意してください。

例12.7 全エンドポイントについてのランタイム情報の表示

/deployment="*"/subsystem=webservices/endpoint="*":read-resource
この出力の仮説例は以下のとおりです。
{
   "outcome" => "success",
   "result" => [{
       "address" => [
           ("deployment" => "jaxws-samples-handlerchain.war"),
           ("subsystem" => "webservices"),
           ("endpoint" => "jaxws-samples-handlerchain:TestService")
       ],
       "outcome" => "success",
       "result" => {
           "class" => "org.jboss.test.ws.jaxws.samples.handlerchain.EndpointImpl",
           "context" => "jaxws-samples-handlerchain",
           "name" => "TestService",
           "type" => "JAXWS_JSE",
           "wsdl-url" => "http://localhost:8080/jaxws-samples-handlerchain?wsdl"
       }
   }]
}