23 Webサービスベースのメッセージ交換の有効化
この章では、Oracle B2Bで取引パートナ間のWebサービスベースのメッセージ(通常はSOAPベース)交換を有効化する方法について説明します。
この章の内容は次のとおりです。
23.1 Webサービス・ベースのメッセージ交換の概要
Oracle B2Bでは、取引パートナ間でWebサービス(SOAP)ベースのメッセージを交換できます。インバウンドおよびアウトバウンド方向の両方でメッセージを交換できます。ただし、現在これがサポートされているのは、HTTP経由のSOAP 1.1メッセージのみです。
Webサービス機能を使用すると、パートナ間でメッセージを送受信できるだけでなく、プロトコル実装レイヤーとしてレポート、追跡および監査などの一般機能をサポートします。
多くの企業で、(B2B固有のプロトコル以外に) Webサービスを使用して取引パートナのファイル転送またはメッセージ交換、あるいはその両方を統合する必要性がますます高まっています。
Oracle B2Bでは、次の仕様に基づいてWebサービスをサポートします。ただし、ときには実装が異なる可能性があります。
-
SOAP 1.1
-
WS Addressing 1.0
-
添付
23.2 カスタムWSDLファイルによるSOAPベースのサービス・メッセージの交換
SOAPベース・メッセージは、インバウンドおよびアウトバウンド方向の両方でサポートされます。
要件に応じたカスタマイズが可能なWeb Service Definition Language (WSDL)ファイルを作成または更新する必要があります。
23.2.1 SOAPベースのアウトバウンド・メッセージの交換
アウトバウンドのSOAPベース・メッセージの交換を可能にするには、次のタスクを実行する必要があります。
23.2.1.1 WSDLのアップロード
1つ目のタスクでは、Webサービスを登録してメッセージを交換するために必要な、WSDLファイルをアップロードする必要があります。次のいずれかの方法でWSDLをアップロードできます。
-
インラインWSDL - XSD情報がWSDL自体に定義されている通常のWSDLファイル
-
WSDLファイルとXSDファイルが含まれているZIPファイル
-
複数のWSDLファイルとXSDファイルが含まれているZIPファイル
WSDLをアップロードするには:
-
Oracle B2Bコンソール(http://<hostname>:<port>/b2bconsole)にログオンします。hostnameはOracle SOA Suiteをホストしているコンピュータの名前、portは通常は
8001
です(非SSL接続の場合)。 -
「管理」リンクをクリックし、「WSDL」タブをクリックします。
-
+ボタン(「WSDLの追加」)をクリックします。「WSDL」表に新しいWSDLのエントリが作成されます。
-
WSDLの名前(Transmit_WSDLなど)を指定します。複数のWSDLが圧縮およびアップロードされている場合は、開始WSDLまたはルートWSDLを選択する必要があります。
-
「WSDL」セクションで、「参照」ボタンをクリックし、アップロードするWSDLを選択します。この例では、選択されているWSDLはTransmitDoc2way.wsdlです。WSDLの詳細は、図23-1に示すように、「アップロードされたWSDLアーティファクト情報」セクションに表示されます。
-
確認ダイアログで「保存」、「OK」の順にクリックします。
ノート:
アップロードしたWSDLファイルがチャネルなどの他のメタデータによって参照され、アグリーメントの一部としてデプロイされている場合、そのWSDLファイルへの更新は無効です。これらの参照が非アクティブになった後にのみ、アップロードしたWSDLを更新できます。
23.2.1.2 ドキュメントの作成
次のタスクでは、アウトバウンド・フロー用のドキュメントを作成します。現在、サポートされているドキュメント・タイプはカスタムのみであることに注意してください。
カスタム・ドキュメントを作成するには:
-
「ドキュメント定義の作成」での指定に従って、ドキュメント定義を作成します。次のように指定します。
-
ドキュメント・バージョン - 1.0
-
ドキュメント・タイプ - TransmitDocumentRequest
-
ドキュメント定義 - TransmitDocumentDef
-
-
「WSDLの使用」を選択します。
-
関連するWSDLアーティファクトを選択します。この場合はTransmit_WSDLです。
-
必要なWSDLメッセージを選択します。図23-2に示すように、この場合はTransmitDocumentsRequestMessageです。
-
「コールアウト」リストで、必要なコールアウトを選択します。
-
「保存」をクリックします。
23.2.1.3 パートナ・ドキュメントの一部としてドキュメントを追加
3番目のタスクとして、新しく作成したカスタム・ドキュメントをパートナ・ドキュメントの一部として追加します。
ドキュメントを追加するには:
-
「パートナ」リンクをクリックし、「ドキュメント」タブをクリックします。
-
パートナ・セクションでリモート取引パートナ名(GlobalChips)をクリックして選択します。
-
右側ペインの「ドキュメント」セクションで+ボタン(「ドキュメント定義の追加」)をクリックし、「ドキュメント定義の選択」ウィンドウを表示します。
-
追加するドキュメント定義に移動し、「追加」をクリックしてドキュメント定義を追加します。
-
「ドキュメント」タブで「保存」をクリックします。
図23-3に示すように、ドキュメントがパートナ・ドキュメントのリストに追加されます。
23.2.1.4 取引パートナ・デリバリ・チャネルの作成
ドキュメントを追加した後、メッセージを送信するための取引パートナ・デリバリ・チャネルを作成する必要があります。
取引パートナ・デリバリ・チャネルを追加するには:
-
左側の「パートナ」で、取引パートナ(GlobalChips)をクリックして選択します。
-
「チャネル」タブをクリックします。
-
+ボタン(「取引パートナへのチャネルの追加」)をクリックします。
-
「チャネル」セクションで、チャネルの名前(GlobalChips_Channelなど)を指定します。
-
「プロトコル」リストでGeneric WS-1.0を選択します。
-
「チャネルの詳細」セクションの「Webサービス・パラメータ」タブで、次を実行します。
-
Transmit_WSDL (「WSDLアーティファクト」リストからアップロードしたWSDL)を選択します。
-
使用可能なサービス(この場合はTransmitsDocumentService)を選択します。
ノート:
Oracle B2Bでは、手動でサービス、ポートおよびアクションを指定できます。これは、選択したWSDLの一部として使用可能なもの以外のサービス、ポートまたはアクションを指定する必要がある場合に便利です。前述のパラメータに、手動で文字列値を指定することも可能です。サービス名を手動で指定する場合は、次の形式でないと、検証エラーが発生します。
{namespace}ServiceName
namespaceはWSDLのターゲット・ネームスペースと一致する必要があります。一致しない場合、セキュリティ・ポリシー構成が適用されません。
-
使用可能なポート(TransmitDocuments2WayPort)を選択します。
-
SOAPアクション(WSDLから取得)を選択します。
-
「エンドポイント(URL)」にサーバーがリスニングするURLを入力します。これは、取引パートナGlobalChipsのURLです。
-
必要な場合は、追加のHTTPヘッダーを入力します。
-
交換するメッセージの中にWS Addressingヘッダーを含めない場合は、「WS Addressingヘッダーの省略」を選択します。
-
Oracle B2B Webサービスのアウトバウンド・チャネルで、メッセージの一部としてFrom、To、DoctypeおよびDocRevisionなどのデフォルトSOAPヘッダーを送信する必要がない場合、「OracleのデフォルトSOAPヘッダーの省略」を選択します。
-
「ポリシー構成」リンクをクリックして、「ポリシー構成」ウィンドウを表示します。「ポリシー構成」ウィンドウには、チャネルにローカルに添付できる、使用可能なすべてのWebサービス・セキュリティ・ポリシーがリストされます。Oracle Fusion Middleware Enterprise Manager Controlコンソール・レベルでグローバル・ポリシーを設定するのに対して、チャネルにローカルにポリシーを添付すると、チャネルのセキュリティを細かく管理できます。
-
「ポリシー構成」ウィンドウで、「使用可能なポリシー」にリストされている使用可能なWebサービス・ポリシーから、チャネルに添付するポリシーを選択します。[Ctrl]キーを押しながらポリシー名をクリックすると、複数のポリシーを選択できます。
-
「添付」をクリックして、選択したポリシーをチャネルに添付します。図23-4に示すように、「すべてを添付」ボタンをクリックして使用可能なすべてのポリシーをチャネルに添付し、「OK」をクリックできます。
ノート:
いくつかのポリシーは、お互いに矛盾します。矛盾するポリシーを一緒にエンドポイントに添付しようとすると、エラーが表示されます。
詳細は、『Oracle Web Services Managerの理解』のポリシー・セットを使用したグローバル・ポリシー・アタッチメントの概要に関する項を参照してください。
ノート:
「交換プロトコル・パラメータ」タブで、「追加SOAPヘッダー」や「ペイロードXPath」などのパラメータも設定できます。
メッセージとともに渡す追加のSOAPヘッダーを指定するには、「追加SOAPヘッダー」オプションを選択します。「ペイロードXPath」オプションを使用すると、XPathに基づいてペイロードを選択できます。残りのSOAP本文は無視されます。
-
-
図23-5に示すように、「保存」をクリックします。
ノート:
カスタムWSDLをアップロードして使用しない場合は、「汎用SOAPの使用」チェック・ボックスを選択できます。これにより、SOAPを使用して任意のXMLドキュメントを送信できるようになり、「チャネル」/「ドキュメント」ページでWSDLを関連付ける必要はありません。Oracle B2Bは、「汎用SOAPの使用」を選択した場合に使用される、事前にシードされている汎用WSDLを提供します。
23.2.1.5 アグリーメントの作成とデプロイ
最後のタスクとして、取引パートナ・アグリーメントを作成してデプロイします。
アグリーメントの作成およびデプロイについてさらに学習するには、 「取引パートナ・アグリーメントの作成およびデプロイ」を参照してください。
23.2.2 SOAPベースのインバウンド・メッセージの交換
インバウンドのSOAPベース・メッセージを交換するには、次のタスクを実行する必要があります。
ノート:
リスニング・チャネルを作成して有効化した後は、チャネルを編集して別のWSDLを使用するように指定することはできません。チャネルを削除して新しいチャネルを作成する必要があります。
23.2.6 リスニング・チャネルの作成
次のタスクとして、着信メッセージを受信するリスニング・チャネルを作成します。
リスニング・チャネルを作成するには:
-
「管理」リンクをクリックし、「リスニング・チャネル」タブをクリックします。
-
+ボタン(「取引パートナへのチャネルの追加」)をクリックします。
-
「リスニング・チャネル」セクションで、チャネルの名前(Acme_ListeningChannelなど)を指定します。
-
「プロトコル」リストでGeneric WS-1.0を選択します。
-
「チャネルの詳細」セクションの「Webサービス・パラメータ」タブで、次を実行します。
-
Transmit_WSDL (「WSDLアーティファクト」リストからアップロードしたWSDL)を選択します。
-
使用可能なサービス(この場合はTransmitsDocumentService)を選択します。
-
使用可能なポート(TransmitDocuments2WayPort)を選択します。
-
「エンドポイント(URL)」にサーバーがリスニングするURLを入力します。これは、取引パートナGlobalChipsのURLです。
「エンドポイント(URL)」には、サーバーがリスニングするパートナのURLが自動的に入力されます。
-
「ポリシー構成」リンクをクリックして、「ポリシー構成」ウィンドウを表示します。「ポリシー構成」ウィンドウには、チャネルにローカルに添付できる、使用可能なすべてのWebサービス・セキュリティ・ポリシーがリストされます。Oracle Fusion Middleware Enterprise Manager Controlコンソール・レベルでグローバル・ポリシーを設定するのに対して、チャネルにローカルにポリシーを添付すると、チャネルのセキュリティを細かく管理できます。
-
「ポリシー構成」ウィンドウで、「使用可能なポリシー」にリストされている使用可能なWebサービス・ポリシーから、チャネルに添付するポリシーを選択します。[Ctrl]キーを押しながらポリシー名をクリックすると、複数のポリシーを選択できます。
-
「添付」をクリックして、選択したポリシーをチャネルに添付します。「すべてを添付」ボタンをクリックして使用可能なすべてのポリシーをチャネルに添付し、「OK」をクリックできます。
-
-
「チャネル属性」タブをクリックし、「チャネルの有効化」が選択されていることを確認します。
-
「保存」をクリックします。
ノート:
リスニング・メッセージにWebサービスが登録されていることを確認するには、次のURLにアクセスし、ユーザー名とパスワードを指定してログインし、登録済のWebサービスのリストに該当のWebサービスがあることを確認します。
http:<host>:<port>/b2b/services
Oracle Weblogic Serverコンソールにユーザーを作成する必要があります(パスワードも指定してください)。Oracle Weblogic Serverコンソールでのユーザー作成の詳細は、次のリンクにアクセスしてください。
http://docs.oracle.com/cd/E23943_01/apirefs.1111/e13952/taskhelp/security/ManageUsersAndGroups.html
Webサービスは、次の書式でリストされています。
ws/Listening_Channel_Name
次の図に示されている、それぞれの「WSDL」リンクをクリックすると、特定のサービスからWSDLをダウンロードできます。
ノート:
リスニング・チャネルを作成して有効化した後は、チャネルを編集して別のWSDLを使用するように指定することはできません。チャネルを削除して新しいチャネルを作成する必要があります。
23.3 wsa.actionの構成
wsa.action
を構成する様々な方法があります
-
ファブリックの場合の
wsa.action
またはJMSの場合のWSA_ACTION
は、バックエンドから送信でき、メッセージ送信中はwsa.action
として使用されます。 -
バックエンドから
wsa.action
が提供されない場合は、SOAPアクションのeventName=ACTION:test
もwsa.action
として使用できます。 -
バックエンド・アプリケーションにより
wsa.action
が指定されない場合は、デリバリ・チャネルの一部として構成されているアクションがwsa.action
として使用されます。
23.4 カスタムSOAPヘッダーの送信
Oracle B2Bでは、Webサービスベースのアウトバウンド・メッセージの一部としてカスタムSOAPヘッダーを送信できます。
アウトバウンドJMSチャネルの場合、次の例に示すように、送信者取引パートナは、複数レベルのカスタムSOAPヘッダーを送信できます。
<CustomSOAPHeader xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <hello xmlns="http://xmlns.oracle1.com/soa1/generic/soap"> <name xmlns="http://MY_NAME_SPACE"> <firstname>John</firstname> <lastname>Doe</lastname> </name> </hello> </CustomSOAPHeader>
アウトバウンド・ファブリックの場合、次の例に示すように、送信者は複数レベルのカスタム・ヘッダーを送信できます。
<bpelx:inputProperty name="b2b.customSOAPHeaders" expression="'<CustomSOAPHeader xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <hello xmlns="http://xmlns.oracle1.com/soa1/generic/soap"> <name xmlns="http://MY_NAME_SPACE"> <firstname>John</firstname> <lastname>Doe</lastname> </name> </hello> </CustomSOAPHeader>
23.5 エンタープライズ管理を使用したWebサービスへのポリシーの添付
この項では、Oracle Fusion Middleware Enterprise Management Controlコンソールを使用して、ポリシー・セットをWebサービスに添付する方法について説明します。
ユーザー名トークン・ポリシーと必要な資格証明を作成するには、次のタスクを実行する必要があります。
23.5.1 デフォルト資格証明のマップとキーの作成
最初のタスクは資格証明の作成です。
資格証明を作成するには:
-
次のURLにアクセスし、Oracle Fusion Middleware Enterprise Management Controlコンソールにログオンします。
http://<hostname>:<port>/em
説明:
-
hostname: Oracle SOA Suiteを実行しているコンピュータの名前
-
port: 管理サーバーのポート番号(通常は
7001
)
-
-
「ターゲット・ナビゲーション」ペインの「WebLogicドメイン」で、soainfraなどのドメイン名を開きます。
-
soainfraを右クリックし、「セキュリティ」→「資格証明」を選択して、図23-6に示すように、「資格証明」ページを表示します。
-
「資格証明」ページで、「マップの作成」をクリックします。
-
図23-7に示すように、「マップの作成」ダイアログ・ボックスでマップ名として
oracle.wsm.security
と入力し、「OK」をクリックします。 -
oracle.wsm.security (作成したマップ)を選択して「キーの作成」をクリックし、「キーの作成」ダイアログ・ボックスを表示します。
-
図23-8に示すように、「キーの作成」ダイアログ・ボックスで、次を実行します。
-
「キー」フィールドにキー名としてbasic.credentialsと入力します。
-
「タイプ」で「パスワード」を選択します。
-
管理ユーザー名(ここでは
weblogic
)を入力します。 -
「パスワード」フィールドにパスワードを入力します。
-
前のステップで入力したパスワードを確認します。
-
「OK」をクリックします。
-
23.5.2 アウトバウンド・ポリシー・セットの作成と添付
次のタスクとして、アウトバウンド・ポリシー・セットを作成し、Webサービスに添付します。
アウトバウンド・ポリシー・セットを作成してWebサービスに添付するには:
-
図23-9に示すように、ドメイン名(soainfra)ページで「WebLogicドメイン」リストをクリックして「Webサービス」→「ポリシー・セット」を選択し、「ポリシー・セット・サマリー」ページを表示します。
-
「ポリシー・セット・サマリー」ページで「作成」をクリックし、「ポリシー・セットの作成」ウィザードを表示します。
-
図23-10に示すように、名前として
b2bOutboundTest
を入力し、「有効」を選択し、「リソース・タイプ」リストで「Webサービス・クライアント」を選択して、「次」をクリックします。 -
図23-11に示すように、「リソース・スコープの入力」ページで次のように入力し、「次」をクリックします。
-
ドメイン名(
soainfra
など) -
アプリケーション名(
soainfra
など) -
アプリケーション・モジュール名(
soainfra
) -
{http://xmlns.example.com/soa/generic/soap}test
などのSOA参照 -
ポート名(
TransmitDocumentsSoapHttpPort
)
-
-
「制約の入力」ページで、「次」をクリックします。
-
図23-12に示すように、「ポリシー参照の追加」ページの「使用可能なポリシー」セクションでoracle/wss_username_token_client_policyを選択し、「アタッチ」をクリックした後、「次」をクリックします。
-
「サマリー」ページで「保存」をクリックし、「ポリシー・セット・サマリー」ページに戻ります。
23.5.3 インバウンド・ポリシー・セットの作成と添付
最後のタスクとして、インバウンド・ポリシー・セットを作成し、添付します。
インバウンド・ポリシー・セットを作成してWebサービスに添付するには:
-
「アウトバウンド・ポリシー・セットの作成と添付」のステップ1とステップ2を繰り返します。
-
図23-13に示すように、名前として
b2bIutboundTest
を入力し、「有効」を選択し、「リソース・タイプ」リストで「Webサービス・エンドポイント」を選択して、「次」をクリックします。 -
図23-14に示すように、「リソース・スコープの入力」ページで次のように入力し、「次」をクリックします。
-
ドメイン名(
soainfra
など) -
アプリケーション名(
soainfra
など) -
アプリケーション・モジュール名(
soainfra
) -
SOA参照またはWebサービス・クライアントの名前(
{http://www.spscommerce.com/WS/TransmitDocuments}TransmitDocumentsService
など) -
ポート名(
TransmitDocumentsSoapHttpPort
)
-
-
「制約の入力」ページで、「次」をクリックします。
-
「ポリシー参照の追加」ページの「使用可能なポリシー」セクションでoracle/wss_username_token_service_policyを選択し、「アタッチ」をクリックした後、「次」をクリックします。
-
「サマリー」ページで「保存」をクリックし、「ポリシー・セット・サマリー」ページに戻ります。
23.6 実行時の取引パートナの識別
実行時に、様々なトランスポート・ヘッダーに基づいて受信するメッセージの送信元の取引パートナを識別できます。
取引パートナは、次の情報(リストは優先度の高い順)を使用して識別できます。
-
HTTP (送信元)ヘッダー・オーバーライドの値を取引パートナのGeneric識別子と比較する
-
XPathを使用してSOAPヘッダーに含まれる
FROM_TP
を識別する -
HTTP (送信元)ヘッダーの値を取引パートナのGeneric識別子と比較する
-
SOAP (送信元)ヘッダーの値を取引パートナのGeneric識別子と比較する
ノート: 事前定義済SOAPヘッダーを使用できない場合、同じものをオーバーライドし、XPathを使用して取引パートナを識別できます。
-
WSセキュリティ認証ユーザーの値を取引パートナのGeneric識別子と比較する
-
リモート・ホスト名の値を取引パートナのGeneric識別子と比較する
-
SOAPエンベロープ・ヘッダー「PartyInfo」の値を取引パートナの汎用識別子と比較する。
23.7 リクエスト/リプライ・シナリオの例
このシナリオは、WebサービスまたはGeneric SOAPを使用する場合の同期化されたリクエストとリプライについてのものです。
この項の内容は、次のとおりです。
23.7.1 アウトバウンド同期化: コンポジット
コンポジットとのアウトバウンド同期の場合:
-
Webサービス: コンポジットに基づいて、同期化が一方向なのか、またはリクエスト/リプライ・パターンを使用しているのかを判断します。
soapAction
が指定されている場合、HTTPsoapAction
ヘッダーの上書きにのみ使用されます。同期化されているリクエスト/リプライ・メッセージの再発行は、コンポジットから実行する必要があります。そのようなメッセージの再発行をOracle B2Bコンソールから実行した場合、メッセージは一方向として処理されます。
-
Generic SOAP: コンポジットに基づいて、一方向なのか、またはリクエスト/リプライ操作なのかを判断します。チャネル構成(「なし」/「同期」)は有効になりません。
23.7.2 インバウンド同期化: コンポジット
コンポジットとのインバウンド同期の場合:
-
Webサービス: 一方向か、WSDLに指定されたリクエスト/リプライ操作かの決定に、HTTPヘッダーの
soapAction
が使用されます。WSDLでsoapAction
が定義されていない場合、チャネル構成が使用されます。非応答ペイロードの場合、リクエスト/リプライでエラーが発生します。 -
Generic SOAP: チャネル構成(「なし」/「同期」)に基づきます。非応答ペイロードの場合、リクエスト/リプライでエラーが発生します。
23.7.3 アウトバウンド同期: JMSキュー
JMSキューとのアウトバウンド同期の場合:
-
Webサービス:
soapAction
(バックエンドから提供されるか、またはリスニング・チャネルに構成されている)に基づいて、一方向なのか、またはWSDLで指定されているリクエスト/リプライ操作なのかを判断します。WSDLでsoapAction
が見つからない場合、デフォルトでチャネル構成が使用されます。リプライは、インバウンド・アグリーメント構成を使用して、バックエンドに送信されます。 -
Generic SOAP: チャネル構成(「なし」/「同期」)に基づきます。「同期」の場合、リプライがないと、エラーが発生します。リプライは、インバウンド・アグリーメント構成を使用して、バックエンドに送信されます。
23.7.4 インバウンド同期: JMSキュー
-
Webサービス: 一方向か、WSDLに指定されたリクエスト/リプライ操作かの決定に、HTTPヘッダーの
soapAction
が使用されます。WSDLでsoapAction
が定義されていない場合、チャネル構成(「なし」/「同期」)が使用されます。「同期」の場合、取引パートナにレスポンスとして送信するリプライを、Oracle B2Bコールアウトで生成する必要があります。着信リクエストでWS-Addressingが有効化されている場合、レスポンス・メッセージはWS-Addressing必須ヘッダーを送信します。
-
Generic SOAP: チャネル構成(「なし」/「同期」)に基づきます。「同期」の場合、取引パートナにレスポンスとして送信するリプライを、Oracle B2Bコールアウトで生成する必要があります。