2.9. バインディングコンポーネントの定義

2.9.1. SOAPバインディング

SOAP BC は、WebサービスクライアントからSOAPメッセージを受け取る機能、および外部Webサービスを呼び出す機能を提供します。
SOAP BC動作概要


図2.9.1-1

2.9.1.1. サービスユニットのファイル構成

SOAP BCのサービスユニットのフォルダ構成は下図の通りです。


図2.9.1.1-1

SOAP BCのサービスユニットに含まれるファイルについて以下に説明します。
SOAP BCのSUのファイル
表2.9.1.1-1
項目
説明
/META-INF/schema
メッセージ検証用スキーマを格納するフォルダです。
/META-INF/jbi.xml
サービスユニットの配備記述子です。
endpoints.xml
SOAP BCのエンドポイントの設定が記述されます。
*.su
サービスユニットの管理ファイルです(編集不可)。

2.9.1.2. エンドポイントの設定

SUエディタを使用してSOAP BCの基本的な設定をする方法を説明します。


図2.9.1.2-1

Memo
 エンドポイントを追加する方法については、 2.7.1. エンドポイントの追加 をご覧下さい。

基本設定項目
表2.9.1.2-1
設定項目
説明

エンドポイント一覧
SUで定義されたエンドポイントの一覧を表示します。
 
基本設定
エンドポイントロール
WebサービスクライアントからSOAPメッセージを受け取る場合(Inbound)はコンシューマを設定します。
   外部Webサービスを呼び出す場合(Outbound)はプロバイダを設定します。
プロバイダ、コンシューマから選択 [必須]
サービス名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するサービス名を指定します。
   エンドポイントロールがコンシューマの場合、呼び出し先となるエンドポイントのサービス名を指定します。
QName(名前空間、ローカル名) [必須]
インタフェース名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するインタフェース名を設定します。
   コンシューマの場合、呼び出し先となるエンドポイントのインタフェース名を指定します。
QName(名前空間、ローカル名)[必須]
ESBインスタンス名
分散ESB機能を使用する場合にのみESBインスタンス名を指定します。 その他の場合は空欄にします。
文字(A-Z、a-z)、数字(0-9)、ハイフン(-)、点(.)、下線(_)の組み合わせ [任意]
オペレーション一覧
オペレーションを設定します。
 
メッセージエクスチェンジハンドラ
メッセージエクスチェンジハンドラを設定します。
 
共通設定
共通項目(セキュリティ認証、トランザクション、メッセージ送信優先度、エラーリトライ)を設定します。
 
オプション一覧
オプションを設定します。
 

Memo
 エンドポイントロールコンシューマにした場合、動作には別途Inboundサーブレットを配備する必要があります。詳細は[2.9.1.14. Inboundサーブレット]をご参照ください。  エンドポイントロールプロバイダにした場合、サービス名とエンドポイント名の設定が他のプロバイダと重複しないようにしてください。

SOAPに関する設定項目
表2.9.1.2-2
設定項目
説明

SOAP BCの設定
外部Webサービスの
   エンドポイントURL
外部のWebサービスのエンドポイントURLを設定します。 【マルチバイト文字列指定可】
文字列(URL)[必須]
   ※プロバイダの場合のみ
外部に公開する
   エンドポイントURL
WebサービスクライアントがアクセスするためのURLを設定します。 【マルチバイト文字列指定可】
文字列(URL)[必須]
   ※コンシューマの場合のみ
他のコンシューマの設定と重複しないようにしてください。
SOAPバージョン
SOAPバージョンを指定します。
1.1、1.2から選択[任意]
   デフォルトは"1.1"
MTOMメッセージの
   Content-Typeヘッダ
MTOMメッセージのContent-Typeヘッダを指定します。
   多くの場合はMultipart/Relatedを指定することを推奨します。Axis2などを利用したWebサービスを呼び出すには、multipart/relatedを指定する必要があります。
Multipart/Related、multipart/relatedから選択[任意]
   デフォルトは"Multipart/Related"
XOPタグの削除
XOPタグを削除するかを指定します。MTOM同士の通信を行う時はtrueに設定してください。
None、In、Out、Bothから選択[任意]
   デフォルトは"None"
XML処理のタイプ
SOAP BC内部のXML処理方式を選択します。
基本的にSAXは高速かつ低メモリで処理が可能ですが、場合によってDOMの方が高速になることがあります。
また、SOAPバージョン1.2の場合、SOAPメッセージハンドラを使用する場合、受信したSOAPメッセージのSOAP Header内に1つ以上の要素がある場合、および、受信したSOAPメッセージに添付ファイルが存在する場合は、XML処理のタイプの設定に関係なくDOMで処理を行います。
SAX、DOMから選択[任意]
   デフォルトは"SAX"
圧縮して送受信する
Gzipの形式でリクエストやレスポンスを送受信するかを設定します。
下記の値から選択。[任意]
  • request
  • response
  • both
  • none
デフォルト値:none
   ※プロバイダの場合のみ
Expect-Continueハンドシェイクを行う
エンドポイント単位でプロバイダがexpect-continue handshakeをサポートするかどうかを指定します。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:false
   ※プロバイダの場合のみ
コネクションを再利用する
コネクションを再利用するかどうかを指定します。
下記の値から選択。[必須]
  • true
  • false
  • 自動
デフォルト値:自動
   ※プロバイダの場合のみ
コネクション再利用時に状態をチェックする
コネクション再利用時にそのコネクションが有効であるかをチェックするかどうかを指定できます。
   [コネクションを再利用するにtrueを選択した場合のみ設定可能]
下記の値から選択。[任意]
  • true
  • false
デフォルト値:true
   ※プロバイダの場合のみ
タイムアウト
Keep-Aliveの有効時間。0の場合、Long.MAX_VALUEミリ秒とします。
   [コネクションを再利用するにtrueを選択した場合のみ設定可能]
数値(0〜9223372036854775)[任意]
単位:秒
デフォルト値:0
   ※プロバイダの場合のみ
TCP_NODELAYを有効にする
TCP_NODALAYソケットオプションを有効にするかどうかを指定します。
下記の値から選択。[任意]
  • true
  • false
デフォルト値:true
   ※プロバイダの場合のみ
送受信バッファサイズ
Socketのメッセージ送受信bufferサイズを指定します。
数値(0〜2147483647)[任意]
単位:バイト
デフォルト値:1024
   ※プロバイダの場合のみ
接続タイムアウト
外部サーバへ接続を確立する際のタイムアウト時間を指定します。0の場合、タイムアウト時間は無制限です。
数値(0〜2147483)[任意]
単位:秒
デフォルト値:0
   ※プロバイダの場合のみ
読み取りタイムアウト
外部サーバのレスポンスを読み取りタイムアウト時間を指定します。0の場合、タイムアウト時間は無制限です。
数値(0〜2147483)[任意]
単位:秒
デフォルト値:0
   ※プロバイダの場合のみ

Memo
 外部に公開するエンドポイントURLのコンテキストルートは、Inbound用に配備するServletのコンテキストルートと一致する必要があります。詳細は[2.9.1.14. Inboundサーブレット]をご参照ください。

Memo
CORBA BC,RMI BC,JDBC BCと接続する場合に、DOMの方が高速になります。

Memo
XOPは、XML文書とバイナリデータをそのまま通信パケットにまとめる標準的な手段を提供しており、MTOMはXOPの機能を利用してSOAPメッセージを処理する仕様です。MTOM/XOPをSOAP 1.2とともに使用すると、大きなバイナリデータを転送する標準的な手法が利用可能となります。

※ 妥当性チェックを行うため、問題がある項目名が赤色となり、正しく修正すると、項目名が黒くなります。 詳細は、2.8. 妥当性チェック を参照してください。
※ コンシューマでエンドポイントロールを指定する場合、参照をクリックすると、SU-エンドポイント一覧 ダイアログが表示されます。このダイアログを利用して、カレントサービスアセンブリプロジェクトに存在しているサービスユニットに関するサービス名やインタフェース名などの情報を再利用できます。


図2.9.1.2-2

2.9.1.3. オペレーション設定

 オペレーション一覧追加をクリックし、オペレーションを追加します。
 SUエディタにおける参照をクリックして、SU-エンドポイント一覧ダイアログからサービスユニットとエンドポイントを指定する場合、オペレーション一覧にそれらの指定情報が表示されます。オペレーションリストから、1つのオペレーションを選択してオペレーション設定情報を再利用できます。


図2.9.1.3-1

オペレーションの設定項目
表2.9.1.3-1
項目
説明

オペレーション名
エンドポイントロールがプロバイダの場合、エンドポイントが提供するオペレーション名を指定します。
   エンドポイントロールがコンシューマの場合、呼び出し先となるエンドポイントのオペレーション名を指定します。
QName(名前空間、ローカル名) [必須]
メッセージ交換方式
使用するメッセージ交換方式を指定します。
   コンシューマの場合、プロバイダの提供するメッセージ交換方式を指定してください。
in-only、 in-out、robust-in-only から選択 [必須]
スキーマファイル インプット/アウトプット 対象SUフォルダのMETA-INFフォルダのschemaフォルダ配下にあるスキーマファイルの相対パスを指定します。
指定したスキーマファイルは、後述のインプット検証/アウトプット検証を選択することで実行時のメッセージ検証に利用することができます。
選択しなかった場合も、XSLT SE による変換の定義の際のインプット/アウトプットスキーマとして利用することができます。    [メッセージ交換方式を指定した場合のみ設定可能]
参照
(インプット/アウトプット)
スキーマファイルの選択ダイアログを開きます。
スキーマファイルを選択すると、その相対パスがインプットおよびアウトプットのファイルのテキストボックスに表示されます。
利用方法については、[2.7.7. スキーマファイルの設定] を参照して下さい。
 
検証実行 インプットの検証実行 実行時に、インプットで指定したスキーマファイルでのメッセージの検証を実施します。
   選択時には、スキーマファイルのインプットの指定は必須項目となります。
   [メッセージ交換方式を指定した場合のみ設定可能]
デフォルトは非選択 [任意]
アウトプットの検証実行 実行時に、アウトプットで指定したスキーマファイルでのメッセージの検証を実施します。
   選択時には、スキーマファイルのアウトプットの指定は必須項目となります。
   [メッセージ交換方式を指定した場合のみ設定可能]
デフォルトは非選択 [任意]
SOAP Action
エンドポイントロールがプロバイダの場合、SOAPActionを指定します。空でよい場合、空欄のままで構いません。
文字列(URI)[任意]
受信方向の名前空間URI
受信方向の名前空間のURIを指定します。
   エンドポイントロールがコンシューマで、unwrapped documentを受信する場合に受け付けるSOAPメッセージのSOAPBody直下の子要素の名前空間を設定します。
   エンドポイントロールがプロバイダの場合は利用しません。
文字列(URI)[任意]
送信方向の名前空間URI
送信方向の名前空間のURIを指定します。
   エンドポイントロールがコンシューマで、返信するメッセージのBodyがない場合に一番目の子要素の名前空間を設定します。
   エンドポイントロールがプロバイダの場合は利用しません。
文字列(URI)[任意]
unwrapped Documentの要素受信方向の要素名
unwrapped documentを受信する場合の受信方向の要素名を指定します。受信を許可するSOAP Body直下の子要素名を設定してください。
文字列[任意]
※コンシューマの場合のみ
SOAPボディ要素操作 SOAPボディへ組み込む機能用、この要素により流れてきたメッセージに関連要素を挿入・削除します。 下記を選択します。[任意]
  • no-wrap
  • replace
  • insert
デフォルト値:no-wrap
※プロバイダの場合のみ
SOAPボディへ組み込む名前空間URI SOAPボディへ組み込む機能用、SOAPボディへ組み込む名前空間URIです。 文字列(URI)[任意]
※プロバイダの場合のみ
SOAPボディへ組み込む要素名 SOAPボディへ組み込む機能用、SOAPボディへ組み込む要素名です。 任意の文字列[必須]
※プロバイダの場合のみ
クッキーを転送する 外部へ/からメッセージを送受信するとき、クッキーを伝播するかどうかを指定します。
HTTP BC或いはSalesforce BCとの組み合わせで使用可能です。
下記から選択します。[任意]
  • true
  • false
デフォルト値:false
Chunkedで送受信する chunkedで送信するかどうかを指定します。 下記を選択します。[任意] デフォルト値は自動です。
  • true
  • false
  • 自動
クエリ文字列を転送する コンシューマから受け取ったQuery StringをアクセスするURLに付与するかどうかを指定します。
クライアントから受信する時、あれば、必ずノーマライズします。
HTTP BC或いはSalesforce BCとの組み合わせで使用可能です。
下記を選択します。[任意]
  • true
  • false
デフォルト値:false
※プロバイダの場合のみ
相対パスの利用を有効にする コンシューマから受け取った相対パスをアクセスするURLに付与するかどうかを指定します。
クライアントから受信する時、あれば、必ずノーマライズします。
HTTP BC或いはSalesforce BCとの組み合わせで使用可能です。
下記を選択します。[任意]
  • true
  • false
デフォルト値:false
※プロバイダの場合のみ

Memo
unwrapped Documentの要素受信方向の要素名を設定しない場合、オペレーション名はSOAPメッセージのBody要素の子要素の名前と一致する必要があります。

2.9.1.4. セキュリティ認証の設定

セキュリティ認証を ON にし、設定 をクリックすると、セキュリティ認証詳細設定ダイアログが表示されます。


図2.9.1.4-1

表2.9.1.4-1
項目
説明

エンドポイント名のURL表記
エンドポイントをURL表記した値。リソース管理に用いられます。
http://webotxesb/<BC名>/エンドポイント名
省略した場合、ESB内部で自動生成されます。
エンドポイントの認証の設定
OFFにした場合はエンドポイントの認証を行いません。
 
エンドポイントのID
認証に利用するIDを設定します。
文字列[必須]
パスワード
認証に利用するパスワードを設定します。パスワードは暗号化とします。
文字列[任意]
ログインモジュールの設定を行う
ログインモジュールの設定を行います。
任意の文字列[任意]
  • ESBSECUREMASTERRealm
  • ESBDefaultCustomRealm
デフォルト値:ESBSECUREMASTERRealm
エンドポイントの認可の設定
OFFにした場合はエンドポイントの認可を行いません。
 
認可に用いる認証情報
認可に利用する認証情報を設定します。
コンシューマの場合
  • client
  • consumer
プロバイダの場合
  • client
  • consumer
  • provider
Principalの識別子
Principalの識別子を設定します。
任意の文字列[任意]
認証情報を伝播する
クライアント側の認証情報の伝播の設定です。OFFにした場合は、伝播を行いません。
コンシューマのみ
Basic認証(Principalの識別子: basic)
basicのみをサポートします。
basic。このチェックボックスをチェックすると、id属性=basic [必須]
認証済情報を伝播する
認証済情報の伝播の設定です。OFFにした場合は、伝播を行いません。
コンシューマのみ
Basic認証(Principalの識別子: basic)
basicをサポートします。
basic。このチェックボックスをチェックすると、id属性=basic [必須]
ESBセキュリティ基盤によるクライアント認証
(Principalの識別子: esb)
esbをサポートします。
esb。このチェックボックスをチェックすると、id属性=esb [必須]
SSL 認証(Principalの識別子: ssl)
sslをサポートします。
ssl このチェックボックスをチェックすると、id属性=ssl [必須]
ESBセキュリティ基盤によるクライアント認証
クライアント認証を設定します。
コンシューマのみ
参照するクライアントの認証情報
必要に応じて許容する値を変更します。
basic [必須]
ログインモジュールの設定を行う
ログインモジュールの設定を行います。
任意の文字列[任意]
  • ESBSECUREMASTERRealm
  • ESBDefaultCustomRealm
デフォルト値:ESBSECUREMASTERRealm
外部サービスの認証
OFFにした場合は認証を行いません。
プロバイダのみ

外部サービスの認証を ON にし、設定 をクリックすると、外部サービスの認証ダイアログが表示されます。


図2.9.1.4-2

表2.9.1.4-2
項目
説明

Basic 認証の設定
外部サービスまでのbasic認証を使用します。
 
クライアントから受信した認証ヘッダを使う
client InboundでノーマライズされたHTTPヘッダを使用する InboundでノーマライズされたHTTPヘッダを使用します。
true。この要素が選択される時、固定値とはtrueです。
その他設定
その他を設定します。
 
Digest 認証の設定
外部サービスまでのdigest認証を使用します。
 
クライアントから受信した認証ヘッダを使う
client InboundでノーマライズされたHTTPヘッダを使用する InboundでノーマライズされたHTTPヘッダを使用します。
true。この要素が選択される時、固定値とはtrueです。
Realm名
「digest」に「credential」あるいは「ep-password」あるいは[principal]を選択する時、このelementが設定できます。
任意の文字列[任意]。デフォルト値:hoge.com
OAuth認証の設定
OAuth認証の設定を行います。
 
Realm名
「digest」に「credential」あるいは「ep-password」あるいは[principal]を選択する時、このelementが設定できます。
任意の文字列[任意]。デフォルト値:hoge.com
設定したConsumer情報のみを用いて
アクセストークンを取得する
Consumer情報の設定を用いることを示します。
 
伝播されたアクセストークンのみを利用する
MEプロパティに伝播されたOAuthのアクセストークンを用いることを示します。
 
設定したConsumer情報と伝播された
アクセストークンの両方を利用する
(伝播されたアクセストークン優先)
Consumer情報の設定と伝播されたOAuthアクセストークンの両方を用いることを示します。
 
Access token URL
OAuthアクセストークン要求先のリクエストURLを設定します。
文字列(URI)[必須]
Consumer Key
ConsumerとSP間で交換されたConsumerを識別するIDです。
任意の文字列[必須]
Consumer Secret
ConsumerとSP間で交換されたConsumer Secretの値です。
任意の文字列[任意]。暗号化します。
秘密鍵名
署名を行う際の秘密鍵の名前です。
任意の文字列[任意]。
秘密鍵パスワード
署名を行う際の秘密鍵のパスワードです。
任意の文字列[任意]。暗号化します。
署名方法
リクエストに対して署名する方法を設定します。
選択肢:[必須]
  • HMAC-SHA1
  • RSA-SHA1
  • PLAINTEXT
デフォルト値:HMAC-SHA1
認証情報を選択する
認証情報を選択します。
 
アクセストークンを伝播する
MEプロパティにアクセストークンを含むOAuthPrincipalを伝播するかどうかを選択します。
選択肢:[必須]
  • true
  • false
デフォルト値:false
アクセストークンをキャッシュする
アクセストークンを含むOAuthPrincipalをエンドポイントに保持するかどうかを選択します。
選択肢:[必須]
  • true
  • false
デフォルト値:true
アクセストークンの最大キャッシュ数
アクセストークンをエンドポイントに保持する場合の最大キャッシュ数です。
数値(0〜2147483647)[必須]
デフォルト値:1000

設定 をクリックすると、認証情報設定ダイアログが表示されます。


図2.9.1.4-3

表2.9.1.4-3
項目
説明

外部サービス用認証情報を設定する
外部サービス用認証情報を設定します。
 
ユーザID
認証に利用するidを設定します。
文字列[必須]
パスワード
認証に利用するパスワードを設定します。
文字列[必須]、暗号化します。
エンドポイント用認証情報を利用する
エンドポイント用認証情報を利用します。
true
クライアントの認証情報を利用する
クライアントの認証情報を利用します。
 
Principalの識別子
Principalの識別子を設定します。
任意の文字列[任意]

2.9.1.5. トランザクションの設定

[2.7.2. トランザクションの設定] を参照して下さい。

2.9.1.6. メッセージ送信優先度の設定

[2.7.3. メッセージ送信優先度の設定] を参照して下さい。

2.9.1.7. エラーリトライの設定

[2.7.4. エラーリトライの設定] を参照して下さい。

2.9.1.8. オプション一覧の設定

[2.7.5. オプション一覧の設定] を参照して下さい。
SOAP BCにおいて設定できるオプション一覧は下記の通りです。
表2.9.1.8-1
項目
説明

MaxRequestCount
エンドポイント単位で同時処理できる最大リクエスト数を設定します。
0にした場合は無制限となります。この設定はコンシューマでのみ有効です。
0-214748
ExceedRequestTimeout
同時処理できる最大リクエスト数を超えた場合の最大待ち時間を設定します(秒)。
この設定はconsumerでのみ有効です。
-1-214748
AUTHORIZE_SKIP
エラーリトライ時に認証処理をスキップするか否かを指定します。
true/false

2.9.1.9. メッセージエクスチェンジハンドラの設定

[2.7.6. メッセージハンドラの設定] を参照して下さい。

Memo
メッセージエクスチェンジハンドラと、SOAPメッセージハンドラ・トランスポートハンドラは別のものです。メッセージエクスチェンジハンドラの場合はSUエディタを編集すると自動的にendpoints.xmlが編集されますが、SOAPメッセージハンドラとトランスポートハンドラは手動でendpoints.xmlを編集する必要があります。(詳細は2.9.1.15.SOAPメッセージハンドラの実装と設定2.9.1.16.トランスポートハンドラの実装と設定 を参照してください。)

2.9.1.10. メッセージ交換方式(MEP)とHTTPステータスコード/コンテントタイプ

Outbound
JBI コンポーネントにおけるMEPの設定は、本来、 NMR とのメッセージ交換モデルを設定するためのものですが、外部のWebサービスとのメッセージ交換においても、連動して同じMEPが適用されなければ意味がありません。WebOTX ESBのSOAP BCクライアント機能では、設定されたMEP、外部WebサービスからのレスポンスにおけるHTTPレスポンスコードとコンテントタイプという3つの条件によって、外部Webサービスからのレスポンス処理方法が変化します。
SOAP BC OutboundのMEPと動作の対応
表2.9.1.10-1
MEP
タイプ
動作の説明
In-Only
要求
NMR から受け付けたメッセージエクスチェンジに格納されたInメッセージをSOAPリクエストに変換して、エンドポイントで定義された外部Webサービスに送信し、WebサービスからのErrorかdoneに相当するレスポンスメッセージを待ち合わせます。
応答(done)
Webサービスからdoneを示すHTTPレスポンス(※)を受信すると、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200/202/204
応答(Error)
SOAPリクエストの送信に失敗したときにErrorとなります。WebサービスからErrorを示すレスポンスメッセージ(※)を受信すると、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
   ※doneを示すHTTPレスポンス以外のもの
Robust-In-Only
要求
NMR から受け付けたメッセージエクスチェンジに格納されたInメッセージをSOAPリクエストに変換して、エンドポイントで定義された外部Webサービスに送信し、WebサービスからのFaultかErrorかdoneに相当するレスポンスメッセージを待ち合わせます。
応答(Fault)
WebサービスからFaultを示すレスポンスメッセージ(※)を受信すると、変換したFaultデータを格納したメッセージエクスチェンジを NMR に返却します。この後、 NMR からDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
応答(done)
Webサービスからdoneを示すレスポンスメッセージ(※)を受信すると、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200/202/204
応答(Error)
SOAPリクエストの送信に失敗したときにErrorとなります。WebサービスからErrorを示すレスポンスメッセージ(※)を受信すると、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
   ※Fault/doneを示すHTTPレスポンス以外のもの
In-Out
要求
NMR から受け付けたメッセージエクスチェンジに格納されたInメッセージをSOAPリクエストに変換して、エンドポイントで定義された外部Webサービスに送信し、WebサービスからのoutかFaultかErrorに相当するレスポンスメッセージを待ち合わせます。
応答(out)
Webサービスからoutを示すレスポンスメッセージ(※)を受信すると、変換したoutデータを格納したメッセージエクスチェンジを NMR に返却します。この後、 NMR からDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      200
   ・コンテントタイプ
      text/xml
応答(Fault)
WebサービスからFaultを示すレスポンスメッセージ(※)を受信すると、変換したFaultデータを格納したメッセージエクスチェンジを NMR に返却します。この後、 NMR からDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
応答(Error)
SOAPリクエストの送信に失敗したときにErrorとなります。WebサービスからErrorを示すレスポンスメッセージ(※)を受信すると、例外メッセージを格納したメッセージエクスチェンジを NMR に返却します。
   ※out/doneを示すHTTPレスポンス以外のもの
In-Optional-Out
--
(SOAP BCでは対応しません)
Inbound
WebOTX ESBのSOAPサーバ機能では、JBIコンポーネントとしてのメッセージ交換方式(MEP)の設定が、外部に公開するWebサービスとしてのメッセージ交換方式に連動し、外部SOAPクライアントへのレスポンス処理方法が変化します。
SOAP BC InboundのMEPと動作の対応
表2.9.1.10-2
MEP
タイプ
動作の説明
In-Only
要求
エンドポイントで定義されたURLからSOAPリクエストを受信すると、変換したInメッセージを格納したメッセージエクスチェンジを NMR に送信し、 NMR からのERRORかDONEステータスが設定されたメッセージエクスチェンジを待ち受けます。
SOAPクライアントから送信してきたSOAPリクエストのチェックに失敗した場合、NMRへメッセージを転送しなくて、エラーを示すHTTPレスポンス(※)をSOAPクライアントに返します。
   ※異常系メッセージ(Fault/Error)のSOAP BCのエラーコード一覧を参照
応答(done)
NMR からDONEステータスが設定されたメッセージエクスチェンジを受信すると、SOAPクライアントへdoneを示すレスポンスメッセージ(※)を返信します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      202
応答(error)
NMR からERRORステータスが設定されたメッセージエクスチェンジを受信すると、SOAPクライアントへdoneを示すレスポンスメッセージ(※)を返信します。
   ※doneを示すレスポンスメッセージの情報
   ・HTTPステータス
      202
Robust-In-Only
要求
エンドポイントで定義されたURLからSOAPリクエストを受信すると、変換したInメッセージを格納したメッセージエクスチェンジを NMR に送信し、 NMR からのFault/Error/doneのメッセージエクスチェンジを待ち受けます。
SOAPクライアントから送信してきたSOAPリクエストのチェックに失敗した場合、NMRへメッセージを転送しなくて、エラーを示すHTTPレスポンス(※)をSOAPクライアントに返します。
   ※異常系メッセージ(Fault/Error)のSOAP BCのエラーコード一覧を参照
応答(Fault)
NMR から受け付けたメッセージエクスチェンジに格納されたFaultデータをSOAP Faultレスポンスメッセージ(※)に変換して、SOAPクライアントに送信し、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。
   ※SOAP Faultレスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
   ・SOAP Fault Code
      OutboundがSOAP BCの場合:メッセージエクスチェンジに格納されたFaultデータのFault Code
      OutboundがSOAP BCではない場合:Receiver(SOAPバージョンが1.2の場合)/Server(SOAPバージョンが1.1の場合)
   ・SOAP Fault String
      OutboundがSOAP BCの場合:メッセージエクスチェンジに格納されたFaultデータのFault String
      OutboundがSOAP BCではない場合:メッセージエクスチェンジに格納されたFaultデータのerrorString
応答(done)
NMR からdoneのメッセージエクスチェンジを受信すると、done相当のSOAPレスポンスメッセージ(※)をSOAPクライアントに送信します。
   ※レスポンスメッセージの情報
   ・HTTPステータス
      202
応答(error)
NMR からerrorのメッセージエクスチェンジを受信すると、error相当のSOAP Faultレスポンスメッセージ(※)をSOAPクライアントに送信します。
   ※SOAP Faultレスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
   ・SOAP Fault Code
      Receiver(SOAPバージョンが1.2の場合)/Server(SOAPバージョンが1.1の場合)
   ・SOAP Fault String
      メッセージエクスチェンジのErrorの例外メッセージ
In-Out
要求
エンドポイントで定義されたURLからSOAPリクエストを受信すると、変換したInメッセージを格納したメッセージエクスチェンジを NMR に送信し、 NMR からのout/Fault/Errorのメッセージエクスチェンジを待ち受けます。
SOAPクライアントから送信してきたSOAPリクエストのチェックに失敗した場合、NMRへメッセージを転送しなくて、エラーを示すHTTPレスポンス(※)をSOAPクライアントに返します。
   ※異常系メッセージ(Fault/Error)のSOAP BCのエラーコード一覧を参照
応答(out)
NMR から受け付けたメッセージエクスチェンジに格納されたoutデータをSOAPレスポンスメッセージ(※)に変換して、SOAPクライアントに送信し、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。
   ※SOAPレスポンスメッセージの情報
   ・HTTPステータス
      200
   ・コンテントタイプ
      text/xml
応答(Fault)
NMR から受け付けたメッセージエクスチェンジに格納されたFaultデータをSOAP Faultレスポンスメッセージ(※)に変換して、SOAPクライアントに送信し、DONEステータスを設定したメッセージエクスチェンジを NMR に返却します。
   ※SOAP Faultレスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
   ・SOAP Fault Code
      OutboundがSOAP BCの場合:メッセージエクスチェンジに格納されたFaultデータのFault Code
      OutboundがSOAP BCではない場合:Receiver(SOAPバージョンが1.2の場合)/Server(SOAPバージョンが1.1の場合)
   ・SOAP Fault String
      OutboundがSOAP BCの場合:メッセージエクスチェンジに格納されたFaultデータのFault String
      OutboundがSOAP BCではない場合:メッセージエクスチェンジに格納されたFaultデータのerrorString
応答(Error)
NMR からerrorのメッセージエクスチェンジを受信すると、error相当のSOAP Faultレスポンスメッセージ(※)をSOAPクライアントに送信します。
   ※SOAP Faultレスポンスメッセージの情報
   ・HTTPステータス
      500
   ・コンテントタイプ
      text/xml
   ・SOAP Fault Code
      Receiver(SOAPバージョンが1.2の場合)/Server(SOAPバージョンが1.1の場合)
   ・SOAP Fault String
      メッセージエクスチェンジのErrorの例外メッセージ
In-Optional-Out
  (SOAP BCでは対応しません)
その他のHTTPステータスコード(4xxなど)については、SOAP BCがメッセージ交換方式(MEP)と対応させて使用することはありません。

Memo
Robust In-Onlyの場合のステータスコードがV8.21より200から202に変更されました。

2.9.1.11. ノーマライズ規則

Outbound
NMR から受け取ったメッセージエクスチェンジを外部Webサービスに送信するリクエストSOAPメッセージに変換することをデノーマライズと言います。また、外部Webサービスから受信したレスポンスSOAPメッセージを NMR に送信するメッセージエクスチェンジに変換することをノーマライズと言います。
デノーマライズ規則


図2.9.1.11-1

デノーマライズの規則は上図のようになっています。ノーマライズメッセージにSOAPヘッダを示すキーがあった場合、その値をSOAPヘッダに挿入します。また、メッセージコンテントはSOAPボディに、添付ファイルはSOAP Attachments パートにそのまま挿入されます。
メッセージエクスチェンジのエラーがあった場合、外部Webサービスへのリクエストは送出されません。その場合、SOAP BCによってFaultメッセージが生成され、その内容を含むメッセージエクスチェンジが NMR に返されます。
ノーマライズ規則


図2.9.1.11-2

ノーマライズ規則は上図のようになっています。SOAPヘッダの内容は、ノーマライズメッセージのプロパティに既定のキーの値として挿入されます。SOAPボディの内容はメッセージコンテントに、SOAP Attachments パートの内容はそのまま添付ファイルとなります。また、HTTPヘッダに入っているHTTPステータスは、JBIのステータスに変換され、メッセージエクスチェンジのステータスにセットされます。
外部のWebサービスからSOAP Faultが返ってきた場合、Detailの内容がFaultメッセージのメッセージコンテントにセットされます。
Inbound
ノーマライズ規則


図2.9.1.11-3

ノーマライズ規則は上図のようになっています。SOAPヘッダの内容は、ノーマライズメッセージのプロパティに既定のキーの値として挿入されます。SOAPボディの内容はメッセージコンテントに、SOAP Attachments パートの内容はそのまま添付ファイルとなります。
デノーマライズ規則


図2.9.1.11-4

デノーマライズの規則は上図のようになっています。メッセージエクスチェンジのステータスは、HTTPのステータスに変換されます。また、メッセージエクスチェンジのエラーがあった場合、SOAP BCによってSOAP Faultが生成され、その内容をSOAPボディに挿入します。そのとき、SOAP FaultのFault CodeはSOAPバージョンにより判断され「Receiver」または「Server」がセットされ、Fault Stringにはエラーメッセージがセットされます。ただし、ステータス4xxになる場合にはSOAPメッセージを持つ必要はないので、SOAPボディへの挿入は行われません。
ノーマライズメッセージにSOAPヘッダを示すキーがあった場合、その値をSOAPヘッダに挿入します。また、メッセージコンテントはSOAPボディに、添付ファイルはSOAP Attachments パートにそのまま挿入されます。
Faultメッセージがあった場合、SOAP BCによってSOAP Faultが生成され、その内容をSOAPボディに挿入します。そのとき、SOAP FaultのFault CodeはSOAPバージョンにより判断され「Receiver」または「Server」がセットされ、Fault Stringには既定のメッセージがセットされます。また、メッセージコンテントの内容がSOAP FaultのDetailにセットされます。

2.9.1.12. ノーマライズメッセージ

ここではSOAP BCが NMR と送受信するノーマライズメッセージの説明をします。
ノーマライズ (SOAPメッセージからノーマライズメッセージへの変換)では、メッセージペイロード(*)をノーマライズメッセージへ格納します。
       SOAPメッセージ
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding">
  <SOAP-ENV:Header />
  <SOAP-ENV:Body>
    <ns0:operation xmlns:ns0="http://com.nec.webotx">
      <ns0:param0>abc</ns0:param0>
      <ns0:param1>100</ns0:param1>
    </ns0:operation>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<?xml version="1.0" encoding="UTF-8"?>
<ns0:operation xmlns:ns0="http://com.nec.webotx">
  <ns0:param0>abc</ns0:param0>
  <ns0:param1>100</ns0:param1>
</ns0:operation>
デノーマライズ (ノーマライズメッセージからSOAPメッセージへの変換)では、ノーマライズメッセージをメッセージペイロード(*)とし、SOAPメッセージを構築します。
       ノーマライズメッセージ
<?xml version="1.0" encoding="UTF-8"?>
<ns0:operation xmlns:ns0="http://com.nec.webotx">
  <ns0:param0>abc</ns0:param0>
  <ns0:param1>100</ns0:param1>
</ns0:operation>

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Header />
  <SOAP-ENV:Body>
    <ns0:operation xmlns:ns0="http://com.nec.webotx">
      <ns0:param0>abc</ns0:param0>
      <ns0:param1>100</ns0:param1>
    </ns0:operation>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
     注: 上記はインデントを整形しており、実際とは異なります。
メッセージペイロード(*)のルート要素の要素名(図の太文字の箇所)は、SOAP BCで設定するオペレーション名と一致している必要があります。また、JAX-RPCおよびJAX-WSをESBを経由して利用する場合は、メッセージペイロード(*)のルート要素の要素名(図の太文字の箇所)を、JAVAインタフェースのメソッド名またはWSDLのpart要素のname属性と一致する必要があります。
SOAP BCへ送信するSOAPメッセージはWS-I Basic Profileに準拠していることを推奨します。

2.9.1.13. 異常系メッセージ

WebOTX ESBにおいて「SOAP BCに誤ったメッセージが入力された」、「サービス呼び出しに失敗した」等の異常が発生した場合、SOAP BCのInboundからクライアントアプリケーションにSOAP Faultメッセージが返却されます。 クライアントアプリケーションでは返却されたSOAP Faultメッセージから発生した異常の内容を知ることができます。 以下では、発生する異常の種類ごとのSOAP BCのInboundからクライアントアプリケーションに返却するメッセージを説明します。

異常の種類により Fault または Error の分類があります。 SOAP BCにおいて異常が発生するパターンの一覧です。 [ リファレンス集 開発編(Enterprise Service Bus) > 2. 異常系メッセージ(Fault/Error) > 2.1. バインディングコンポーネント > 2.1.1. SOAP BC ]

プロバイダエンドポイントがFaultを返却した場合(SOAP BC同士の連携時)

SOAP BCのプロバイダエンドポイントが SOAP Fault を受け取ると、 SOAP BCのInboundにはFaultが通知され、 クライアントアプリケーションにはプロバイダエンドポイントが受け取った SOAP Fault がそのまま通知されます。

プロバイダエンドポイントがFaultを返却した場合(SOAP BC以外との連携時)

SOAP BC以外のプロバイダエンドポイントから Fault を受け取った場合、 SOAP BCのInboundでSOAP Fault形式のメッセージを生成し、クライアントアプリケーションに返信します。 UserProcessor SEから "User Fault" というメッセージの Fault メッセージが通知された例です。

500 Internal Server Error

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
      <soap:Fault>
        <faultcode>soap:Server</faultcode>
        <faultstring>User Fault</faultstring>
      </soap:Fault>
    </soap:Body>
</soap:Envelope>

プロバイダエンドポイントがErrorを返却した場合(SOAP 1.1)

SOAP BCのプロバイダエンドポイントが外部Webサーバから404を受け取った場合の例です。 コンシューマエンドポイントに Error が通知され、クライアントアプリケーションへ以下の電文が返信されます。

500 Internal Server Error

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
      <soap:Fault>
        <faultcode>soap:Server</faultcode>
        <faultstring>
          javax.jbi.JBIException: 外部WebサービスからSOAPメッセージ以外の
          レスポンスメッセージを受け取りました。レスポンスコードは 404 です。
        </faultstring>
      </soap:Fault>
    </soap:Body>
</soap:Envelope>

プロバイダエンドポイントがErrorを返却した場合(SOAP 1.2)

UserProcessor SEがプロセッサのインスタンスの生成に失敗した場合の例です。 「SOAPバージョン」を 1.2 にした場合、SOAP Fault形式も SOAP 1.2 に準拠した形式となります。

500 Internal Server Error

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soap:Body>
    <soap:Fault>
      <soap:Code>
        <soap:Value>soap:Receiver</soap:Value>
      </soap:Code>
      <soap:Reason>
        <soap:Text xml:lang="ja-JP">
          javax.jbi.JBIException: プロセサオブジェクトの生成時か、初期化時に異常が発生しました。
        </soap:Text>
      </soap:Reason>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

「同時処理最大リクエスト数」を超えてタイムアウトした場合

SOAP BCのコンシューマに設定する「同時処理最大リクエスト数」を超えてタイムアウトした場合の例です。 SOAP BCとしてメッセージを受理できていないためメッセージ内容はHTML形式の文書です。

503 Service Unavailable

<html><head><title>WebOTX 8.XX.XX.XX - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2
{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY
{font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P
{font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 503 - </h1><HR
size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The requested service () is not currently available.</u></p><HR size="1"
noshade="noshade"><h3>WebOTX 8.XX.XX.XX</h3></body></html>

2.9.1.14. Inboundサーブレット

エンドポイントロールをコンシューマに設定した場合、外部からのリクエストを受け付けてSOAP BCへの橋渡しを行うためのサーブレット(以下 Inboundサーブレット)をWebコンテナに配備する必要があります。
「Inbound Servletを自動で配備する」がONの場合は自動的に配備が行われますが、OFFにした場合は手動でInboundサーブレットを配備する必要があります。アドバンスドモードの場合、InboundサーブレットをESBが動作するプロセスグループに配備してください。
配備方法については、 [ Application Server > ドメイン構築・基本設定ガイド > 5. アプリケーション > 5.4. 配備、再配備と置換 > 5.4.3. Java EEのアプリケーションの配備/再配備 ] を参照してください。
WARファイルの配備
はじめに、WebOTX ESBにインストールされているInboundサーブレット(<WebOTX_DIR>\jbi\components\soap配下にあるsoap_inbound_servlet.war/soap_inbound_rmservlet.war)をSUエディタの”外部に公開するエンドポイントURL”で指定したコンテキストルートを指定し、通常のサーブレットと同様にWebコンテナに配備します。
(例)
  外部に公開するエンドポイントURL: http://hostname:8080/sample/service1
  context-root要素の値: sample
  管理者名: admin
  配備コマンド:   otxadmin> deploy --user admin --contextroot sample C:\\WebOTX\\jbi\\components\\soap\\soap_inbound_servlet.war

Memo
otxadminのloginコマンドでログイン済ならば--userオプションを指定する必要はありません。

SOAP BCのinbound(エンドポイントロールをコンシューマとした場合)は、このサーブレットとサービスアセンブリが両方とも配備され、起動していなければ動作しません。
コンテキストルートを指定しない場合、soap_inbound_servlet.warのコンテキストルートがsoapbcとなり、soap_inbound_rmservlet.warsoapbc_rmとなります。

2.9.1.15. SOAPメッセージハンドラの実装と設定

SOAPメッセージハンドラは、SOAP BCを流れるリクエスト、レスポンス、Faultの各SOAPメッセージをハンドリングして、任意の処理を行うための機構です。ハンドラはSOAP BCのartifact(endpoints.xml)にて設定します。設定内容は、ハンドラ名、ハンドラクラス名、ハンドラクラスの初期化パラメータです。ハンドラクラスを直列につなぐこと(チェーン)によって、複数のハンドラの処理を順番に行わせることができますが、リクエストとレスポンスで実行する順番が逆になるので注意が必要です。また、ハンドラを実行するとき、ハンドラ間でハンドラの実行結果などをプロパティ値として引き継ぎます。以下に示すインタフェースを実装し、コンパイルしたクラスをJARファイルにアーカイブし、 SA内のSOAP SUの[サービスユニット名]/META-INF/lib配下に含めて配備するか、もしくは、 [domain1などのドメインディレクトリ]/jbi/bindings/SOAPBinding/install_root/workspace/lib配下に置きドメインを再起動することで使用できるようになります。
※SOAP BC には、HTTP セッション、あるいはSOAP メッセージに含まれるセッション情報を管理する機能、取得するAPI などは一切実装していません。セッションを使用するには、お客様独自にSOAP メッセージにセッション情報を埋め込んでメッセージハンドラ機構を使って取得・管理してください。
SOAPメッセージハンドラ実装に使用するインタフェース
package com.nec.webotx.jbi.binding.soap;
public interface SoapMessageHandlerIF {
  public void init(java.util.Map initParam);
  public boolean handleFault(javax.xml.soap.SOAPMessage soapMessage, java.util.Map properties);
  public boolean handleToRouter(javax.xml.soap.SOAPMessage soapMessage, java.util.Map properties);
  public boolean handleFromRouter(javax.xml.soap.SOAPMessage soapMessage, java.util.Map properties);
}
※initメソッドの引数は、endpoints.xmlから取得される初期化パラメータです。各handleメソッドで使用するときは、グローバル変数に値を保持するように実装してください。
※ToRouterは NMR へ向かう向きのメッセージ、FromRouterは NMR から出てくる向きのメッセージを指します。
※第2引数は、後続のハンドラや NMR にこのハンドラ処理の結果を渡すために使用するプロパティです。
実際に、サービスユニットでSOAPメッセージハンドラを有効にするには、サービスユニットのartifactであるendpoints.xmlに以下のように追記します。
endpoints.xmlの記述方法
<jbi:endpoint xmlns:jbi="http://www.sun.com/ns/jbi/component/soap/deploy"
       xmlns:webotx="http://www.nec.com/WebOTX"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.sun.com/ns/jbi/component/soap/deploy ../schema/endpoints.xsd http://www.nec.com/WebOTX ../schema/endpoints_webotx.xsd ">
-
  <webotx:soap_handler_chain>
    <webotx:handler name="ハンドラ名" class="ハンドラクラス名">
      <webotx:parameter name="パラメータ名" value="値"/>
      ・・・
    </webotx:handler>
  </webotx:soap_handler_chain>
</jbi:endpoint>

Memo
endpoints.xmlへの設定の追加はjbi:operation要素の記述の直後に記述してください。

SOAPメッセージハンドラ関連の要素の説明
表2.9.1.15-1
要素名
説明
属性
子要素
soap_handler_chain
この要素でSOAPエンドポイントのハンドラの設定を行います。複数のhandler要素を含みます。
  handler [0.*]
handler
1つのハンドラについて設定します。 【マルチバイト文字列指定可】
・name
   ハンドラ内で一意となるように設定します。[必須]
   ・class
   ハンドラクラスを指定します。[必須]
parameter [0.*]
parameter
ハンドラの初期化パラメータを設定します。 【マルチバイト文字列指定可】
・name
   パラメータ名を指定します。
   ・value
   値を設定します。
 

2.9.1.16. トランスポートハンドラの実装と設定

トランスポートハンドラは、HTTP以外の通信プロトコルを使ってSOAPメッセージの通信を行う場合に使用します。
outboundのインタフェース
package com.nec.webotx.jbi.binding.soap.outbound;

import com.nec.webotx.jbi.binding.soap.Endpoint;
import com.nec.webotx.jbi.binding.soap.SOAPWrapper;

public interface SOAPClient{
  void init(Endpoint endpointInfo);
  SOAPWrapper invokeService(SOAPWrapper requestWrapper) throws Exception;
}
outboundでは、ここに示したSOAPClientインタフェースの実装クラスを作成し、invokeServiceメソッドにてSOAPメッセージを送受信するプログラムを実装します。SOAPWrapperにはSAAJで定義されているSOAPMessageの他、ESB内をノーマライズメッセージに乗って送られてきたプロパティなどをget - メソッドにて取得できるようになっています。返却値のSOAPWrapperはnew SOAPWrapper(SOAPMessage ms)という形で受信したSOAPメッセージからSAAJのSOAPMessageを得て作成する必要があります。また、initメソッドでendpoints.xmlで設定した初期化パラメータを得ることができます。その方法は、Endpoint型についてgetTransporthandler()でハンドラの実体を取得したあと、getParameters()メソッドにて取得することが可能です。endpoints.xmlには以下のように追記します。 【マルチバイト文字列指定可】
<jbi:endpoint xmlns:jbi="http://www.sun.com/ns/jbi/component/soap/deploy"
          xmlns:webotx="http://www.nec.com/WebOTX"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.sun.com/ns/jbi/component/soap/deploy ../schema/endpoints.xsd http://www.nec.com/WebOTX ../schema/endpoints_webotx.xsd ">
-
  <webotx:transporthandler name="ハンドラ名" class="ハンドラクラス名">
    <webotx:parameter name="パラメータ名" value="値"/>
    <webotx:parameter name="パラメータ名" value="値"/>
  </webotx:transporthandler>
</jbi:endpoint>
endpoints.xmlへの設定時に、SOAPメッセージハンドラ、またはSOAPメッセージエクスチェンジハンドラが設定されている場合は、その設定の後に追記してください。共通ハンドラが設定されている場合はその設定の前に記述してください。

2.9.1.17. WSDLファイルのインポートによる属性自動設定

エンドポイントの自動設定
サービスユニットに、WSDL ファイルをインポートする事で、その属性が設定済みのエンドポイント、オペレーションを作成することができます。

サービスユニットの右クリックメニューのノードの追加エンドポイント... を選択します。


図2.9.1.17-1

エンドポイントの作成ダイアログが開くので、入力を行いOKボタンを押します。


図2.9.1.17-2

表2.9.1.17-1
要素名 説明
新規作成 WSDLを指定しません。通常のエンドポイントの作成と同じ結果になります。
WSDLから作成 WSDLのURLを指定して作成 ネットワークに公開されているWSDLのURLを指定して読み込みます。
ワークスペース内のWSDLから作成 ワークスペース内のWSDLを指定して読み込みます。

WSDLから作成(WSDLのURLを指定して作成もしくはワークスペース内のWSDLから作成) を選択した場合、エンドポイント情報の指定ダイアログが表示されます。


図2.9.1.17-3

ポートのドロップダウンリストに、読み込んだWSDLから取得した候補が表示されるので、作成したいものを選択します。


図2.9.1.17-4

エンドポイント名と、未選択のオペレーションに、選択可能なオペレーションが表示されます。
オペレーションを個別に追加したい場合は、追加するオペレーションを選択してから追加ボタンを押します。全てのオペレーションを追加する場合、全て追加ボタンを押します。
選択をやり直したい場合は、削除全て削除ボタンを用いて選択を解除することができます。


図2.9.1.17-5

選択が完了したら、OK ボタンを押します。


図2.9.1.17-6

選択した情報を元に、エンドポイントとオペレーションが追加されます。


図2.9.1.17-7

オペレーションの自動設定
同様の手順で、属性が設定されたオペレーションのみを追加することもできます。

エンドポイント の右クリックメニューのノードの追加オペレーション... を選択します。
以降の手順は、エンドポイントの場合と同じです。


図2.9.1.17-8

選択した情報を元に、オペレーションが追加されます。


図2.9.1.17-9

2.9.1.18. WSDLファイルのエクスポート

コンシューマを含む SOAP サービスユニットから、WSDL ファイルを生成する事ができます。

Memo
生成できるのは SOAP サービスユニットのコンシューマを含む場合のみです。

サービスユニット の右クリックメニューのWSDL出力を選択します。


図2.9.1.18-1

生成に成功すると以下のダイアログが表示されます。


図2.9.1.18-2

WSDLファイルはSUフォルダ配下に生成されます。


図2.9.1.18-3

SUにコンシューマが含まれていない場合、以下のエラーダイアログが表示されます。


図2.9.1.18-4

設定内容と WSDL の対応関係
SA, SU エディタでの設定値と、生成される WSDL ファイルとの関係を以下に示します。


図2.9.1.18-5

表2.9.1.18-1
番号 属性 設定値
? SU名 No_001
? エンドポイント名 No_002
? サービス名の名前空間URI No_003
? オペレーション名のローカル名 No_004
? 外部に公開するエンドポイントURL No_005
WSDL ファイル
WSDL ファイル名は、SU 名.wsdl となります。この例では、No_001.wsdl となります。
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="No_001" … ?
    targetNamespace="No_003" … ?
    xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="No_003" … ?
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <types>
    <xsd:schema><xsd:import namespace="No_003" … ?
	schemaLocation="META-INF/schema/No_0012.xsd"/></xsd:schema> … ? 末尾の 2 は生成時に付加される連番。
  </types>
  <message name="No_004"> … ?
    <part name="parameters" element="tns:No_004"> … ?
    </part>
  </message>
  <message name="No_004Response"> … ?
    <part name="parameters" element="tns:No_004Response"> … ?
    </part>
  </message>
  <portType name="No_002"> … ?
    <operation name="No_004"> … ?
      <input message="tns:No_004"> … ?
    </input>
      <output message="tns:No_004Response"> … ?
    </output>
    </operation>
  </portType>
  <binding name="No_002_Binding" type="tns:No_002"> … ?
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="No_004"> … ?
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="No_001"> 
    <port name="No_002_Port" binding="tns:No_002_Binding"> … ?
      <soap:address location="No_005"/> … ?
    </port>
  </service>
</definitions>
XSD ファイル
WSDL ファイルで参照される xsd ファイル名は、

SU 名 + 生成時に付加される連番.xsd

となります。 2回目の生成の場合、No_0012.xsd というファイル名になります。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema version="1.0" targetNamespace="No_003" … ?
    xmlns:tns="No_003" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> … ?
  <xsd:element name="No_004"> … ?
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="in" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="No_004Response"> … ?
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="out" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Memo
生成に必要な値が、SUエディタ、SAエディタで設定されていない場合、WSDL の該当箇所は、 "_NONE" という値が生成されます。

2.9.1.19. WSDLファイルの利用例

WSDL ファイルを利用した開発手順について説明します。

準備
プロバイダが接続する外部Webサービスとして、 [ アプリケーション開発ガイド(Java EE) > 1. Webサービスアプリケーションの開発 > 1.5. サンプル集(JAX-WS) > 1.5.2. 新規に作成したサービス(ツール利用なし) ] を利用しますので、準備として hellows.zip をインポートし、サーバに配備してください。

この Webサービスは、呼び出し時に引数として渡した文字列を含む、
 Hello 入力文字列 !
と言う文字列を返します。
サービスアセンブリ作成手順の概要
準備で配備したWebサービスを直接呼び出す際のURLは、ローカル・サーバに配備の場合、 "http://localhost/hellows/hello" です。

このWebサービスを、URL、 "http://localhost/myHellows/myHello" で呼び出す サービスアセンブリを作成します。


図2.9.1.19-1

その手順は以下のようになります。
  1. サービスユニットの配置
  2. WSDLファイルのインポートによる属性の自動設定
  3. プロバイダとコンシューマの接続
  4. スキーマファイルの設定
  5. 外部に公開するエンドポイントURL の設定
  6. WSDLファイルのエクスポート
  7. サービスアセンブリの配備
  8. Web サービス・エクスプローラーを用いた実行
1.サービスユニットの配置
サービスアセンブリプロジェクト (ここでは UseWSDLSample01 と言う名前にしています)を新規作成後、 SOAP バインディングを2つ配置し、それぞれ、コンシューマ、プロバイダ にします。


図2.9.1.19-2

2.WSDLファイルのインポートによる属性の自動設定
プロバイダ側の、エンドポイントを、WSDL のインポートで作成します。 (図では、元々あったエンドポイントを削除していますが、これは対象となるエンドポイントを 明確にする目的で行っているだけで、削除は必須ではありません。)


図2.9.1.19-3

準備で配備した Webサービス hellows のWSDL を、URL で指定します。 http://localhost/hellows/hello?wsdl


図2.9.1.19-4

ポート、エンドポイント名、選択済みオペレーション を選択し、OKボタンを押すと、エンドポイントとオペレーションが追加されます。


図2.9.1.19-5

このとき、プロバイダのオペレーションにはスキーマ(Hello.xsd)が生成されています。


図2.9.1.19-6

3.プロバイダとコンシューマの接続
プロバイダとコンシューマを接続します。


図2.9.1.19-7

Memo
接続により、コンシューマのエンドポイント名やオペレーションなどの属性は、 プロバイダの設定で更新されますが、スキーマファイルの設定は更新されません。

4.スキーマファイルの設定
コンシューマのスキーマに、プロバイダの META-INF/schema 配下に生成されているスキーマHello1.xsdを設定します。 設定の手順については、[2.7.7. スキーマファイルの設定] をご覧ください。


図2.9.1.19-8

Memo
ここでは、スキーマ定義の実体を含む、Hello1.xsd を直接、指定することで 設定手順を簡略化しています。 スキーマファイルとして、プロバイダ側と同じ、Hello.xsd を指定する場合、 Hello1.xsd もコンシューマ側の META-INF/schema 配下にコピーしてください。

5.外部に公開するエンドポイントURL の設定
外部に公開するエンドポイントURL に、http://localhost/myHellows/myHello を指定します。 このURLが、サービスアセンブリを経由して呼び出す際のURLとなります。 なお、妥当性エラーが残っている場合は、適宜、設定を行うことでエラーを解消してください。


図2.9.1.19-9

6.WSDLファイルのエクスポート
コンシューマの右クリック・メニューで、WSDL出力 を行います。 プロジェクト・エクスプローラー内に、SOAPSU_Consumer.wsdl が生成される事をご確認下さい。


図2.9.1.19-10

7.サービスアセンブリの配備
作成したサービスアセンブリを、サーバに配備します。 サーバで実行を行うと、簡単にサーバへの配備が可能です。


図2.9.1.19-11

8.Web サービス・エクスプローラーを用いた実行
ここでは、Webサービスクライアントのモジュールを作成する事なく、簡単に実行可能な、 Webサービスエクスプローラでの実行手順について説明します。

コンシューマで生成した、SOAPSU_Consumer.wsdl を右クリックし、 Webサービス > Web サービス・エクスプローラーでのテスト を選択します。


図2.9.1.19-12

次の画面が表示されます。
ここで、エンドポイントに表示されたURL が、元の WebサービスのURL ではなく、 コンシューマで設定した外部に公開するエンドポイントURL であることに、ご注目ください。

操作に表示されている、sayHello をクリックします。


図2.9.1.19-13

Webサービスに渡す文字列を指定するために、追加をクリックします。


図2.9.1.19-14

行が追加されるので、文字列(この例では、"WebOTX"を入力し、Go ボタンを押します。


図2.9.1.19-15

状況ウィンドウ 内に、Webサービス(hellows)からの返却文字列が表示されます。 先ほど入力した、"WebOTX" が含まれていることで、呼び出しが正常に完了したことが分かります。


図2.9.1.19-16