1

我的 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 检索元素值。

4

2 回答 2

1

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

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

您是否考虑过XSLT 中介

于 2013-11-05T15:39:28.727 回答
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>
于 2013-11-06T05:39:22.877 回答