如何插入soap:将body内容作为子项添加到另一个标记中

时间:2014-01-31 13:18:06

标签: wso2 wso2esb

我有以下肥皂:身体

<soapenv:Body>
   <Message>
      <Context>
         <id>10</id>
         <subject>sub10</subject>
         <body>body10</body>
      </Context>
   </Message>
</soapenv:Body>

但是我需要在发送到请求之前在<SendMessageRequest>标记内插入内容:

<soapenv:Body>
    <SendMessageRequest>
       <Message>
          <Context>
             <id>10</id>
             <subject>sub10</subject>
             <body>body10</body>
          </Context>
       </Message>
    </SendMessageRequest>
</soapenv:Body>

我正在使用Enrich Mediator,但没有想出如何做到这一点...... 这里是我正在尝试的代码:

<enrich>
    <source type="body"/>
    <target action="child" type="custom" xpath="SendMessageRequest"/>
</enrich>

1 个答案:

答案 0 :(得分:3)

您无法直接添加中间元素。那是一个包装你当前内容的那个。相反,您可以将要包装的内容存储在属性中。注意使用$body xpath变量(由SynapseXPath类提供),它引用了soap body元素,而不管使用过的soap版本。

<property name="payload" expression="$body/*[1]" type="OM"/>

然后使用PayloadFactory介体构建新的请求存根:

<payloadFactory>
  <format>
    <SendMessageRequest xmlns=""/>
  </format>
  <args/>
</payloadFactory>

随后,您可以将以前的内容丰富到新创建的有效负载中。

<enrich>
  <source clone="true" property="payload" type="property"/>
  <target action="child" type="custom" xpath="$body/SendMessageRequest"/>
</enrich>