如何使用WSO2 ESB XPath检索整个XML元素而不是其文本值

时间:2013-11-05 14:42:44

标签: wso2 wso2esb

我的WSO2 ESB代理服务收到以下请求:

  <ReadFormRequest>
     <formID>1470</formID>
     <name>ConstructionForm</name>
  </ReadFormRequest>

我需要将ReadFormRequest更改为GetFormRequest并将其发送到端点。

这是我应该做的工作的PayloadFactory代码:

<payloadFactory media-type="xml">
    <format>
        <GetFormRequest>
            $1
        </GetFormRequest>
    </format>
    <args>
        <arg evaluator="xml" expression="$body/ReadFormRequest/*"/>
    </args>
</payloadFactory>

问题是我的XPath表达式“$ body / ReadFormRequest / *”返回子元素的值而不是实际的元素。因此,我得到以下结果:

<GetFormRequest>
 1470ConstructionForm
</GetFormRequest>

根据XPath文档,此查询应返回元素,但似乎WSO2会检索元素值。

2 个答案:

答案 0 :(得分:1)

我花了一点时间尝试通过xpath做到这一点,我不认为这是可能的。我要么和你一样,要么

<GetFormRequest>
  <ReadFormRequest>
     <formID>1470</formID>
     <name>ConstructionForm</name>
  </ReadFormRequest>
</GetFormRequest>

您是否考虑过XSLT mediator

答案 1 :(得分:0)

如果你有一个包含那些元素的根元素,你可以检索整个xml元素。

前:

<ReadFormRequest>
     <a>
        <formID>1470</formID>
        <name>ConstructionForm</name>
     </a>
</ReadFormRequest>

因此,您可以使用XSLT介体或通过参数设置每个子元素来使用Payload Factory介体。

 <payloadFactory>
    <format>
       <GetFormRequest xmlns="">
          <formID>$1</formID>
          <name>$2</name>
       </GetFormRequest>
    </format>
    <args>
       <arg expression="$body/ReadFormRequest/formID"/>
       <arg expression="$body/ReadFormRequest/name"/>
    </args>
 </payloadFactory>