+
+

ラボ 2:Order APIのSOAP Webサービスへの接続

概要

このステップでは、post:\ordersフローを実装していきます。 Orderを作成するには、以下の手順となります。

  1. .NET SOAP サービスを呼び出して、Orderを作成します。

  2. リクエストを XML に変換し、レスポンスを JSON 形式にとして返します。

ステップ 1: プロジェクトにWebサービス・コネクターを追加

SOAPサービスに接続するために、Webサービス・コンシューマを使用します。

  1. パレットで Add Module リンクを クリック します。

    module9 lab2 as wsconnector add

    「Add Modules to Project」のウィンドウが表示されます。

    Web Service Consumer モジュールを 選択 し、アイコンを ドラッグドロップ します。

    module9 lab2 as wsconnector add2

    これにより、モジュールがパレットに追加され、プロジェクトで Web Service Consumerプロセッサを使用できるようになります。

ステップ 2: Consumeコンポーネントの追加

プロジェクトにWebサービス・コンポーネントが追加されたので、Webサービスをコンシュームする設定を行っていきます。

  1. post:\orders フローを表示します。

post:\orders フローを編集していることを確認してください! フローの名前に post:\orders:application\json:api-config のように表示されているはずです。
module9 lab2 as orderflow
  1. Transform Message コンポーネントのアイコンを削除します。プロセッサを 右クリック して Delete選択 してください。

    module9 lab2 as deletepp
  2. Web Service Consume プロセッサをフローに追加します。Mule パレットのパネルで web service とフィルターに入力すると、下図のようなアイコンが表示されます。

    module9 lab2 as pallette ws
  3. 空のフローに Consume プロセッサを ドラッグ&ドロップ します。

    module9 lab2 as wsconnector

    プロセッサを Source ではなく Process に配置していることを確認してください。

ステップ 3: Webサービスの接続設定

  1. Consume プロセッサ・アイコンを ダブルクリック して設定パネルを表示します。新しいパネルが表示されます。

    module9 lab2 consumer config
  2. 新しいコネクタ構成を追加してみましょう。Connector Configurationmodule9 lab2 as plusbutton ボタンを クリック します。すると、以下のようなウィンドウがポップアップします。

    module9 lab2 as wscconfig
  3. WSDL Location ​フィールドに、すでにデプロイされている .NET SOAP サービスの定義を含む 次の WSDL 定義を 貼り付け ます:

    module9 lab2 as wsdl

    WSDLの情報に基づいて、コネクターが自動的に Service, Port, Address Configuration の情報を設定します。 Service には 'service' と表示されていることを確認してください。

  4. OK ボタンを クリック します。

ステップ 4: コンシューマ・プロパティの設定

サービスへの接続はできました。次は、基本設定に戻り、 オペレーションと送信するペイロードを選択します。

  1. Display NameCreate Order​ に変更します。

  2. オペレーションのリストから、Create Order​ を 選択 してください。

    module9 lab2 as wsdl operation
  3. Message セクションを表示します。

  4. Bodyセクションで、module9 lab2 fx ボタンが押下状態になっていることを確認し、 module9 lab2 dw ボタンを押してください。

    Dataweave 画面が表示されます。

    module9 lab2 ws dw
  5. 以下のスクリプトを コピーペースト してください。

    %dw 2.0
    output application/xml
    ns ns0 http://tempuri.org/
    var totalPrice = (if(payload.totalPrice == null) sum(payload.orderLineItems.price) else payload.totalPrice as Number)
    ---
    {
    	ns0#CreateOrder: {
    		ns0#Order: {
    			ns0#Items: {
    				(payload.orderLineItems map ( orderLineItem , indexOfOrderLineItem ) -> {
    					ns0#OrderItem: {
    						ns0#ProductId: orderLineItem.productId,
    						ns0#Quantity: orderLineItem.quantitiyOnHand
    					}
    				})
    			},
    			ns0#TotalPrice: totalPrice,
    			ns0#UserId: payload.customerId,
    			ns0#Status: "new"
    		}
    	}
    }

    var totalPrice = (if(payload.totalPrice == null) sum(payload.orderLineItems.price) else payload.totalPrice as Number) のコードをチェックしてみてください。 今回は、totalPriceがリクエストに含まれていない場合、各項目の価格に基づいて計算されます。

  6. 完了したら Done ボタンを クリック します。

    module9 lab2 dw done
  7. Properties Panel の右上にある module9 lab2 as savebutton ボタンを クリック し、変更を保存します。

ステップ 5: レスポンスの設定

オーダーを作成するための設定は終わりましたが、あと一つすべきことが残っています。 Create Orderアイコンへの入出力メッセージを整形する必要があります。 そのために Transform Message プロセッサ (DataWeave 要素)をWebサービス・コンシューマの後に追加します。

  1. Mule Palette パネルで transform入力 します。

    module9 lab2 as transform
  2. Transform MessageCreate Order Web Service の後に ドラッグ&ドロップ してください。

    module9 lab2 as updatedflow
  3. 非常にシンプルで、作成した注文の id を返す(出力する)だけです。

    module9 lab2 as dwmap3
  4. 入力側の CreateOrderResult フィールドを出力側の id フィールドに ドラッグ して、左の CreateOrderResult と右の id を一致させます。

  5. 白いキャンバスの外側を クリック して変更を保存するか、要素パネルの右上にあるmodule9 lab2 as savebuttonボタンを クリック して保存します。

まとめ

このラボでは、以下のステップを完了しました:

以前のラボは、RAML 仕様を使用して API を定義し、API を実装するためのスケルトン プロジェクトを自動生成しました。 このラボでは、特定のフロー(POST)を使用して、Create Orderを を外部サービスとの統合を実装しました。 そうすることで、Web Service Consumer コンポーネントを追加し、有効なURLを使用して WSDL に設定しました。 さらに、Webサービスの呼出しに必要な適切なペイロードを提供し、Webサービスコールからの応答を適切に処理するために、Web Service Component の後に Transform component を追加しました。 これで、次の ラボ 3 でこのプロジェクトをローカルの Anypoint Studio 上で実行して、新しい実装をテストすることができるようになりました。

おめでとうございます!ラボ2が完了しました。

ラボ 3に進んでください。

Submit your feedback!
Share your thoughts to help us build the best workshop experience for you!
Take our latest survey!