この章の内容は次のとおりです。
Oracle Enterprise Manager Fusion Middleware ControlでのREST参照のバインディング・コンポーネントのテストおよび構成
RESTアダプタの使用方法の詳細は、『Oracle SOA Suiteの理解』のRESTサービスによる出荷リソースの定義に関する説明を参照してください。
RESTは、ネットワーク・アプリケーションの設計用のアーキテクチャです。RESTfulアプリケーションは、HTTPリクエストを使用してデータのポスト(作成と更新)、データの取得(たとえば問合せの作成)、データの更新およびデータの削除を実行します。RESTは、Webサービスを使用するかわりの方法となります。
12.2.1から、SOAコンポジットでエンドツーエンドのJSONを使用できるようになりました。すなわち、RESTサービスはRESTリクエストを受信し、XMLに変換することなくBPELエンジンにルーティングすることができます。BPELコンポーネントはJavaScriptアクションを使用して、さらに条件付きおよび反復コンストラクトでJavaScriptを使用して、JSONオブジェクトで直接動作できます。REST参照はBPELエンジンからRESTメッセージを受信し、変換することなく外部RESTエンドポイントにルーティングできます。
注意:
RESTインタフェースとBPELコンポーネントはエンドツーエンドのJSONをサポートしています。ただし、メディエータのような他のサービス・コンポーネントを使用している場合は、RESTリソースと動詞をWSDL操作とXMLスキーマに内部的にマッピングして着信ペイロードをXMLに変換する、12.1.3スタイルのコンポジットを使用する必要があります。Oracle SOA Suiteでは次のRESTサポートを提供します。
SOAコンポジット・アプリケーションでのサポート:
エンドツーエンドのJSONの有効化
新規または既存のサービスでのRESTサポートの有効化。
外部REST APIとの統合。
RESTful状態遷移セットの編成 (RPC/HATEOAS (Hypermedia as the Engine of Application State)アプローチ)。
XML、JavaScript Object Notation (JSON) (XMLへおよびXMLからの自動翻訳を含む)、テキスト、不透明(Opaque)(バイナリ)およびURLエンコード・ペイロード・データのサポート。
RESTサービス操作用のサンプルURIの生成。
WADLサービスのサポート。WADLは、デプロイ済のOracle SOA SuiteまたはOracle Service Busサービス、あるいはJersey RESTサービスなど、Oracle SOA SuiteまたはOracle Service Bus以外のサービスでも提供できます。
開発の容易さ:
Oracle JDeveloperウィザードには、RESTインタフェースおよびWSDL操作バインディングをモデル化するためのいくつかのオプションが用意されています。
REST定義からWSDLへのマッピングが含まれる基礎となるWSDLを生成するための、リソース・パスおよびREST操作の手動による定義。
WSDL操作をリソース・パスおよびHTTP動詞にマッピングするサービス・コンポーネントまたは外部参照のWSDLの選択。
RESTアダプタに操作マッピングを自動的に移入する多数のソース(たとえば、アプリケーション・サーバーやSOA-MDS)からのWSDLの選択。
開発時に使用する各メソッドを公開する読取り可能API。
Oracle JDeveloperからOracle RESTエンドポイント(Oracle Service Busなど)をブラウズおよび消費可能。
Oracle Web Service Manager (OWSM)ポリシーのRESTセキュリティのサポート。
次のユースケースをサポートします。
顧客リストの取得
新規顧客の作成
顧客の詳細情報の取得
顧客の詳細情報の更新
顧客の削除
顧客の新住所の作成
顧客の住所の取得
顧客の住所の更新
Oracle SOA Suiteコンポーネント、サービスおよび参照は、RESTサービスとして選択および公開できます。この項では、次のタスクの実行方法について説明します。
既存のSOAコンポジット・アプリケーションのサービス・バインディング・コンポーネントとしてRESTサポートを追加します。
SOAコンポジット・アプリケーションから起動できる参照バインディング・コンポーネントとしてRESTサポートを追加します。
ショートカットを使用してRESTサポートを構成します。
RESTスキーマを生成します
ホスト、ポートおよびプロトコル値のグローバル・トークン変数を使用します。
注意:
RESTバンディングは、非同期コンポーネント(例: 非同期BPELプロセス)に添付できません。この添付を試みると、この操作はサポート対象ではないため、RESTサービスと一方向インタフェースを持つサービスの間にOracle Mediatorを配置し、サービス・コールバックを別の(アウトバウンド) RESTアダプタにルーティングするための回避策の提案を示すメッセージが表示されます。
RESTサービス・バインディング・コンポーネントはREST参照バインディング・コンポーネントに接続できません。
この項では、RESTバインディング・コンポーネントをSOAコンポジット・アプリケーションに追加する方法について説明します。RESTバインディング・コンポーネントをサービスまたは参照バインディング・コンポーネントとして追加できます。
RESTアダプタをSOAコンポジット・アプリケーションのサービスまたは参照バインディング・コンポーネントとして構成する手順:
RESTサービス・コンポーネントを追加するには、SOAコンポジット・エディタの「公開されたサービス」スイムレーンを右クリックし、「挿入」→「REST」を選択します。この操作で、適切なサービス・コンポーネントと相互作用するサービス・バインディング・コンポーネントとしてRESTサポートを追加できます。
REST参照コンポーネントを追加するには、SOAコンポジット・エディタの「外部参照」スイムレーンを右クリックし、「挿入」→「REST」を選択します。この操作で、外部RESTエンドポイントと相互作用する参照バインディング・コンポーネントとしてRESTサポートを追加できます。
RESTバインディング構成ウィザードが表示されます。
RESTサービスまたは参照の名前を入力します。
タイプフィールドにRESTバインディングのタイプが表示されます。これは、RESTサービスの場合は「サービス」、REST参照の場合は「参照」です。
オプションで「サービスはWSDLインタフェースを使用してコンポーネントを起動します」または「参照はWSDLインタフェースを使用してコンポーネントによって起動されます」オプションを選択します。
RESTサービスの場合、コンポジットで内部的にXMLスキーマとWSDL操作が使用される場合は、「サービスはWSDLインタフェースを使用してコンポーネントを起動します」を選択します。
REST参照の場合、コンポジットで内部的にXMLスキーマとWSDL操作が使用される場合は、「参照はWSDLインタフェースを使用してコンポーネントによって起動されます」を選択します。
12.2.1から、SOAコンポジットでエンドツーエンドのJSONを使用できるようになりました。すなわち、RESTサービスはRESTリクエストを受信し、XMLに変換することなくBPELエンジンにルーティングすることができます。BPELコンポーネントはJavaScriptアクションを使用して、さらに条件付きおよび反復コンストラクトでJavaScriptを使用して、JSONオブジェクトで直接動作できます。REST参照はBPELエンジンからRESTメッセージを受信し、変換することなく外部RESTエンドポイントにルーティングできます。
デフォルトでは、新しいRESTサービス/参照バインディングはWADLを使用します。ただし、RESTリソースと動詞をWSDL操作とXMLスキーマに内部的にマッピングして、着信ペイロードをXMLに変換する12.1.3スタイルのコンポジットを使用する必要がある場合は、このオプションを選択します。コンポジットでWSDLベースの操作のみをサポートするメディエータのようなコンポーネントが使用される場合も、このチェック・ボックスを選択できます。
このオプションを選択すると、XMLスキーマの順序付けを強制オプションが表示されます。
「XMLSchemaの順序付けを強制」を選択すると、XMLスキーマの順序付けが強制されます。
選択すると、XMLスキーマの要素の順序付けと一致するようにJSONペイロードを並べ替えます。これには、インバウンド・リクエスト・ペイロードおよびアウトバウンド・リクエストからのレスポンスが含まれます。このオプションによって、パフォーマンスのオーバーヘッドが追加される可能性があります。
このチェック・ボックスを選択すると、RESTサービス・バインディングのプロパティreorderJsonAsPerXmlSchema
がcomposite.xml
ファイルでtrue
に設定されます。
「次へ」 をクリックします。
「リソース」ページが表示されます。
表36-1 では、このページのフィールドについて説明します。
表36-1 「リソース」ページ
フィールド | 説明 |
---|---|
構成ショートカット | コンテキストに基づいて構成ショートカットを提供します。
|
説明 |
このフィールドは、RESTサービスに対して表示されます。 RESTサービスの説明を入力します。この説明は、開発時に使用される読取り可能なAPIの一部として公開されます。 |
ベースURI | このフィールドは、REST参照に対して表示されます。 インタフェースでサポートされているすべてのリソースのベースURI接続情報。例:http://search.mydomain.com/search.format |
リソース・パス |
デフォルト・リソース・パス(/)をダブルクリックしてリソース・パスを更新するか、「追加」をクリックして新しいリソース・パスを追加します。 「相対パス」フィールドで、リソース・パス(この例では/orders)を入力し、「OK」をクリックします。 |
操作バインディング |
このセクションは、RESTリソースと動詞をWSDL操作とXMLスキーマに内部的にマッピングして、着信ペイロードをXMLに変換する12.1.3スタイルのコンポジットを作成している場合に表示されます。 「追加」をクリックして、新しい操作バインディングを追加します。 既存の操作バインディングを選択して「編集」をクリックすることもできます。 「追加」または「編集」をクリックすると、「REST操作バインディング」ダイアログが表示されます。「REST操作バインディング」ダイアログに表示されるフィールドの構成の詳細情報は、「「REST操作バインディング」ダイアログ」を参照してください。 |
メソッド | このセクションは、タイプ付きでないペイロードをスキーマなしで使用するWADLベースのサービスまたは参照を作成している場合に表示されます。 「追加」をクリックして新しいメソッドを追加します。 既存のメソッドを選択して「編集」をクリックすることもできます。 「追加」または「編集」をクリックすると、「RESTメソッド定義」ダイアログが表示されます。「RESTメソッド定義」ダイアログに表示されるフィールドの詳細情報は、「「RESTメソッド定義」ダイアログ」を参照してください。 |
「終了」をクリックして、RESTバインディング構成を完了します。
「RESTメソッド定義」ダイアログを使用して、WADLおよびタイプ付きでないペイロードをスキーマなしで使用するSOA RESTサービスまたは参照のRESTメソッドを定義します。
表36-2 「RESTメソッド定義」ダイアログ
フィールド | 説明 |
---|---|
メソッド |
定義するRESTメソッドの名前を入力します。 |
リソース |
既存のURLリソース・パスをリストから選択するか、「追加」アイコンをクリックして新しいリソース・パスを追加します。 |
HTTP動詞 |
WSDL操作にバインドされる動詞(GET、PUT、POST、DELETEなど)を選択します。 |
説明 |
説明を入力します(オプション)。これは、メソッドについて公開される説明テキストです。 |
リクエスト |
「ペイロード」セクションでは、リクエスト・ペイロードの形式をJSON (デフォルト選択項目)、XML、URLエンコード、テキスト、不透明(Opaque)またはペイロードなしのいずれかに指定できます。「メソッドのサンプルURLを生成します」をクリックして、メソッド操作のサンプルURLを表示します。 「URIパラメータ」セクションでは、REST問合せまたはテンプレート・パラメータから対応するランタイム・プロパティへのマッピングを指定できます。
|
レスポンス |
成功および失敗セクションでは、レスポンス・ペイロードとメソッドのステータスを選択できます。 デフォルトのレスポンス・ペイロードは「ペイロードなし」です。成功した操作のデフォルトのHTTPステータス・コードは204で、失敗した操作の場合は500です。 |
「REST操作バインディング」ダイアログを使用し、WSDLインタフェースを使用してコンポーネントを起動するRESTサービスのREST操作を定義します。リソース・パスおよびREST操作を定義できます。REST定義からWSDLへのマッピングが含まれた基礎となるWSDLが生成されます。
表36-3 「REST操作バインディング」ダイアログ
フィールド | 説明 |
---|---|
操作 |
マッピングするWSDL操作名を表示します。生成されたWSDLで使用されている名前を指定できます。 |
リソース |
既存のURLリソース・パスをリストから選択するか、「追加」アイコンをクリックして新しいリソース・パスを追加します。 選択したリソース・パスが、このダイアログの下部にある「リクエスト」セクションの「URIパラメータ」表に追加されます。選択したリソースに{var}などのテンプレート変数が含まれている場合、その変数がURIパラメータに追加されます。 |
HTTP動詞 |
WSDL操作にバインドされる動詞(GET、PUT、POST、DELETEなど)を選択します。 この選択内容によって、受信REST問合せパラメータからWSDLスキーマへのマッピングが「URIパラメータ」表に移入されます。 操作のHTTP動詞は、「OK」をクリックした後に、「RESTバインディングの作成」ダイアログの「操作バインディング」セクションにも追加されます。 |
説明 |
説明を入力します(オプション)。参照バインディング・コンポーネントには、「ベースURI」フィールドがあります。 |
リクエスト |
「スキーマ」セクションには、使用されているリクエスト・スキーマが表示されます。
「ペイロード」セクションでは、リクエスト・ペイロードの形式をXML (デフォルト選択項目)、JSON、URLエンコードまたはペイロードなしのいずれかに指定できます。「サンプル・ペイロードの生成」をクリックして、選択したリクエスト・ペイロードのサンプルを表示します。 「URIパラメータ」セクションでは、REST問合せパラメータからWSDLスキーマへのマッピングを指定できます。このセクションは、「HTTP動詞」リストでスキーマを指定する際に(動詞に応じて)自動的に移入されます。GET動詞およびDELETE動詞では、パラメータはWSDLスキーマにバインドされます。POST動詞およびPUT動詞では、インバウンド・ペイロードがWSDLスキーマにマッピングされます。
|
レスポンス |
「HTTPステータス」セクションでHTTPステータス・コードを指定できます。空白で区切られた複数のステータスを入力できます。参照では、成功と解釈される可能性のあるステータスがあります。サービスでは、返すことができる可能性のある成功ステータス(BPELなどのサービス・コンポーネントによって設定)があります。 「ペイロード」セクションでは、可能なレスポンス・ペイロードであるXML (デフォルト)、JSONまたはペイロードなしを指定できます。実行時に返される出力は、受信リクエストに応じて異なります。「サンプル・ペイロードの生成」をクリックして、選択したレスポンス・ペイロードのサンプルを表示します。 「スキーマ」セクションには、可能なペイロードのタイプが選択されている場合に使用されるレスポンス・スキーマが表示されます。ペイロードなしが選択されている場合、このフィールドは表示されません。
「フォルト・バインディング」セクションには、レスポンス・フォルト名、タイプ、ステータスおよびスキーマが表示されます。フォルトの詳細がWSDLファイルで定義されている場合は、フォルト・バインディングがこのセクションに自動的に作成されます。フォルト・バインディングは、「追加」アイコンをクリックして、手動でも定義できます。フォルトの詳細は、「RESTフォルト・バインディングに関する必知事項」を参照してください。 |
RESTバインディング構成ウィザードの「構成ショートカット」からRESTコンポーネントやサービスの有効化 オプションを使用して、既存のRESTサービス・コンポーネントを有効化できます。
SOAコンポジット・エディタの「公開されたサービス」スイムレーンを右クリックし、「挿入」→「REST」を選択します。
RESTバインディング構成ウィザードが表示されます。
「サービスはWSDLインタフェースを使用してコンポーネントを起動します」を選択します。
「次へ」 をクリックします。
「構成ショートカット」でRESTコンポーネントやサービスの有効化を選択します。
「サービス・エクスプローラ」ダイアログが表示されます。
ナビゲータを開いて、サービス・コンポーネントのWSDL (この例ではBPELプロセス)を選択し、「OK」をクリックします。この操作で、WSDL操作をリソース・パスおよびHTTP動詞にマッピングできます。図36-1に詳細を示します。
図36-1 REST操作をリソース・パスおよびHTTP動詞にマッピングするために選択されたWSDL
RESTバインディング構成ウィザードの「リソース」ページが更新され、図36-2に示すように表示されます。
選択したWSDLが読み取られ、WSDL操作が、「操作バインディング」セクションのリソース・パスおよびHTTP動詞にマッピングされます。「リソース・パス」および「HTTP動詞」セクションには、構成マッピングを追加する必要があることに注意してください。これは、「完了」列の「いいえ」の値でも示されます。
今度は、各操作のリソース・パスおよびHTTP動詞を構成する必要があります。この例では、操作は1回のみです。WSDLによっては、「操作」列に複数の操作が表示される可能性があります。
「リソース」セクションの「リソース・パス」表で、「/」のデフォルト・パス・エントリをダブルクリックします。操作バインディングを開始する前にリソース・パスを定義することもできます。この場合、選択されているリソースが新しいバインディングに使用されます。
「RESTリソースの更新」が起動します。
「相対パス」フィールドで、リソース・パス(この例では/orders
)を入力し、「OK」をクリックします。図36-3に詳細を示します。
古いリソース・パスを持つ操作マッピングが、「リソース」セクションおよび「操作バインディング」セクション(この例では、/orders)の新しいリソース・パスで更新されます。既存のコンポーネントを更新する場合は、通常はすべての操作が更新されます。
必要に応じて、「リソース」セクションの「追加」アイコンをクリックし、「RESTリソースの作成」ダイアログを表示して、リソース・パスを追加で作成できます。
今度は、「操作バインディング」セクションの「HTTP動詞」列を構成する必要があります。
「操作バインディング」セクションで操作を選択して、「編集」をクリックします。
「REST操作バインディング」ダイアログが表示されます。
このダイアログを使用して、操作のHTTP動詞を選択し、HTTP動詞およびリソースをWSDL操作にバインドしてRESTパラメータをコンポーネント・サービスのWSDLスキーマにマッピングするために「URIパラメータ」セクションに移入できます。「「REST操作バインディング」ダイアログ」で、このダイアログのフィールドについて説明しています。
必要に応じて、「リソース」リストで新しいリソースを選択します。
「URIパラメータ」セクションが更新され、選択内容が反映されます。
「HTTP動詞」リストで操作(この例ではGET)を選択します。
「URIパラメータ」セクションが更新され、選択内容が反映されます。
スタイル(queryまたはtemplate)は、「URIパラメータ」セクションの「スタイル」列で自動的に選択されます。
テンプレート変数を含む新規RESTリソースを選択または作成する場合、Oracle JDeveloperでは、同じ名前のテンプレート・パラメータの作成を試みます。その名前のパラメータがすでに存在する場合、その名前が再使用されます(また、問合せパラメータだった場合はテンプレート・パラメータになります)。重複したパラメータ名は決して作成されません。重複したパラメータが手動で作成されると、エラーが返されます。
「レスポンス」タブをクリックして、HTTPステータス・コード、ペイロード出力タイプ、スキーマおよびフォルト・バインディングの詳細を表示します。スキーマはこの例ですでに定義したので、選択項目の編集が無効になっています。
フォルト名をダブルクリックして、「RESTフォルト・バインディング」ダイアログを表示します。このダイアログの詳細は、「ヘルプ」アイコンをクリックするか、「RESTフォルト・バインディングに関する必知事項」を参照してください。
必要に応じて編集し、「OK」をクリックします。
「OK」をクリックして「リソース」ページに戻ります。追加したHTTP動詞が表示されます。
「操作バインディング」セクションで、操作を選択し、「編集」をクリックして、残りの操作についてもリソースおよびHTTP動詞を定義します。
「OK」をクリックしてSOAコンポジット・エディタに戻ります。
RESTサービスはBPELプロセス・サービス・コンポーネントに接続されます。
RESTバインディング構成ウィザードの「構成ショートカット」を使用して、WADLサービスからREST参照にリソースおよび操作を追加できます。
SOAコンポジット・エディタの「外部参照」スイムレーンを右クリックし、「挿入」→「REST」を選択します。
RESTバインディング構成ウィザードが表示されます。
RESTサービスまたは参照の名前を入力します。
タイプフィールドに参照が表示されます。
「サービスはWSDLインタフェースを使用してコンポーネントにより起動されます」を選択します。
「次へ」 をクリックします。
「構成ショートカット」で「WADLサービスに基づいてリソースと操作のマッピングを追加」を選択します。
「WADLの場所」ダイアログが表示されます。
次のいずれかの方法で、WADLファイルを指定します。
「WADL URL」フィールドでWADLファイルのURLを指定し、手順7に進みます。
または
「検索」アイコンをクリックして、WADLファイルを検索する「WADLチューザ」ダイアログを表示します。WADLの検索オプションが表示され、ローカル・ファイル・システムまたはプロジェクト内、あるいはデザインタイムOracle Metadata Servicesリポジトリ(MDSリポジトリ)内を検索するか、アプリケーション・サーバーに接続して、デプロイ済のOracle SOA SuiteまたはOracle Service Busサービスに関連するWADLを検索するかを選択できます。図36-4に詳細を示します。
WADLファイルを選択し、「OK」をクリックします。
手順7に進みます。
「OK」をクリックします。
WADLファイル内で参照されているスキーマは新しいRESTアダプタ参照で使用されるため、「スキーマ・アーティファクトをプロジェクトにコピー。」を選択してこれらのスキーマをローカル・プロジェクトにコピーします。これが推奨される方法です。
選択したWADLファイルのタイプに応じて、手順を参照してください。表36-4に詳細を示します。
表36-4 WADLファイルのステータス
選択したWADLファイルの提供元 | 結果 | 手順 |
---|---|---|
Oracle SOA SuiteまたはOracle Service BusのRESTサービス |
「リソース」ページが、WADLファイルの情報で完全に構成されます。すべての操作、リソース・パスおよび動詞が「操作バインディング」セクションに表示されます。すべての構成が、「操作バインディング」セクションの「完了」列に「はい」の値で表示されます。 |
|
Oracle SOA SuiteまたはOracle Service Bus以外のRESTサービス(Jerseyサービスなど)。 |
「WADL解析問題」ダイアログに、追加の構成が必要と表示されます。 |
「リソース」ページを表示して内容を確認し、「OK」をクリックします。
「WADL解析問題」ダイアログ(図36-5 を参照)で、推奨修正処理のリストを確認し、「OK」をクリックします。後の参照用に、同じ情報がOracle JDeveloperの「ログ」ウィンドウに書き込まれます。
Oracle SOA SuiteまたはOracle Service Bus以外のサービスのWADLファイルには、通常、必要な情報がすべて含まれていません。構成を手動で完了する必要があります。図36-5 などの多くの場合に、使用するWADLファイルではREST参照をWSDL操作にバインドするために必要なスキーマが提供されません。通常、このスキーマは、RESTサービス・プロバイダによって提供されるサンプル・ペイロードを使用してネイティブ・フォーマット・ビルダー・ウィザードで生成できます。
「リソース」ページが表示されます。
さらに構成が必要なRESTバインディングについては、「操作バインディング」セクションの「完了」列に「いいえ」の値が表示されます。値が「いいえ」の各「完了」列のツールチップには、欠落している内容が示されているので、修正処理を実行できます。少なくとも1つの操作の「完了」列に「いいえ」の値があるかぎり、「OK」ボタンは無効になります。
注意:
Oracle JDeveloperの「ログ」ウィンドウにも、すべてのエラーおよび警告がより詳しく表示されます。たとえば、「ログ」ウィンドウには次のようなエントリが含まれています。
ERROR at [resource path: containers/{container}, method name: PUT, request/response: response, representation mediaType: application/xml ] - No schema information is available for containers/{container}.PUT response. Please specify a schema.
ツールチップに表示される修正処理を実行します。構成が正常に完了すると、「操作バインディング」セクションの「完了」列のすべての操作に「はい」の値が表示されます。
SOAデザインタイムMDSリポジトリの詳細は、「デザインタイムMDSリポジトリとの共有データの管理」を参照してください。
RESTアダプタは、WSDLまたはWADLファイルに基づくいくつかのショートカットを使用して構成できます。
Oracle JDeveloperメイン・メニューから、「ウィンドウ」→「アプリケーション・サーバー」を選択します。
WSDLサービスを右クリックして、「SOA」→「RESTとして公開」を選択します。図36-6に詳細を示します。
「RESTバインディングの作成」ダイアログが起動し、選択されたWSDLファイルから操作マッピングが移入されます。
「RESTアダプタをSOAコンポジット・アプリケーションのサービス・バインディング・コンポーネントとして構成する方法」の手順を実行して、必要な構成をすべて完了します。
注意:
選択したWSDLとその依存アーティファクトのローカル・コピーを作成するよう求められます。ローカル・コピーの作成を選択すると、SOAP参照バインディング・コンポーネントのbinding.ws
セクションに、選択元の具体WSDL/エンドポイントの場所と、抽象WSDLとして(コンポジットのインポートなどで)使用されるコピー先のWSDLが含まれます。
構成が完了すると、RESTサービス・バインディング・コンポーネントがSOAP参照バインディング・コンポーネントに接続されます。図36-7に詳細を示します。
図36-7 RESTサービス・バインディング・コンポーネントおよびSOAP参照バインディング・コンポーネントの構成
Oracle JDeveloperメイン・メニューから、「ウィンドウ」→「アプリケーション・サーバー」を選択します。
REST/WADLサービスを右クリックして、「SOA」→「REST参照の生成」を選択します。図36-8に詳細を示します。
「RESTバインディングの作成」ダイアログが起動し、選択したWADLファイルからの情報が移入されます。
「RESTアダプタをSOAコンポジット・アプリケーションの参照バインディング・コンポーネントとして構成する方法」の手順を実行して、必要な構成をすべて完了します。
構成が完了すると、図36-9 のようにREST参照バインディング・コンポーネントが表示されます。
スキーマ生成のためのスキーマまたはサンプル・データがない場合は、スキーマ生成のためのパラメータを手動で入力できます。スキーマを手動で定義するには、「追加」アイコンをクリックし、「RESTバインディングの作成」ダイアログの「操作バインディング」セクションで「操作バインディングの追加」を選択します。
次のガイドラインに留意してください。
「REST操作バインディング」ページの「URIパラメータ」セクションで、必要な問合せまたはテンプレート・パラメータを入力します。各パラメータにデータ・タイプを選択できますが、式を入力する必要はありません。スキーマやペイロードが指定されていない場合、「OK」をクリックすると、パラメータ・スキーマが自動的に生成されます(WSDLに埋め込まれます)。ランタイム・プロパティにマッピングされた式を持つパラメータは、生成されたスキーマには含まれません。
スキーマが操作に対して定義されていない場合、「式」列からアクセス可能な「式ビルダー」ダイアログにのみ、プロパティ変数が表示され、メッセージ変数は表示されません。
RESTサポート作成の詳細は、「RESTアダプタをSOAコンポジット・アプリケーションのサービス・バインディング・コンポーネントとして構成する方法」および「RESTアダプタをSOAコンポジット・アプリケーションの参照バインディング・コンポーネントとして構成する方法」を参照してください。
「RESTバインディングの作成」ダイアログの「ベースURI」フィールドで、ホスト名、ポート番号およびプロトコルのグローバル・トークン変数の割当てができます。
グローバル・トークン変数を使用する手順は次のとおりです。
正規化されたメッセージ・プロパティは、特定の標準HTTPヘッダーで使用できます。これらのプロパティは、図36-14 に示すOracle JDeveloperのBPELのreceiveアクティビティおよびreplyアクティビティの「プロパティ」タブの選択項目に表示されます。これらのヘッダー・プロパティは、デフォルトではサービス・エンジン全体に伝播されません。これらは、適切な割当てロジックを適用することよって手動で伝播する必要があります。
図36-14 receiveおよびreplyアクティビティでの正規化されたメッセージのプロパティ
外部クライアントがSOA RESTサービスと対話するインバウンドの場合、次にクライアントが対話するリソースへのハイパーリンクを送信するためのサービス構成できます。このハイパーリンクは、リソースまたはHTTPリンクのレスポンス・ヘッダーのペイロードで送信できます。次の正規化メッセージ・プロパティが作成され、次のリンクが返されます。
rest.binding.requestBaseURI
このプロパティは、リクエスト・メッセージ上で使用できます。RESTサービスのベースURIを保持します。SOAコンポジット・アプリケーションで、これを同じRESTサービスの別のリソースのパスに結合して、そのリソースに戻る絶対URLを作成できます。
rest.binding.http.Link
このプロパティがレスポンス・メッセージで設定されると、リンク・ヘッダーがHTTPレスポンスに追加されます。このヘッダーの値は、正規化されたメッセージ・プロパティの値です。
SOAコンポジット・アプリケーションが外部RESTサービスを起動するアウトバウンドの場合、サービスによってリンク・ヘッダーまたはペイロードのいずれかにある次のリンクが含まれたレスポンスが返されることがあります。次の正規化されたメッセージ・プロパティは、次のリンクを取得し、そのリンクにあるリソースを起動するために使用できます。
rest.binding.http.Link
外部RESTサービスからのHTTPレスポンスにリンク・ヘッダーが含まれている場合、rest.binding.http.Linkプロパティがそのレスポンス・メッセージに追加されます。このプロパティの値は、リンク・ヘッダーの値です。
rest.binding.requestURI
次のリンクにあるリソースは、リクエスト・メッセージでrest.binding.requestURIプロパティを設定することで起動できます。設定した場合、このプロパティのURLが、設計時に指定されたURLをオーバーライドします。これは、外部RESTサービスを起動します。
SOAコンポジット・アプリケーションが、外部RESTサービスから受信した次のリンクに基づいてRESTリソースを起動するときに、満たす必要のある事前条件がいくつかあります。
起動される可能性のあるリソースは、設計時にREST参照バインディング・コンポーネントで設計されている必要があります。
リクエストおよびレスポンスの構造は、既知のものであり、設計時にモデル化されている必要があります。
「プロパティ」タブの正規化されたメッセージ・プロパティの設定の詳細は、「メッセージ・ヘッダーを介した正規化メッセージ・プロパティの伝播」を参照してください。
RESTサービスおよび参照は、カスタムHTTPヘッダーを処理できます。表36-5に詳細を示します。
表36-5 カスタム・ヘッダー・サポート
方向 | サービス側 | 参照側 |
---|---|---|
リクエスト |
リクエストに含まれるHTTPヘッダーは、正規化されたメッセージ・プロパティとして伝播されます。ヘッダーにはrest.binding.http.header-nameが付加されます。これらのヘッダーは、正規化されたメッセージ・プロパティの一部として、サービス・エンジンで使用できます。たとえば、個々のヘッダーは、receiveアクティビティおよびreplyアクティビティのプロパティにあるBPELプロセスで取得できます。 |
rest.binding.http.*が先頭に付いたすべての正規化されたメッセージ・プロパティは、HTTPヘッダーとしてHTTPリクエストに追加されます。ヘッダーをHTTPリクエストに添付する前に、RESTサービスによって、ヘッダー名から接頭辞rest.binding.http.が削除されます。 |
レスポンス |
rest.binding.http.*が先頭に付いたすべての正規化されたメッセージ・プロパティは、HTTPヘッダーとしてHTTPレスポンスに追加されます。ヘッダーをHTTPレスポンスに添付する前に、RESTサービスによって、ヘッダー名から接頭辞rest.binding.http.が削除されます。 |
レスポンスで受信するHTTPヘッダーは、正規化されたメッセージ・プロパティとして伝播されます。ヘッダーにはrest.binding.http.header-nameが付加されます。これらのヘッダーは、正規化されたメッセージ・プロパティの一部として、サービス・エンジンで使用できます。たとえば、個々のヘッダーは、receiveアクティビティおよびreplyアクティビティのプロパティにあるBPELプロセスで取得できます。 |
図36-15 に示すとおり、「RESTフォルト・バインディング」ダイアログでRESTフォルト・バインディング・レスポンスの詳細を定義します。フォルトの詳細がWSDLファイルで定義される場合は、「RESTフォルト・バインディング」ダイアログの「フォルト・バインディング」セクションにフォルト・バインディングが自動的に作成されます。フォルト・バインディングは、「フォルト・バインディング」セクションの「フォルト・バインディングの追加」アイコンをクリックすることで、手動でも定義できます。
デフォルトでフォルト・ステータスは、フォルト・ペイロードがある場合は400で、フォルト・ペイロードがない場合は404です。
フォルト・バインディングの詳細は、「RESTバインディングの作成」ダイアログでの選択内容によって異なります。
「RESTコンポーネントや参照の有効化」を選択した場合、フォルト・バインディングは、WSDLファイルで定義されているフォルトに基づいて自動的に生成されます。
「操作バインディングの追加」を選択した場合は、サポートされるフォルト・バインディングを構成する必要があり、これは生成されるWSDLに追加されます。
「REST操作バインディング」ダイアログの「フォルト・バインディング」セクションには、レスポンス・フォルト名、タイプ、ステータスおよびスキーマが表示されます。図36-16に詳細を示します。
RESTスキーマは、ネイティブ・フォーマット・ビルダー・ウィザードの「タイプの選択」ダイアログで、JSON Interchangeフォーマット・サンプルから作成することを選択できます(図36-13 を参照)。スキーマの生成中、このウィザードは次のことを試行します。
ネームスペース情報のないRESTスキーマを生成します。
ネームスペース情報のないJSON Interchangeフォーマット・サンプルを消費し、適切なネームスペースを持つXMLを生成します。
ただし、変換を処理できない場合もあります。
ネームスペース情報が保持され、次の例に示すJSON Interchangeフォーマット・サンプルの変換が可能になります。これは、基礎となるスキーマに複数のネームスペースからの要素および属性があるためです。
<schema xmlns:us="http://xmlns.oracle.com/addresses/us" xmlns:india="http://xmlns.oracle.com/addresses/india" targetNamespace="http://xmlns.oracle.com" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <import ...> <element name="Person"> <complexType> <choice> <element ref="us:Address"/> <element ref="india:Address"/> </choice> </complexType> </element> </schema> <schema targetNamespace="http://xmlns.oracle.com/addresses/us" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <element name="Address"> <complexType> <sequence> <element name="Street" type="xsd:string"/> <element name="City" type="xsd:string"/> <element name="State" type="xsd:string"/> <element name="ZipCode" type="xsd:integer" minOccurs="0"/> </sequence> </complexType> </element> </schema> <schema targetNamespace="http://xmlns.oracle.com/addresses/india" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <element name="Address"> <complexType> <sequence> <element name="Street" type="xsd:string"/> <element name="City" type="xsd:string"/> <element name="District" type="xsd:string" minOccurs="0"/> <element name="State" type="xsd:string"/> <element name="PinCode" type="xsd:integer" minOccurs="0"/> </sequence> </complexType> </element> </schema>
連続したグループ要素の下にある、名前が重複した兄弟要素は変換できません。これはJSONではキーが重複したオブジェクトに変換されてしまい、こうしたオブジェクトは無効であるためです。
SOAIncomingRequests_maxThreadsプロパティは、デフォルトでは、Oracle WebLogic Server管理コンソールのSOADataSourceデータ・ソースに基づいて構成されています。この設定は、負荷が高いRESTサービス(たとえば、同じノード内でREST参照がRESTサービスをコールするシナリオで200の同時ユーザーがいる場合など)では十分でない場合があります。SOAIncomingRequests_maxThreads値を400
に増やして、次の例に示す例外エラーを防ぐ必要があります。
<May 2, 2014 10:16:11 AM PDT> <Error> <oracle.soa.bpel.system> <BEA-000000> <cube engineJTA transaction is not in active state. The transaction became inactive when executing activity "" for instance "30,023", bpel engine can not proceed further without an active transaction. please debug the invoked subsystem on why the transaction is not in active status. the transaction status is "MARKED_ROLLBACK". The reason was The execution of this instance "30023" for process "BuyCoffeeBPELProcess" is supposed to be in an active jta transaction, the current transaction status is "MARKED_ROLLBACK", the underlying exception is "Service Unavailable" . Consult the system administrator regarding this error. , Cikey=30023, FlowId=20014, Current Activity Key=30023-BpInv0-BpSeq0.3-3, Current Activity Label=InvokeCreateOrder, ComponentDN=default/CoffeeShopClient!1.0*soa_19d4a881-115b-42c5-824d-1af3fa766 62d/BuyCoffeeBPELProcess oracle.fabric.common.FabricInvocationException: Service Unavailable at . . . . . .
BPELコンポーネントは、XML変数およびJSON変数の両方とともに使用できます。JavaScriptは、XPath式を使用できるすべての箇所で使用できます。JavaScriptは述部、式およびJavaScript BPELアクティビティ内で使用できます。
JSON変数の使用
既存のRESTサービスに基づいてBPELプロセスを作成し、RESTサービスからメソッドを追加することを選択できます。これは、次の図に示されています。
入力ペイロード・データを受信するためにJSONオブジェクト変数を使用するように、BPELプロセスのReceiveアクティビティが自動的に構成されます。
必要に応じて、BPELプロセスに追加のスキーマレスJSON変数を作成できます。
BPELプロセスの式言語の設定
BPELデザイナで、BPELプロセス領域の空白の領域を右クリックします。「プロセスの編集」ダイアログが表示されます。必要に応じて、問合せ言語と式言語を設定します。JavaScriptを使用するためにjs
を使用できます。
JavaScript式の使用
JavaScriptは、XPath式を使用できるすべての箇所で使用できます。これらの式は、BPELアクティビティおよび条件付きおよび反復コンストラクトで使用できます。この項では、いくつかの例を示します。
次の例は、Assertアクティビティで使用されるJavaScript式を示しています。式では、プロセス入力のタイプがオブジェクトかどうかが確認されます。
process
変数は、実行中にJavaScriptコンテキストがアクセス可能なグローバル変数です。
次のコードは、Whileアクティビティで使用される可能性のあるJavaScript条件を示しています。
process.counter < 10
次のコードは、Waitアクティビティに表示される可能性のあるJavaScript式を示しています。
bpel.until(process.counter + 3)
次のコードは、Switchアクティビティの分岐に表示され、奇数のテストに役立つJavaScript式を示しています。
process.counter % 2 == 1
JavaScriptアクティビティの使用
BPELプロセスでJavaScriptアクティビティを使用して、JavaScriptコード・スニペットまたはコード・ブロックを追加できます。JavaScriptアクティビティを追加するには、「コンポーネント」ウィンドウからBPELプロセスの適切な場所にJavaScriptアイコンをドラッグします。追加したJavaScriptアクティビティをダブルクリックして編集できます。次の図は、xpath
およびbpel
オブジェクト関数を呼び出すJavaScriptコードを示しています。
xpath
は、すべてのXPath関数にバインドするグローバル・オブジェクトです。このため、たとえば、var o = process.output.xpath
では新しいxpathオブジェクトが作成され、o.refid = xpath.ora.getECID()
ではora
ネームスペース・プリフィクスのgetECID関数が呼び出されます。
次のJavaScriptコードはJavaScriptアクティビティに表示され、サーバー・コンソールおよびBPEL監査ログに出力を書き込みます。
console.log("input: ", process.input) console.log("output: ", process.output) audit.log("output: ", process.output)
BPELプロセスへのJavaScriptファイルのインポート
JavaScript関数を含む外部JavaScriptファイルを、BPELプロセスにインポートできます。これらのファイルに含まれるJavaScript関数が、BPELプロセス内で使用可能になります。次の行では、import
およびinclude
文を使用してmain.js
およびone.js
ファイルをBPELプロセスにフェッチしています。
<bpelx:js include="jslib/main.js"/> <bpelx:js import="jslib/one.js"/>
include
とimport
の違いは、import
文では、インポート回数に関係なくファイルが含められるのは1回のみである点です。
次の図は、 include/import
文を含むBPELプロセスのソース・ウィンドウを示しています。JavaScriptファイルがプロジェクト・フォルダの下に表示される場所に注意してください。
HTTPアナライザを使用してRESTアダプタをテストできます。
HTTPアナライザを使用してRESTアダプタをテストする手順は、次のとおりです。
RESTバインディング・コンポーネントを含むSOAコンポジット・アプリケーションのインスタンスは、Oracle Enterprise Manager Fusion Middleware Controlの「テスト・インスタンス」ページから開始できます。このページでは、任意のWSDLまたはWADLをテストできます。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のSOAコンポジット・アプリケーションのテスト・インスタンスの起動に関する説明を参照してください。
Oracle Enterprise Manager Fusion Middleware ControlでREST参照のバインディング・コンポーネントのプロパティを構成できます。詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のRESTアダプタのプロパティの構成に関する説明を参照してください。