Wso2 迭代中介几乎总是发送重复的负载

Wso2 迭代中介几乎总是发送重复的负载,wso2,wso2esb,Wso2,Wso2esb,我们正在尝试一个场景,在该场景中,我们希望迭代节点列表,并使用每个单独的请求负载对某个服务进行POST调用。我们看到迭代中介实际上在该调用中发送了两个元素,并且 这会导致API端出现问题 我在本地部署了一个模拟服务,它返回响应,比如: <result> <row> <product_id>8351</product_id> <event_key>17708</event_key> &

我们正在尝试一个场景,在该场景中,我们希望迭代节点列表,并使用每个单独的请求负载对某个服务进行POST调用。我们看到迭代中介实际上在该调用中发送了两个元素,并且 这会导致API端出现问题

我在本地部署了一个模拟服务,它返回响应,比如:

<result>
   <row>
      <product_id>8351</product_id>
      <event_key>17708</event_key>
      <event_code>AEONBM</event_code>
      <show_title>Some Show</show_title>
      <venue_name>Eugene ONeill Theatre</venue_name>
      <area>ORCHC</area>
      <row>C</row>
      <seat_num>103</seat_num>
      <seat_increment>1</seat_increment>
      <marketing_code>PREMIUM</marketing_code>
      <Cost>352.0000</Cost>
   </row>
   <row>
      <product_id>8351</product_id>
      <event_key>17708</event_key>
      <event_code>AEONBM</event_code>
      <show_title>Some Show</show_title>
      <venue_name>Eugene ONeill Theatre</venue_name>
      <area>ORCHC</area>
      <row>C</row>
      <seat_num>104</seat_num>
      <seat_increment>1</seat_increment>
      <marketing_code>PREMIUM</marketing_code>
      <Cost>352.0000</Cost>
   </row
</result>

8351
17708
AEONBM
一些节目
尤金·奥尼尔剧院
奥奇
C
103
1.
溢价
352
8351
17708
AEONBM
一些节目
尤金·奥尼尔剧院
奥奇
C
104
1.
溢价
352
ORCHCD104NONE
--------------------------------------
2014-04-22 19:01:51468[e14f#fbf/http://www.srwd30.com/listings/v1/]优先级=警告应用程序_name=共享stubhubjobs线程=http-0.0.0-
8080-8 location=AbstractJAXBProvider line=112 javax.xml.bind.unmarshaleException
-除此之外:
[com.ctc.wstx.exc.WstxParsingException:拥有多个根(epilog中的开始标记?)是非法的。
在[row,col{unknown source}]:[1291]]

从外观上看,当我发出send调用时,迭代器正在发送两个元素。我是错过了什么还是做错了什么?如何使每个调用彼此独立?

将日志放在迭代器中介器之前,查看从端点接收到的内容。它可能包含重复的条目。然后在iterate中有另一个日志中介。检查记录是否正确

我通过使用urn:test值添加一个操作头来解决这个问题。我意识到这会导致发送重复的请求,有时即使迭代器有大约10条记录,也只发送一个请求

    <proxy name="PushInventory"
      transports="https http"
      startOnLoad="true"
      trace="disable">
  <description/>
  <target>
     <inSequence>
        <log level="full">
           <property name="STATUS"
                     value="+++++++++++++++++ Inside PushInventory Proxy Service ++++++++++++++++++"/>
        </log>
        <iterate xmlns:tem="http://tempuri.org"
                 xmlns:ns="http://org.apache.synapse/xsd"
                 id="pushInventoryIterator"
                 expression="//result/row"
                 sequential="true">
           <target>
              <sequence>
                 <payloadFactory media-type="xml">
                    <format>
                       <listing xmlns="">
                          <eventId>$1</eventId>
                          <eventDescription>$2</eventDescription>
                          <pricePerTicket>
                             <amount>$3</amount>
                             <currency>USD</currency>
                          </pricePerTicket>
                          <quantity>$4</quantity>
                          <section>$5</section>
                          <rows>$6</rows>
                          <seats>$7</seats>
                          <splitOption>NONE</splitOption>
                       </listing>
                    </format>
                    <args>
                       <arg evaluator="xml" expression="//event_key"/>
                       <arg evaluator="xml" expression="//show_title"/>
                       <arg evaluator="xml" expression="//Cost"/>
                       <arg evaluator="xml" expression="//seat_increment"/>
                       <arg evaluator="xml" expression="//area"/>
                       <arg evaluator="xml" expression="//row_desc"/>
                       <arg evaluator="xml" expression="//seat_num"/>
                    </args>
                 </payloadFactory>
                 <log level="full">
                    <property name="STATUS"
                              value="++++++++++++ Invoking Listing EndPoint ++++++++++++++"/>
                 </log>
                 <property name="Authorization"
                           value="Basic dafdsfadsfdsafdsfdsafdsafsdfadsf"
                           scope="transport"
                           type="STRING"/>
                 <property name="Content-Type"
                           value="application/xml"
                           scope="transport"
                           type="STRING"/>
                 <property name="messageType"
                           value="application/xml"
                           scope="axis2"
                           type="STRING"/>
                 <property name="HTTP_METHOD" value="POST" scope="transport" type="STRING"/>
                 <header name="Action" scope="default" value="urn:test"/>
                 <send>
                    <endpoint key="ListingEndPoint"/>
                 </send>
              </sequence>
           </target>
        </iterate>
     </inSequence>
     <outSequence>
        <log level="full">
           <property name="STATUS"
                     value="+++++++++++++++++ Inside OutSequence of PushInventory ++++++++++++++++++"/>
        </log>
        <aggregate>
           <completeCondition>
              <messageCount min="10" max="10"/>
           </completeCondition>
           <onComplete xmlns:ns2="com.blah.blah" expression="//listing">
              <log level="full" separator=",">
                 <property name="STATUS"
                           value="+++++++++++++++++ Aggregating responses back ++++++++++++++++++"/>
              </log>
              <enrich>
                 <source type="envelope" clone="true"/>
                 <target type="body"/>
              </enrich>
              <send/>
           </onComplete>
        </aggregate>
     </outSequence>
  </target>
    </proxy>

$1
$2
$3
美元
$4
$5
$6
$7
没有一个

Hi Ratha,我能够在日志中正确地看到有效负载,但是迭代器中的send调用总是一次发送两条记录,对于其余记录,它根本不进行调用。我可以分享我的synapse,如果你想在本地运行它,如果我遗漏了一些重要信息,请告诉我。是的,如果没有任何敏感信息,请分享。到目前为止,我们还没有在iterate mediator中遇到过这样的问题。
<sequence xmlns="http://ws.apache.org/ns/synapse" name="createListingsFromGetLocationResponseSequence">
   <iterate xmlns:tem="http://tempuri.org" xmlns:ns="http://org.apache.synapse/xsd" expression="//result/row">
      <target>
         <sequence>
            <log level="full">
               <property name="LocationRow" value="Row element from GetLocationResponse"></property>
            </log>
            <payloadFactory media-type="xml">
               <format>
                  <listing xmlns="">
                     <eventId>$1</eventId>
                     <eventDescription>$2</eventDescription>
                     <pricePerTicket>
                        <amount>$3</amount>
                        <currency>USD</currency>
                     </pricePerTicket>
                     <quantity>$4</quantity>
                     <section>$5</section>
                     <rows>$6</rows>
                     <seats>$7</seats>
                     <splitOption>NONE</splitOption>
                  </listing>
               </format>
               <args>
                  <arg expression="//event_key" evaluator="xml"></arg>
                  <arg expression="//show_title" evaluator="xml"></arg>
                  <arg expression="//Cost" evaluator="xml"></arg>
                  <arg expression="//seat_increment" evaluator="xml"></arg>
                  <arg expression="//area" evaluator="xml"></arg>
                  <arg expression="//row/row" evaluator="xml"></arg>
                  <arg expression="//seat_num" evaluator="xml"></arg>
               </args>
            </payloadFactory>
            <log level="full">
               <property name="ListingRequest" value="Listing request xml"></property>
            </log>
            <property name="Content-Type" value="application/xml" scope="transport" type="STRING"></property>
            <property name="messageType" value="application/xml" scope="transport" type="STRING"></property>
            <property name="TARGET_HOST" value="srwd30" scope="transport" type="STRING"></property>
            <property name="HTTP_METHOD" value="POST" scope="transport" type="STRING"></property>
            <send>
               <endpoint>
                  <http format="pox" method="post" uri-template="http://www.srwd30.com/listings/v1/"></http>
               </endpoint>
            </send>
         </sequence>
      </target>
   </iterate>
</sequence>
[2014-04-22 13:29:42,020]  INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:3bc14a33-3a7a-478e-bdbf-720f1ec855a5, Direction: response, LocationRow = Row element from GetLocationResponse, Envelope: <?xml version="1.0" encoding="utf-8
"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><row>
      <product_id>8351</product_id>
      <event_key>17708</event_key>
      <event_code>AEONBM</event_code>
      <show_title>Some Show</show_title>
      <venue_name>Eugene ONeill Theatre</venue_name>
      <area>ORCHC</area>
      <row>D</row>
      <seat_num>103</seat_num>
      <seat_increment>1</seat_increment>
      <marketing_code>PREMIUM</marketing_code>
      <Cost>352.0000</Cost>
   </row></soapenv:Body></soapenv:Envelope>
[2014-04-22 13:29:42,021]  INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:0e04ac15-a0bf-41a3-a7d7-80a1401d3efc, Direction: response, ListingRequest = Listing request xml, Envelope: <?xml version="1.0" encoding="utf-8"?><soapenv:En
velope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><listing><eventId>17708</eventId><eventDescription>Some Show</eventDescription><pricePerTicket><amount>352.0000</amount><currency>USD</currency></pricePerTicket><quantity>1</quantity><section>ORCHC</section><rows
>C</rows><seats>103</seats><splitOption>NONE</splitOption></listing></soapenv:Body></soapenv:Envelope>
Content-Type: application/xml
Headers: {cache-control=[no-cache], connection=[Keep-Alive],
content-type=[application/xml], host=[www.srwd30.com], http_method=[POST], messagetype=[application/xml], target_host=[srwd30], transfer-encoding=
[chunked], user-agent=[Synapse-PT-HttpComponents-NIO]}
Payload: <listing><eventId>17708</eventId><eventDescription>Some Show</eventDescription><pricePerTicket><amount>352.0000</amount><currency>USD</currenc
y></pricePerTicket><quantity>1</quantity><section>ORCHC</section><rows>C</rows><seats>103</seats><splitOption>NONE</splitOption></listing><listing><eventId>1770
8</eventId><eventDescription>Some Show</eventDescription><pricePerTicket><amount>352.0000</amount><currency>USD</currency></pricePerTicket><quantity>1<
/quantity><section>ORCHC</section><rows>D</rows><seats>104</seats><splitOption>NONE</splitOption></listing>
--------------------------------------
2014-04-22 19:01:51,468 [e14f#fbf/http://www.srwd30.com/listings/v1/] priority=WARN  app_name=shared-stubhubjobs thread=http-0.0.0.0-
8080-8 location=AbstractJAXBProvider line=112 javax.xml.bind.UnmarshalException
 - with linked exception:
[com.ctc.wstx.exc.WstxParsingException: Illegal to have multiple roots (start tag in epilog?).
 at [row,col {unknown-source}]: [1,291]]
    <proxy name="PushInventory"
      transports="https http"
      startOnLoad="true"
      trace="disable">
  <description/>
  <target>
     <inSequence>
        <log level="full">
           <property name="STATUS"
                     value="+++++++++++++++++ Inside PushInventory Proxy Service ++++++++++++++++++"/>
        </log>
        <iterate xmlns:tem="http://tempuri.org"
                 xmlns:ns="http://org.apache.synapse/xsd"
                 id="pushInventoryIterator"
                 expression="//result/row"
                 sequential="true">
           <target>
              <sequence>
                 <payloadFactory media-type="xml">
                    <format>
                       <listing xmlns="">
                          <eventId>$1</eventId>
                          <eventDescription>$2</eventDescription>
                          <pricePerTicket>
                             <amount>$3</amount>
                             <currency>USD</currency>
                          </pricePerTicket>
                          <quantity>$4</quantity>
                          <section>$5</section>
                          <rows>$6</rows>
                          <seats>$7</seats>
                          <splitOption>NONE</splitOption>
                       </listing>
                    </format>
                    <args>
                       <arg evaluator="xml" expression="//event_key"/>
                       <arg evaluator="xml" expression="//show_title"/>
                       <arg evaluator="xml" expression="//Cost"/>
                       <arg evaluator="xml" expression="//seat_increment"/>
                       <arg evaluator="xml" expression="//area"/>
                       <arg evaluator="xml" expression="//row_desc"/>
                       <arg evaluator="xml" expression="//seat_num"/>
                    </args>
                 </payloadFactory>
                 <log level="full">
                    <property name="STATUS"
                              value="++++++++++++ Invoking Listing EndPoint ++++++++++++++"/>
                 </log>
                 <property name="Authorization"
                           value="Basic dafdsfadsfdsafdsfdsafdsafsdfadsf"
                           scope="transport"
                           type="STRING"/>
                 <property name="Content-Type"
                           value="application/xml"
                           scope="transport"
                           type="STRING"/>
                 <property name="messageType"
                           value="application/xml"
                           scope="axis2"
                           type="STRING"/>
                 <property name="HTTP_METHOD" value="POST" scope="transport" type="STRING"/>
                 <header name="Action" scope="default" value="urn:test"/>
                 <send>
                    <endpoint key="ListingEndPoint"/>
                 </send>
              </sequence>
           </target>
        </iterate>
     </inSequence>
     <outSequence>
        <log level="full">
           <property name="STATUS"
                     value="+++++++++++++++++ Inside OutSequence of PushInventory ++++++++++++++++++"/>
        </log>
        <aggregate>
           <completeCondition>
              <messageCount min="10" max="10"/>
           </completeCondition>
           <onComplete xmlns:ns2="com.blah.blah" expression="//listing">
              <log level="full" separator=",">
                 <property name="STATUS"
                           value="+++++++++++++++++ Aggregating responses back ++++++++++++++++++"/>
              </log>
              <enrich>
                 <source type="envelope" clone="true"/>
                 <target type="body"/>
              </enrich>
              <send/>
           </onComplete>
        </aggregate>
     </outSequence>
  </target>
    </proxy>