この例は 2 つのアプリケーションで構成されています。
-
購入者アプリケーションは、購入注文要求メッセージを販売者アプリケーションに送信します。
-
販売者アプリケーションは、注文が履行されたときに購入注文確認メッセージを購入者アプリケーションに送信します。
次の図は、2 つのアプリケーションのリレーションを示しています。
購入者アプリケーション
購入者アプリケーションは次のアクションを実行します。
-
入力購入注文要求ドキュメントを
HTTP POST 経由で受信します。 -
RosettaNet の Send action 操作を使用して、購入注文要求メッセージを販売者アプリケーションに送信します。
-
購入注文要求メッセージのメッセージ ID を、
HTTP POST への応答で使用するプレーンテキストに変換します。 -
販売者アプリケーションから肯定応答シグナルを受信し、シグナルに関する情報を記録します。
-
販売者アプリケーションから購入注文確認メッセージを受信し、確認メッセージに関する情報を記録します。
-
販売者アプリケーションから完了状態を受信し、完了状態に関する情報を記録します。
次のスクリーンショットは、購入者アプリケーションの Anypoint Studio アプリケーションフローを示しています。
購入者の非公開キー、購入者の証明書、販売者の証明書が含まれる購入者アプリケーションのキーストアは、プロジェクトの src/main/resources にあります。
|
購入者アプリケーションの最初のフローの作成
購入者アプリケーションの最初のフローでは、購入注文要求ドキュメントを HTTP POST 経由で受信して、販売者アプリケーションに RosettaNet アクションメッセージとして送信します。このフローを作成するには、新しい Mule プロジェクトの作成、HTTP Listener ソースの設定、Send action 操作の追加、Transform コンポーネントの追加を行う必要があります。
HTTP Listener ソースの設定
デフォルトパス (/) へのコールが行われたときに Mule フローを開始するように HTTP Listener ソースを設定します。
-
Studio で新しい Mule プロジェクトを作成します。
-
[Mule Palette (Mule パレット)] ビューから、[HTTP] を選択して [Listener] コンポーネントをキャンバスにドラッグします。
-
プロパティウィンドウで、[Connector configuration (コネクタ設定)] 項目の横にある [+] をクリックしてグローバル要素を追加します。
-
[Name (名前)] 項目に、
「HTTP_InputListener」と入力し、デフォルト値を受け入れます。
PO_InitiatorConfig_Buyer グローバル要素を追加する
Send action 操作の PO_InitiatorConfig_Buyer グローバル要素を追加します。
-
Send action 操作のプロパティウィンドウで、[Module configuration (モジュール設定)] 項目の横にある [+] をクリックしてグローバル要素を追加します。
-
[RosettaNet Config (RosettaNet 設定)] ウィンドウで、次の項目を入力します。
Global HTTP Listener (グローバル HTTP リスナー) HTTP_Listener-config Service Endpoint Path (サービスエンドポイントパス)
/partner1
Global HTTP Request (グローバル HTTP 要求)
HTTP_Request_configuration
Request Endpoint Path (要求エンドポイントパス)
/partner2
Keystore Path (キーストアパス)
/partner1.jks
Keystore Access password (キーストアアクセスパスワード)
nosecret
Signing key password (署名キーパスワード)
partner1
Global usage code (グローバル使用コード)
Test (テスト)
Mule DUNS identifier (Mule DUNS 識別子)
123456789
Mule location identifier (Mule 場所識別子)
partner1
Partner DUNS identifier (パートナー DUNS 識別子)
123456788
Partner location identifier (パートナーの場所識別子)
partner2
role in PIP (PIP のロール)
INITIATOR
PIP definition path (PIP 定義パス)
/PIP3A4/V02_02.xml
-
[OK] をクリックします。
Send Action 操作を追加する
PO_InitiatorConfig_Buyer グローバル要素で定義された設定を使用して購入注文要求メッセージを販売者アプリケーションに送信するために、Send action 操作を追加します。
-
[Mule Palette (Mule パレット)] ビューから、[RosettaNet] を選択して [Send action] 操作を [Listener] の横にドラッグします。
-
プロパティウィンドウで、次の項目を入力します。
項目 値 Display Name (表示名)
Send action
Module configuration (モジュール設定)
PO_InitiatorConfig_Buyer
Transform Message コンポーネントの追加
購入注文要求メッセージのメッセージ ID をプレーンテキストに変換する Transform Message コンポーネントを追加します。
-
[Mule Palette (Mule パレット)] ビューから、[Core (コア)] を選択して [Transform Message] コンポーネントを [Send action] の横にドラッグします。
-
プロパティウィンドウで、[Output (出力)] セクションの括弧を次の DataWeave コードで上書きします。
%dw 2.0 output text/plain --- "Buyer sent action message " ++ attributes.messageId ++ "\n"
購入者アプリケーションの 2 番目のフローの作成
購入者アプリケーションの 2 番目のフローでは、販売者アプリケーションから肯定応答シグナルを受信し、シグナルに関する情報を記録します。また、販売者アプリケーションから購入注文確認メッセージを受信し、メッセージに関する情報を記録します。
購入者アプリケーションの 3 番目のフローの作成
購入者アプリケーションの 3 番目のフローでは、販売者アプリケーションから完了状態を受信し、完了状態に関する情報を記録します。
Completion Source を設定する
販売者からの購入注文完了状態メッセージをリスンするように Completion source ソースを設定します。
-
[Mule Palette (Mule パレット)] ビューから、[Rosettanet] を選択して [Completion source] ソースをキャンバスにドラッグします。
-
[Module configuration (モジュール設定)] 項目に
「PO_InitiatorConfig_Buyer」と入力します。
Logger コンポーネントを追加する
購入注文完了状態に関する情報を記録する Logger コンポーネントを追加します。
-
[Mule Palette (Mule パレット)] ビューから、[Core (コア)] を選択して [Logger] コンポーネントをキャンバス上の Completion source の横にドラッグします。
-
[Message (メッセージ)] 項目に、次のテキストを入力します。
Buyer action message #[attributes.replyAttributes.messageId] completed as #[payload.completionCode]
アプリケーションを保存して実行する
アプリケーションを保存するには、[File (ファイル)] > [Save (保存)] をクリックします。
アプリケーションを実行するには、[Run (実行)] > [Run as (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] をクリックします。
購入者アプリケーションの XML
購入者アプリケーションのフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:rosetta="http://www.mulesoft.org/schema/mule/rosetta"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/rosetta
http://www.mulesoft.org/schema/mule/rosetta/current/mule-rosetta.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
<http:listener-config name="HTTP_Listener_config"
doc:name="HTTP Listener config" >
<http:listener-connection host="localhost" port="8081" />
</http:listener-config>
<http:request-config name="HTTP_Request_configuration"
doc:name="HTTP Request configuration">
<http:request-connection host="localhost" port="8082" />
</http:request-config>
<rosetta:config name="PO_InitiatorConfig_Buyer"
pipRole="INITIATOR" doc:name="RosettaNet Config"
listenerConfigName="HTTP_Listener_config"
servicePath="/partner1"
requesterConfigName="HTTP_Request_configuration"
requestPath="/partner2"
keystorePath="/partner1.jks"
keystorePass="nosecret"
privatePass="partner1"
globalUsageCode="Test"
selfBusinessIdentifier="123456789"
selfLocationId="partner1"
partnerBusinessIdentifier="123456788"
partnerLocationId="partner2"
pipFile="/PIP3A4/V02_02.xml"/>
<http:listener-config name="HTTP_InputListener"
doc:name="HTTP Listener config" >
<http:listener-connection host="localhost" port="8801" />
</http:listener-config>
<flow name="Send-Purchase-Order-Request" >
<http:listener doc:name="Listener" config-ref="HTTP_InputListener"
path="/"
allowedMethods="POST"/>
<rosetta:send-action doc:name="Send action"
config-ref="PO_InitiatorConfig_Buyer"/>
<ee:transform doc:name="Transform Message" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output text/plain
---
"Buyer sent action message " ++ attributes.messageId ++ "\n"]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="Receive-Purchase-Order-Confirmation" >
<rosetta:action-source doc:name="Action source"
config-ref="PO_InitiatorConfig_Buyer"/>
<logger level="INFO" doc:name="Logger"
message="Buyer received action message #[attributes.messageId]"/>
</flow>
<flow name="Send-Purchase-Order-Completion" >
<rosetta:completion-source doc:name="Completion"
config-ref="PO_InitiatorConfig_Buyer"/>
<logger level="INFO" doc:name="Logger"
message="Buyer action message #[attributes.replyAttributes.messageId] completed as #[payload.completionCode]"/>
</flow>
</mule>
販売者アプリケーション
販売者アプリケーションは次のアクションを実行します。
-
入力購入注文要求確認ドキュメントを
HTTP POST 経由で受信します。 -
RosettaNet の Send action 操作を使用して、購入注文確認メッセージを購入者に送信します。
-
購入注文確認メッセージの RosettaNet メッセージ ID を、
HTTP POST への応答で使用するプレーンテキストに変換します。 -
購入者アプリケーションから購入注文要求メッセージを受信し、要求メッセージに関する情報を記録します。
-
購入者アプリケーションから肯定応答シグナルを受信し、シグナルに関する情報を記録します。
-
購入者アプリケーションから完了状態メッセージを受信し、完了状態メッセージに関する情報を記録します。
次のスクリーンショットは、販売者アプリケーションの Anypoint Studio アプリケーションフローを示しています。
販売者の非公開キー、販売者の証明書、購入者の証明書が含まれる販売者アプリケーションのキーストアは、プロジェクトの src/main/resources にあります。
|
販売者アプリケーションの最初のフローの作成
販売者アプリケーションの最初のフローでは、購入注文要求確認ドキュメントを HTTP POST 経由で受信して、購入者アプリケーションに RosettaNet アクションメッセージとして送信します。このフローを作成するには、新しい Mule プロジェクトの作成、HTTP Listener ソースの設定、RosettaNet の Send action 操作の設定、Transform コンポーネントの追加を行う必要があります。
HTTP Listener ソースの設定
デフォルトパス (/) へのコールが行われたときに Mule フローを開始するように HTTP Listener ソースを設定します。
-
Studio で新しい Mule プロジェクトを作成します。
-
[Mule Palette (Mule パレット)] ビューから、[HTTP] を選択して [Listener] コンポーネントをキャンバスにドラッグします。
-
プロパティウィンドウで、[Connector configuration (コネクタ設定)] 項目の横にある [+] をクリックしてグローバル要素を追加します。
-
[Name (名前)] に
「HTTP_InputListener」と入力します。 -
[Port (ポート)] に
「8082」と入力します。 -
[Read timeout (読み取りタイムアウト)] に
「3000」と入力します。
Send Action 操作のグローバル要素を追加する
Send action 操作の PO_ResponderConfig_Seller というグローバル要素を作成します。
-
Send action 操作のプロパティウィンドウで、[Module configuration (モジュール設定)] 項目の横にある [+] をクリックしてグローバル要素を追加します。
-
[RosettaNet Config (RosettaNet 設定)] ウィンドウで、次の項目を設定します。
項目 値 Global HTTP Listener (グローバル HTTP リスナー)
HTTP_Listener-config
Service Endpoint Path (サービスエンドポイントパス)
/partner2
Global HTTP Request (グローバル HTTP 要求)
HTTP_Request_configuration
Request Endpoint Path (要求エンドポイントパス)
/partner1
Keystore Path (キーストアパス)
/partner2.jks
Keystore Access password (キーストアアクセスパスワード)
nosecret
Signing key password (署名キーパスワード)
partner2
Global usage code (グローバル使用コード)
Test (テスト)
Mule DUNS identifier (Mule DUNS 識別子)
123456788
Mule location identifier (Mule 場所識別子)
partner2
Partner DUNS identifier (パートナー DUNS 識別子)
123456789
Partner location identifier (パートナーの場所識別子)
partner1
role in PIP (PIP のロール)
RESPONDER
PIP definition path (PIP 定義パス)
/PIP3A4/V02_02.xml
-
[OK] をクリックします。
Send Action 操作を追加する
購入注文確認メッセージを購入者アプリケーションに送信する Send action 操作を追加します。
-
[Mule Palette (Mule パレット)] ビューから、[RosettaNet] を選択して [Send action] 操作を [Listener] の横にドラッグします。
-
プロパティウィンドウで、次の項目を設定します。
項目 値 Display Name (表示名)
Send action
Module configuration (モジュール設定)
PO_ResponderConfig_Seller
-
[OK] をクリックします。
Transform Message コンポーネントの追加
購入注文確認メッセージのメッセージ ID を、HTTP POST への応答で使用するプレーンテキストに変換する Transform Message コンポーネントを追加します。
-
[Mule Palette (Mule パレット)] ビューから、[Core (コア)] を選択して [Transform Message] コンポーネントをキャンバス上の [Send action] の横にドラッグします。
-
プロパティウィンドウで、[Output (出力)] セクションの括弧を次の DataWeave コードで上書きします。
%dw 2.0 output text/plain --- "Seller sent action message " ++ attributes.messageId ++ "\n"
販売者アプリケーションの 2 番目のフローの作成
販売者アプリケーションの 2 番目のフローでは、購入者アプリケーションから肯定応答シグナルを受信し、シグナルに関する情報を記録します。また、購入者アプリケーションから購入注文要求メッセージを受信し、要求に関する情報を記録します。
販売者アプリケーションの 3 番目のフローの作成
販売者アプリケーションの 3 番目のフローでは、購入注文完了状態メッセージを購入者アプリケーションに送信し、購入注文完了状態メッセージに関する情報を記録します。このフローを作成するには、Action ソースを設定し、Logger コンポーネントを追加する必要があります。
Logger コンポーネントの追加
購入注文完了状態メッセージに関する情報を記録する Logger コンポーネントを追加します。
-
[Mule Palette (Mule パレット)] ビューから、[Core (コア)] を選択して [Logger] コンポーネントをキャンバス上の Action source の横にドラッグします。
-
[Message (メッセージ)] 項目に、次のテキストを入力します。
Seller action message #[attributes.replyAttributes.messageId] completed as #[payload.completionCode]
販売者アプリケーションの XML
販売者アプリケーションのフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:rosetta="http://www.mulesoft.org/schema/mule/rosetta"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/rosetta
http://www.mulesoft.org/schema/mule/rosetta/current/mule-rosetta.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
<http:listener-config name="HTTP_Listener_config"
doc:name="HTTP Listener config" >
<http:listener-connection host="localhost" port="8082" />
</http:listener-config>
<http:request-config name="HTTP_Request_configuration"
doc:name="HTTP Request configuration" >
<http:request-connection host="localhost" port="8081" />
</http:request-config>
<rosetta:config name="PO_ResponderConfig_Seller"
pipRole="RESPONDER"
doc:name="RosettaNet Config"
listenerConfigName="HTTP_Listener_config"
servicePath="/partner2"
requesterConfigName="HTTP_Request_configuration"
requestPath="/partner1"
keystorePath="/partner2.jks"
keystorePass="nosecret"
privatePass="partner2"
globalUsageCode="Test"
partnerBusinessIdentifier="123456789"
partnerLocationId="partner1"
selfBusinessIdentifier="123456788"
selfLocationId="partner2" pipFile="/PIP3A4/V02_02.xml"/>
<http:listener-config name="HTTP_InputListener"
doc:name="HTTP Listener config" >
<http:listener-connection host="localhost" port="8802" />
</http:listener-config>
<flow name="Send-Purchase-Order-Confirmation">
<http:listener doc:name="Listener"
config-ref="HTTP_InputListener"
path="/" allowedMethods="POST"/>
<rosetta:send-action doc:name="Send action"
config-ref="PO_ResponderConfig_Seller"/>
<ee:transform doc:name="Transform Message">
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output text/plain
---
"Seller sent action message " ++ attributes.messageId ++ "\n"]]></ee:set-payload>
</ee:message>
</ee:transform>
</flow>
<flow name="Receive-Purchase-Order-Request">
<rosetta:action-source doc:name="Action source"
config-ref="PO_ResponderConfig_Seller"/>
<logger level="INFO" doc:name="Logger"
message="Seller received action message #[attributes.messageId]"/>
</flow>
<flow name="Send-Purchase-Order-Completion">
<rosetta:completion-source doc:name="Completion"
config-ref="PO_ResponderConfig_Seller"/>
<logger level="INFO" doc:name="Logger"
message="Seller action message #[attributes.replyAttributes.messageId] completed as #[payload.completionCode]"/>
</flow>
</mule>
サンプルをテストする
購入者アプリケーションと販売者アプリケーションをテストするには、アプリケーションの実行後に次の手順を実行します。
-
購入者アプリケーションに購入注文要求を提供します。
-
販売者アプリケーションに購入注文要求応答を提供します。
購入注文要求ドキュメントの提供
購入者アプリケーションの HTTP_InputListener エンドポイントに対して HTTP POST を使用して、販売者に送信する購入注文要求を提供します。
サンプル注文要求をダウンロードできます。次に、HTTP ツール (ブラウザープラグイン、PostMan などのスタンドアロンツール、または curl などのコンソールツール) を使用して、データを購入者アプリケーションに投稿します。
たとえば、次の curl コマンドは購入注文要求を投稿します。
curl -v -H "Content-Type: application/xml" -XPOST --data-binary @sample-purchase-order-request-content.xml http://localhost:8801
RosettaNet Connector は、購入注文要求に基づいて RosettaNet メッセージを生成して販売者に送信し、HTTP POST 操作に対してメッセージ識別子を返します。コンソールの出力は次のようになります。
INFO ... Seller received action message pMAIhTBMsGzAf/NFx83KBO9nt+T+DV2RNLhwlpNqnXM=0
INFO ... Buyer action message pMAIhTBMsGzAf/NFx83KBO9nt+T+DV2RNLhwlpNqnXM=0 completed as SUCCESS
購入注文確認ドキュメントの提供
販売者アプリケーションの HTTP_InputListener エンドポイントに対して HTTP POST を使用して、購入者に送信する購入注文情報を提供します。
サンプル購入注文確認をダウンロードして、任意の HTTP ツールを使用して販売者アプリケーションにデータを投稿できます。
たとえば、次の curl コマンドは購入注文確認を投稿します。
curl -v -H "Content-Type: application/xml" -XPOST --data-binary @sample-purchase-order-confirmation-content.xml http://localhost:8802
RosettaNet Connector は、購入注文確認に基づいて RosettaNet メッセージを生成して購入者に送信し、HTTP POST 操作に対してメッセージ識別子を返します。コンソールの出力は次のようになります。
INFO ... Buyer received action message ng7+TalLLPTJZHok4tQSBi8RYZD8IsD9+iB85cubzM=1
INFO ... Seller action message sng7+TalLLPTJZHok4tQSBi8RYZD8IsD9+iB85cubzM=1 completed as SUCCESS
このサンプルアプリケーションが送信する購入注文確認アクションは単なる例です。実際の購入注文確認を送信するには、RosettaNet の send-action 操作で replyAttributes を設定して、対応する購入注文要求の受信時に提供された情報を提供する必要があります。これらの replayAttributes により、RosettaNet プロトコルは同時に発生する多くの要求を見分けることができます。