HTTP レスポンスを条件付きで処理する

www.altova.com このトピックを印刷 1つ上のレベル

ホーム > 

HTTP レスポンスを条件付きで処理する

Accept HTTP リクエストヘッダーの値に従い、Web サービスが JSON または XML コンテンツ型をレスポンスボディ内で返すとします。更に、エラーの場合   (ステータスコード > 299) the Web サービスは、定義されていないコンテンツ型を返す場合があります。これは、 HTTP ステータスコードとコンテンツ型をベースにレスポンスを条件付きで処理する場合に役に立ちます。

 

同じマッピング内の Web サービスから JSON と XML レスポンスを処理する場合、コンポーネント上のボディアイテムを右クリックし、後にボディノードを追加する をコンテキストメニューから選択して、複数のボディアイテムを作成することができます。

 

マッピング上では、複数の body アイテムを持つサービスコンポーネントが上記のシナリオのために構成されており、以下のように表示されます:

mf_ws_conditional_body_04

The mapping illustrated above runs takes two input parameters. The first parameter provides the expected content type and its value can be application/json, or application/xml. The second parameter provides the numeric ID of the product to be retrieved.

 

If you provide the value application/json as input parameter, click the Preview ic-preview-buttondown button of the JSON target component. Otherwise, if the input parameter value is application/xml, click the Preview ic-preview-buttondown button of the XML target component. The respective output file (JSON or XML) will be generated if the Web service call is successful.

 

If the Web service call returns a status code greater than 300 (error), the HTTP response reaches the third body item. Since we don't know the exact content type, we choose to decode it with the help of the decode-mime-entity function. The Web service does not supply the character set value in the response header, which is why the constant value utf-8 is connected to the decoding function.

 

Each of the three response body items on the component above are configurable by clicking the excel1-compicon button next to each body:

 

1.ステータスコードが 200 から 299 の場合、最初のボディは application/json として返されたコンテンツを処理します。また、期待される JSON レスポンス構造のスキーマが設定されます。

mf_ws_conditional_body_01

2.期待される XML レスポンスステータスのスキーマがが設定されている場合、ステータスコードが 200 から 299 の場合、 application/xml として返されたコンテンツを2番目のボディは処理します。

mf_ws_conditional_body_02

3.Web サービスが エラーを伴うステータスコード (300 から 599 の間)を返す場合、3番目のボディは */* として返されたコンテンツを処理します。

mf_ws_conditional_body_03


(C) 2019 Altova GmbH