Mule: Is there simple way of converting XML to JSON Mule: Is there simple way of converting XML to JSON json json

Mule: Is there simple way of converting XML to JSON


This what I ended up doing --

  <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>

Here is XmlToJson.java --

import org.json.XML;import org.mule.api.transformer.TransformerException;import org.mule.transformer.AbstractTransformer;public class XmlToJson extends AbstractTransformer{@Overrideprotected Object doTransform(Object src, String enc)        throws TransformerException {    JSONObject jsonObj = XML.toJSONObject((String) src);            return  jsonObj.toString();}}


Here's the implementation using link 1 from Pontus and FasterXML/Jackson

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;}@Overridepublic int getPriorityWeighting() {    return 0;}@Overridepublic void setPriorityWeighting(int weighting) {}}

The flow could look something like this:

<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>