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

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

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

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

【问题讨论】:

    标签: xml json mule


    【解决方案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】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-08
          • 2022-07-08
          • 2019-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-07
          • 2020-12-02
          相关资源
          最近更新 更多