WSO2 ESB 从 XML(多行)到 JSON(无包装)

WSO2 ESB From XML (multiple lines) to JSON (without wrappers)

我希望能在这里找到帮助...这是特殊情况: 我从端点得到这个 XML:

<Entries>
    <Entry>
        <Customer>1</Customer>
    </Entry>
    <Entry>
        <Customer>2</Customer>
    </Entry>
<Entries>

我可以通过更改 属性 messageType 轻松地将此 XML 转换为 JSON,这将导致:

{"Entries":{"Entry":[{"Customer": 1}, {"Customer": 2}]}}

这是我想要得到的 JSON 结果(没有包装器):

[{"Customer": 1}, {"Customer": 2}]

有知道的人吗?
非常感谢!

我认为您必须首先操纵您的 xml(可能使用 xslt 调解器)以这种方式格式化它

<jsonArray>
    <Customer>1</Customer>
    <Customer>2</Customer>
</jsonArray>

那么我猜你会得到预期的输出。

例如下面的 xslt 可以完成这项工作

<xsl:stylesheet exclude-result-prefixes="xsl" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="utf-8" indent="yes" method="xml" omit-xml-declaration="yes"/>     
    <xsl:template match="/Entries">
        <xsl:element name="jsonArray">
            <xsl:copy-of select="./Entry/Customer" />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

谢谢 Anuruddha 和 Nicolas!
你的回答启发了我,我想分享我所做的。

我创建了这个序列,我将其与序列调解器一起重复使用:

<sequence name="toJSON" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
    <property name="result" scope="default" type="STRING" expression="json-eval($.Entries.Entry)"/>
    <payloadFactory media-type="json">
        <format></format>
        <args>
            <arg evaluator="xml" expression="$ctx:result"/>
        </args>
    </payloadFactory>
</sequence>

它工作得很好,我什至改变了我所有代理的顺序,甚至那些 returns 只有 1 个结果的代理。

非常感谢你的灯!!