Mule:有没有将 XML 转换为 JSON 的简单方法

Posted

技术标签:

【中文标题】Mule:有没有将 XML 转换为 JSON 的简单方法【英文标题】:Mule: Is there simple way of converting XML to JSON 【发布时间】:2014-01-10 10:22:06 【问题描述】:

有没有将 XML 转换为 JSON 的简单方法,而无需先将 XML 绑定到 java 对象?

就像这样—— http://www.utilities-online.info/xmltojson/#.UrXnCvRDt0w

如果可能的话,我不想维护 XML 架构。

【问题讨论】:

【参考方案1】:

在 Mule ESB 中使用 XML 到 Json 转换器或使用 Dataweave 转换器。

【讨论】:

【参考方案2】:

这就是我最终做的——

  <custom-transformer class="com.mycompany.transformer.XmlToJson" name="XmlToJson" doc:name="Java"/>

  <flow name="HTTP" doc:name="HTTP">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="test" doc:name="HTTP" contentType="application/json"/>
    <http:outbound-endpoint exchange-pattern="request-response" method="GET" address="http://server-address.com" doc:name="service-call"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <transformer ref="XmlToJson" doc:name="Transformer Reference"/>
</flow>

这里是 XmlToJson.java --

import org.json.XML;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractTransformer;

public class XmlToJson extends AbstractTransformer

@Override
protected Object doTransform(Object src, String enc)
        throws TransformerException 
    JSONObject jsonObj = XML.toJSONObject((String) src);
            return  jsonObj.toString();


【讨论】:

你使用什么库?我将这些添加到我的项目中: org.jsonjson20140107【参考方案3】:

这是使用来自 Pontus 和 FasterXML/Jackson 的链接 1 的实现

import java.util.List;

import org.codehaus.jackson.map.ObjectMapper;
import org.mule.api.MuleMessage;
import org.mule.api.transformer.DiscoverableTransformer;
import org.mule.api.transformer.TransformerException;
import org.mule.transformer.AbstractMessageTransformer;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class XmlToJsonTransformer extends AbstractMessageTransformer implements
   DiscoverableTransformer 

public Object transformMessage(MuleMessage message, String outputEncoding)
        throws TransformerException 

    try 
        String xml = (String) message.getPayload();

        XmlMapper xmlMapper = new XmlMapper();
        List entries = xmlMapper.readValue(xml, List.class);

        ObjectMapper jsonMapper = new ObjectMapper();
        String json = jsonMapper.writeValueAsString(entries);
        return json;
     catch (Exception e) 
        System.out.println("Error: " + e);
        e.printStackTrace();
    
    return null;


@Override
public int getPriorityWeighting() 
    return 0;


@Override
public void setPriorityWeighting(int weighting) 


流程可能如下所示:

<flow name="xmltojsontransformerFlow1" doc:name="xmltojsontransformerFlow1">
    <quartz:inbound-endpoint jobName="job"
        repeatInterval="0" repeatCount="0" startDelay="300" responseTimeout="10000"
        doc:name="Quartz">
        <quartz:event-generator-job />
    </quartz:inbound-endpoint>
    <parse-template
        location="/Users/tjs/MuleStudio/workspace3/xmltojsontransformer/src/main/resources/cd_catalog.xml"
        doc:name="Parse Template" />
    <custom-transformer class="cc.notsoclever.mule.XmlToJsonTransformer" doc:name="XmlToJson"/>
    <logger message="#[payload]" level="INFO" doc:name="Logger" />
</flow>

【讨论】:

【参考方案4】:

您可以基于 json-lib[2] 构建自定义转换器[1]。

[1]http://www.mulesoft.org/documentation/display/current/Creating+Custom+Transformers

[2]http://json-lib.sourceforge.net/

【讨论】:

以上是关于Mule:有没有将 XML 转换为 JSON 的简单方法的主要内容,如果未能解决你的问题,请参考以下文章

将 Mule 应用程序转换为可部署的 WAR

将 JSON 格式的文件发送到 Mule 3.8 中的 REST 服务

通过 Mule 4 发送电子邮件时 JSON 数组到表结构格式

使用 Java 将 xml 转换为 json

使用 Javascript 将 XML 转换为 JSON(并返回)

使用 Javascript 将 XML 转换为 JSON(并返回)