【问题标题】:XML to JSON in Camel Routing not working骆驼路由中的 XML 到 JSON 不起作用
【发布时间】:2016-03-14 22:31:07
【问题描述】:

我正在尝试使用骆驼路由器将 XML 消息转换为 JSON 并将其保存到文件中。从源获取 XML 消息并将其保存到目标文件等正在工作。但是当我尝试转换为 JSON 时,它不起作用。我什至没有在日志中抛出任何错误/异常。我在 OSGI 容器上运行

    public class CamelRouter extends RouteBuilder {

    @Override
    public void configure() throws Exception {
         from("file://C:/test/Sample.xml")
            .routeId("file-to-file")
               .log(LoggingLevel.INFO,"RouteID file-to-file !!!!! starting")                   
               //From XML to JSON
               .bean(CamelRouter.class, "convertXmlToJson")
               .log(LoggingLevel.INFO,"From XML to JSON !!!!! Done")
               .to("file://C:/test/JSONMessages")
               .log(LoggingLevel.INFO,"Converted Message Saved successfully");

将XML转成JSON的bean方法convertXmlToJson如下图

public String convertXmlToJson(String msg) {
        log.info("NOW calling JSON conversion");
        String jsonStr = null;
        log.info("MESSAGE conversion starting : ");  //After this message nothing happened
        XMLSerializer xmlReader =  new XMLSerializer();
        log.info("MESSAGE before conversion : " + msg);
        jsonStr = xmlReader.read(msg).toString();
        log.info("JSON data : " + jsonObj.toString());

        return jsonObj.toString();
    }

有谁知道它为什么不执行 XMLSerializer 部分。我尝试了这种方法,因为 camel-xmljson 的 ma​​rshal().xmljson() 调用也给了我相同的结果。在我的骆驼路由中调用 xmljson() 之后什么也没发生。 我检查的事情是:

  • camel-xmljson 功能在 OSGI 中启动并运行
  • 我的 pom 文件中添加了 Apache XmlJSON 网站中提到的依赖项,xom,camel-xmljson 等。

我在这里遗漏了什么吗?请帮忙

【问题讨论】:

  • 你能把 JSON 字符串传递给函数并让它在独立模式下转换为 XML 吗?
  • 我试图将 XML 字符串转换为 JSON,我可以将 XML 传递给这个函数,它在独立模式下转换为 JSON 没有问题。但不能在骆驼路由中工作。

标签: json xml apache-camel


【解决方案1】:

您的代码路由的问题在于您的 bean component 处理程序方法驻留在您的路由构建器类中,而且您以触发该路由构建器类的另一个实例化的方式调用 bean 组件。

就个人而言,我会将convertXmlToJson 移至适当的实用程序类。这样,您可以减少路由构建器中的关注点,并且 bean 组件应该可以正常工作。

或者,如果您像这样调用 bean 组件,您的路由可能可以工作:

  .bean(this, "convertXmlToJson")

【讨论】:

  • 我尝试将转换方法移动到一个 util 类中并像这样调用 bean:.bean(new ConversionUtil(), "convertXmlToJson") 什么也没发生。我的 util 类方法中是否需要 @Handler 注释?
  • 如果添加@Handler,可以去掉“convertXmlToJson”。除此之外,它不是必需的,您的调用看起来是正确的。
  • 我将 XML 转换为 POJO,然后使用 marshal().json(JsonLibrary.Jackson) 转换为 JSON 。所以它就是这样工作的。但我想知道 marshal().xmljson() 是如何工作的。我几乎尝试了 Apache 网站上的所有指令,但没有任何效果。还有其他技巧可以使这项工作吗?这样我就不必担心将 XML 转换为适当的 POJO。
猜你喜欢
  • 2017-07-06
  • 2017-03-10
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多