[英]WSO2 API PayloadFactory mediator XML array to JSON array
我正在尝试使用WSO2-AM在客户端和服务器之间构建代理。 最终目标是将服务器发送的响应内容更改为客户端可以理解的格式。 因此,我使用PayloadFactory编写了一个自定义介体。 当服务器仅发送1个元素时,这可以正常工作,但是服务器可以发送多个元素。 我正在尝试使用迭代器来迭代所有元素,并对每个元素使用有效负载工厂,但这仅返回第一个元素,或者(当服务器的响应包含在根元素中时)返回最后一个元素。
服务器输出看起来像这样:
<Monitoring>
<Line>
<Id>1</Id>
</Line>
<LocationPoint>
<Direction>
<Id>11</Id>
</Direction>
<DistanceFromPoint>1111</DistanceFromPoint>
<Point>
<Id>11111</Id>
</Point>
</LocationPoint>
</Monitoring>
<!-- Repeated 0 ... x times -->
我应用了如下所示的介子:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="NAME">
<iterate
preservePayload="true"
expression="//Monitoring"
id="MONITORING_ITERATOR">
<target>
<sequence>
<payloadFactory media-type="json">
<format>
{
"LineId":"$1",
"DirectionId":"$2",
"DistanceFromPoint":"$3",
"PointId":"$4"
}
</format>
<args>
<arg expression="//Line/Id"/>
<arg evaluator="xml" expression="//Direction/Id"/>
<arg evaluator="xml" expression="//DistanceFromPoint"/>
<arg evaluator="xml" expression="//Point/Id"/>
</args>
</payloadFactory>
<send />
</sequence>
</target>
</iterate>
<property name="messageType" expression="get-property('default', 'WSO2_AM_API_ACCEPT_MESSAGE_TYPE')" scope="axis2"/>
</sequence>
因此,我的预期输出将是在格式标签之间声明的json对象的数组。 但是,仅输出1个元素。 我想念什么?
编辑:我也想基于ACCEPT标头动态地获取json或xml响应。 通常,可以通过将标题保存在IN流中,然后使用
<property name="messageType" expression="get-property('default', 'WSO2_AM_API_ACCEPT_MESSAGE_TYPE')" scope="axis2"/>
但这似乎在这里也不起作用。
由于您是直接将xml元素映射到json元素(不更改结构),因此您只需更改序列中消息的内容类型,api管理器(api管理器中的esb)就会自动将xml转换为json消息为您。 您无需使用迭代工厂或负载工厂调解器
<sequence xmlns="http://ws.apache.org/ns/synapse" name="xml_to_json_out_message">
<property name="messageType" value="application/json" scope="axis2"/>
</sequence>
这会将xml转换为json
在深入搜索答案之后,我没有找到与我的问题相关的任何示例。 我现在使用用Java编写的类介体。 Tis不仅更灵活,而且更易于调试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.