私は現在、シーケンステンプレートから集約要素のペイロードを計算しようとしています。私の問題は、このシーケンスによって返されたペイロードは、ペイロードファクトリを持つビルドではなく、集約によって生成されたペイロードであるということです。ここにサンプルがあります。WSO2がペイロードの総計を
このシーケンスを呼び出すと、元に戻って(集約されて)得ると思います。 どうすればこの問題を解決できますか?あなたはクローン後のメディエーターを実行したい場合は
おかげ
私は現在、シーケンステンプレートから集約要素のペイロードを計算しようとしています。私の問題は、このシーケンスによって返されたペイロードは、ペイロードファクトリを持つビルドではなく、集約によって生成されたペイロードであるということです。ここにサンプルがあります。WSO2がペイロードの総計を
このシーケンスを呼び出すと、元に戻って(集約されて)得ると思います。 どうすればこの問題を解決できますか?あなたはクローン後のメディエーターを実行したい場合は
おかげ
は、あなたはクローンメディエーターに属性continueParent =「true」を設定する必要があります。
しかし、クローンメディエータの後にクローンのターゲットに生成されたメッセージが失われるため、これでは不十分です。集約メディエータをシーケンス内で移動し、各クローンのターゲット内部でこのシーケンスを呼び出す必要があります。ログインして、模擬応答
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="TestSOF"
transports="http"
startOnLoad="true"
trace="disable">
<description/>
<target>
<inSequence>
<property name="messageType" value="application/xml" scope="axis2"/>
<clone continueParent="true">
<target>
<sequence>
<payloadFactory media-type="xml">
<format>
<resp1 xmlns="">
<status>OK</status>
</resp1>
</format>
<args/>
</payloadFactory>
<header name="To" action="remove"/>
<property name="RESPONSE" value="true"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<sequence key="TestSOFAgg"/>
</sequence>
</target>
<target>
<sequence>
<payloadFactory media-type="xml">
<format>
<resp2 xmlns="">
<status>OK</status>
</resp2>
</format>
<args/>
</payloadFactory>
<header name="To" action="remove"/>
<property name="RESPONSE" value="true"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<sequence key="TestSOFAgg"/>
</sequence>
</target>
</clone>
<log level="full">
<property name="DEBUG" value="after clone"/>
</log>
</inSequence>
</target>
</proxy>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="TestSOFAgg">
<aggregate>
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete expression="//status">
<log level="full"><property name="DEBUG" value="inside onComplete"/></log>
<filter xpath="count(//status[text() = 'NOK']) = 0">
<then>
<payloadFactory media-type="xml">
<format>
<myPayload>
<status>OK</status>
<action>foo</action>
</myPayload>
</format>
<args/>
</payloadFactory>
</then>
<else>
<payloadFactory media-type="xml">
<format>
<myPayload>
<status>NOK</status>
<action>bar</action>
</myPayload>
</format>
<args/>
</payloadFactory>
</else>
</filter>
<respond/>
</onComplete>
</aggregate>
</sequence>
参照メッセージを集約するために使用されるシーケンス:ここ
プロキシサービス(http://localhost:8280/services/TestSOFあなたは、単にあなたのインターネットブラウザで実行できること)で構成されるサンプルを来ります"クローン後":ソープボディが空です(ブラウザを使ってテストした場合、またはSoapUIで送信したメッセージがあります)
「onCompleteの内側」によって記録されたメッセージを参照してください:あなたは石鹸ボディ
修正何か他のものとモックのいずれかの応答内のすべてのステータス要素を見ることができるOKして、やり直してください:応答変化は、それが;-)
の作品
あなたの答えをありがとう、continueParent = "true"と設定した場合、クローンの終わりにクローンシーケンスの結果を得ることができません。別のコールの前にペイロードを保存します。私は各クローン要素の内部を集約しようとしますが、すべてのシーケンスが完了したときに集約が1回だけ行われるべきであると私が常に理解している限り、どちらも論理的でも自然でもありません。 – Nicolas
間違った集約メディエータはreponsesと同じ回数だけ呼び出さなければなりません。これはcompleteConditionのmessageCountの理由です:ESBが2つのターゲットがインスタンス化されていることを知っているので、-1をクローンメディエータと設定できます。 completeConditionが真(仲介メディエータが呼び出された最後の時刻)のとき、 "onComplete"部分が実行されます –
私はいくつかのテストを行いましたが、集計からペイロードを取得することはありません。元のペイロード。理由は私がプロキシではなく、通常の順序でこれを使用しているということでしょうか? – Nicolas