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