【问题标题】:WSO2 ESB From XML (multiple lines) to JSON (without wrappers)WSO2 ESB 从 XML(多行)到 JSON(没有包装器)
【发布时间】:2018-05-14 21:05:04
【问题描述】:

我希望在这里找到帮助...这是特殊情况: 我从我的 Endpoint 获得了这个 XML:

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

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

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

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

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

有人知道怎么做吗?
非常感谢!

【问题讨论】:

标签: wso2 wso2esb wso2ei


【解决方案1】:

我认为您必须首先操作您的 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>

【讨论】:

    【解决方案2】:

    谢谢 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>$1</format>
            <args>
                <arg evaluator="xml" expression="$ctx:result"/>
            </args>
        </payloadFactory>
    </sequence>
    

    它运行得非常好,我什至改变了我所有代理的顺序,即使是那些只返回 1 个结果的代理。

    非常感谢你的灯!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      相关资源
      最近更新 更多