调用Web服务时保留原始有效负载

时间:2016-12-26 20:19:59

标签: wso2 wso2esb

我正在努力弄清楚如何保留有效负载,以便在序列中调用Web服务后可以使用它。

例如,按照以下顺序,在“call”介体触发后,将有效负载更改为Web服务返回的内容。

我要做的是使用从Web服务调用返回的数据来丰富原始有效负载。

非常感谢所有帮助。

<log level="full"/>
<payloadFactory media-type="xml">
  <format>
    <Flight xmlns="">
      <location_id>$1</location_id>
      <FlightDistance/>
      <Aircraft>
        <AircraftAbbr/>
        <LandingDistance/>
        <TakeoffDistance/>
        <AircraftRange/>
        <AirframeHours/>
      </Aircraft>
      <Runways>
        <Airport/>
      </Runways>
    </Flight>
  </format>
  <args>
    <arg evaluator="xml" expression="get-property('OriginAirport')"/>
  </args>
</payloadFactory>
<log level="full">
  <property expression="get-property('OriginalPayload')" name="OriginalPayload"/>
</log>
<call blocking="true" description="">
  <endpoint key="GetRunways"/>
</call>
<foreach expression="//d:Entries/d:Entry" id="feid" xmlns:d="http://ws.wso2.org/dataservice">
  <sequence>
    <log description="" level="full">
      <property name="marker" value="marker"/>
    </log>
    <property expression="$body/Entry/runway_length" name="RunwayLength" scope="default" type="STRING"/>
    <enrich>
      <source clone="true" property="RunwayLength" type="property"/>
      <target action="child" property="RunwayLength" type="property"/>
    </enrich>
    <log>
      <property expression="get-property('RunwayLength')" name="PropertyValue"/>
    </log>
  </sequence>
</foreach>

2 个答案:

答案 0 :(得分:3)

使用rich mediator并将有效负载存储到属性

<enrich>
    <source type="body"/>
    <target type="property" property="REQUEST_PAYLOAD"/>
 </enrich>

https://docs.wso2.com/display/ESB481/Enrich+Mediator

答案 1 :(得分:0)

完成@Jenananthan回答:

  1. 将原始有效负载存储在属性中
  2. 致电网络服务
  3. 将原始有效负载恢复为正文:
  4. &#13;
    &#13;
    <enrich>
        <source clone="false" type="property" property="ORIGINAL_PAYLOAD"/>
        <target action="replace" type="body"/>
    </enrich>
    &#13;
    &#13;
    &#13;