
ラボ 2:Order APIのSOAP Webサービスへの接続
概要
このステップでは、post:\ordersフローを実装していきます。 Orderを作成するには、以下の手順となります。
-
.NET SOAP サービスを呼び出して、Orderを作成します。
-
リクエストを XML に変換し、レスポンスを JSON 形式にとして返します。
ステップ 1: プロジェクトにWebサービス・コネクターを追加
SOAPサービスに接続するために、Webサービス・コンシューマを使用します。
-
パレットで Add Module リンクを クリック します。
「Add Modules to Project」のウィンドウが表示されます。
Web Service Consumer モジュールを 選択 し、アイコンを ドラッグ & ドロップ します。
これにより、モジュールがパレットに追加され、プロジェクトで Web Service Consumerプロセッサを使用できるようになります。
ステップ 2: Consumeコンポーネントの追加
プロジェクトにWebサービス・コンポーネントが追加されたので、Webサービスをコンシュームする設定を行っていきます。
-
post:\orders フローを表示します。
post:\orders フローを編集していることを確認してください! フローの名前に post:\orders:application\json:api-config のように表示されているはずです。 |

-
Transform Message コンポーネントのアイコンを削除します。プロセッサを 右クリック して Delete を 選択 してください。
-
Web Service Consume プロセッサをフローに追加します。Mule パレットのパネルで web service とフィルターに入力すると、下図のようなアイコンが表示されます。
-
空のフローに Consume プロセッサを ドラッグ&ドロップ します。
プロセッサを Source ではなく Process に配置していることを確認してください。
ステップ 3: Webサービスの接続設定
-
Consume プロセッサ・アイコンを ダブルクリック して設定パネルを表示します。新しいパネルが表示されます。
-
新しいコネクタ構成を追加してみましょう。Connector Configuration の
ボタンを クリック します。すると、以下のようなウィンドウがポップアップします。
-
WSDL Location フィールドに、すでにデプロイされている .NET SOAP サービスの定義を含む 次の WSDL 定義を 貼り付け ます:
WSDLの情報に基づいて、コネクターが自動的に Service, Port, Address Configuration の情報を設定します。 Service には 'service' と表示されていることを確認してください。
-
OK ボタンを クリック します。
ステップ 4: コンシューマ・プロパティの設定
サービスへの接続はできました。次は、基本設定に戻り、 オペレーションと送信するペイロードを選択します。
-
Display Name を Create Order に変更します。
-
オペレーションのリストから、Create Order を 選択 してください。
-
Message セクションを表示します。
-
Bodyセクションで、
ボタンが押下状態になっていることを確認し、
ボタンを押してください。
Dataweave 画面が表示されます。
-
以下のスクリプトを コピー & ペースト してください。
%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がリクエストに含まれていない場合、各項目の価格に基づいて計算されます。 -
完了したら Done ボタンを クリック します。
-
Properties Panel の右上にある
ボタンを クリック し、変更を保存します。
ステップ 5: レスポンスの設定
オーダーを作成するための設定は終わりましたが、あと一つすべきことが残っています。 Create Orderアイコンへの入出力メッセージを整形する必要があります。 そのために Transform Message プロセッサ (DataWeave 要素)をWebサービス・コンシューマの後に追加します。
-
Mule Palette パネルで transform と 入力 します。
-
Transform Message を Create Order Web Service の後に ドラッグ&ドロップ してください。
-
非常にシンプルで、作成した注文の id を返す(出力する)だけです。
-
入力側の CreateOrderResult フィールドを出力側の id フィールドに ドラッグ して、左の CreateOrderResult と右の id を一致させます。
-
白いキャンバスの外側を クリック して変更を保存するか、要素パネルの右上にある
ボタンを クリック して保存します。
まとめ
このラボでは、以下のステップを完了しました:
以前のラボは、RAML 仕様を使用して API を定義し、API を実装するためのスケルトン プロジェクトを自動生成しました。 このラボでは、特定のフロー(POST)を使用して、Create Orderを を外部サービスとの統合を実装しました。 そうすることで、Web Service Consumer コンポーネントを追加し、有効なURLを使用して WSDL に設定しました。 さらに、Webサービスの呼出しに必要な適切なペイロードを提供し、Webサービスコールからの応答を適切に処理するために、Web Service Component の後に Transform component を追加しました。 これで、次の ラボ 3 でこのプロジェクトをローカルの Anypoint Studio 上で実行して、新しい実装をテストすることができるようになりました。
-
DataWeave についての詳細はリンクを確認してください。
-
Web Service Consumer Connector についての詳細はリンクを確認してください。
おめでとうございます!ラボ2が完了しました。
ラボ 3に進んでください。