您好我正在尝试使用Script Mediator来执行SOAP - > JSON转换
<ns:getTestMethodResponse xmlns:ns="http://main.wsmediator">
<ns:return>getTestMethod is called</ns:return>
</ns:getTestMethodResponse>
这是我从我创建的测试服务收到的响应的一部分。问题是我无法获得WO2 ESB文档中提到的元素数据。 这是
mc.getPayloadXML()..::return.toString();
我甚至尝试过
mc.getPayloadXML()..::ns:return.toString();
我在这里做错了什么? 感谢帮助。
答案 0 :(得分:1)
E4X可识别名称空间,因此要访问非默认名称空间中的元素,您需要声明名称空间/前缀或使用通配符*。
编辑:ESB中的一些调试本身告诉我,我们不能使用&#34; return&#34;这个词。这是一个保留字,不允许,甚至不作为查询字符串的一部分来检索&#34; return&#34;来自xml的元素。
让我们暂时假设元素被调用&#34;值&#34;相反,然后代码将编译并按如下方式工作:
var ns = new Namespace('http://main.wsmediator');
var xmlValue = mc.getPayloadXML()..ns::value.toString();
另一种选择是使用通配符:
var return = mc.getPayloadXML()..*::value.toString();
然而,将xml有效负载更改为符合JavaScript标准并不是一个非常漂亮,可能不是一个可行的解决方案。相反,我们可以尝试以另一种方式访问元素。
<inSequence>
<script language="js">
var ns = new Namespace('http://main.wsmediator');
var value = mc.getPayloadXML().*.toString();
mc.setProperty("Asterisk", value);
</script>
<log>
<property name="Asterisk" expression="get-
property('Asterisk')"/>
</log>
<respond/>
</inSequence>
当你执行mc.getPayloadXML()时,getTestMethodResponse元素是根元素,星号为你提供了这个元素的子元素。这可行,但不是很漂亮,因为它基于对消息结构的一些假设。
另一个选择可能是完全放弃使用脚本调解器并使用PayloadFactory。例如:
<payloadFactory media-type="json">
<format>
{"return":"$1"}
</format>
<args>
<arg xmlns:ns="http://main.wsmediator"
evaluator="xml"
expression="//ns:return"/>
</args>
</payloadFactory>