WSO2 ESB, Как объединить 2 сообщения, используя агрегатный медиатор или любой другой медиатор - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в WSO2 Enterprise Integrator.
Мне тяжело комбинировать эти два сообщения с помощью совокупного посредника.
Я поместил свое первое сообщение в свойстве, чтобы я мог получить доступ к отдельным значениям (есть ли другой способ сделать это?)
Требуемый вывод в формате json.(Я пробовал for each, но он только зацикливается в сообщениях цикла 2 сообщения.)

Входное сообщение 1:

{
  "customerId": "ABC123",
  "channelNo": "1",
  "codename": "code123"
}

Входное сообщение 2:

{
  "lnsAcctInfo": [
    {
      "acctno": "101991100000012",
      "custid": "2018111400000002",
      "acctype": null,
      "ccy": null,
      "name": null,
      "prdcode": "300"
    },
    {
      "acctno": "101991100000022",
      "custid": "2018111400000052",
      "acctype": 1,
      "ccy": 1,
      "name": 1,
      "prdcode": "300"
    }
  ]
}

Требуется вывод:

{
  "customerId": "ABC123",
  "codename": "code123",
  "lnsAcctInfo": [
    {
      "acctno": "101991100000012",
      "custid": "2018111400000002",
      "acctype": null
    },
    {
      "acctno": "101991100000022",
      "custid": "2018111400000052",
      "acctype": 1
    }
  ]
}

Вот код синапса:

<resource methods="POST" uri-template="/foreach">
  <inSequence>
    <log>
      <property expression="json-eval($)" name="RecievedPostMessage" />
    </log>
    <property name="customid" scope="default" type="STRING" value="sampleuserid" />
    <payloadFactory description="payload-xml" media-type="xml">
      <format>
        <lnsAcctInfo xmlns="">$1</lnsAcctInfo>
      </format>
      <args>
        <arg evaluator="json" expression="$.lnsAcctInfo[*]" />
      </args>
    </payloadFactory>
    <log>
      <property expression="." name="payload1" />
    </log>
    <iterate expression="//lnsAcctInfo/jsonElement" id="1">
      <target>
        <sequence>
          <log>
            <property expression="." name="Iterate" />
          </log>
          <aggregate>
            <completeCondition>
              <messageCount max="-1" min="-1" />
            </completeCondition>
            <onComplete expression="//jsonElement">
              <log>
                <property expression="." name="aggre" />
              </log>
            </onComplete>
          </aggregate>
        </sequence>
      </target>
    </iterate>
    <log>
      <property expression="." name="overall" />
    </log>
    <respond />
  </inSequence>
  <outSequence>
    <send />
  </outSequence>
  <faultSequence />
</resource>
...