当前位置: 首页 > 知识库问答 >
问题:

用骆驼路线从bean方法返回值生成JSON

娄飞鸾
2023-03-14

我有一个bean,它有一个构造对象列表的方法。我想从POJO的这个列表中生成一个json和jackson。

public class SimpleBean {
     public List<Object> constructObject() {
       List<Object> objects = new ArrayList<>();
       // construct objects
       return objects;
     }
}

然后在我的骆驼路线中,我想从我的bean方法生成json。这里我做了什么,似乎不起作用

@Override
public void configure() throws Exception {
    from("quartz expression")
            .log(LoggingLevel.INFO, LOGGER, "work started")
            .bean(simpleBean, "constructObjects")
            .marshal()
            .json(JsonLibrary.Jackson)
            .to("file:C:/data/export/JSON")
            .setHeader(Exchange.FILE_NAME, constant("test.json"))
            .log(LoggingLevel.INFO, LOGGER, "work completed");
}

camel返回一个UUID不带扩展名且内容为NULL的文件。伙计们,我错过了什么!?

共有1个答案

阎功
2023-03-14

要设置文件名,您必须在调用文件之前设置标题:

        .setHeader(Exchange.FILE_NAME, constant("test.json"))
        .to("file:C:/data/export/JSON")

您的方法名为constructObject,而不是constructObjects,但我认为这是一个输入错误,否则会出现错误。

我无法模拟的NULL。使用以下路由:

public static class SimpleBean {
    public List<Object> constructObject() {
           List<Object> objects = new ArrayList<>();
           objects.add("entry");
           return objects;
         }
}

@Override
protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {

        public void configure() {
            from("direct:start")
            .bean(SimpleBean.class, "constructObject")
            .marshal().json(JsonLibrary.Jackson)
            .setHeader(Exchange.FILE_NAME, constant("test.json"))
            .to("file:C:/tmp/JSON");
        }
    };
}

我得到一个名为test的输出文件。json和内容:

["entry"]
 类似资料:
  • 问题内容: 我一直在仔细研究Apache Camel文档,试图对它的两个 最基本 概念(端点和路由)有一个具体的了解,尽管这些术语在文档中各处都使用,但是我找不到真正定义它们的参考。是以及它们的用途。尽管它们的名称听起来很明显,而且我 想 我理解它们的含义,但是现在我已被分配到一项使我深深陷入Apache Camel Land的任务,而了解这些机制的绝对至关重要是。 我的猜测是,“端点”只是一个b

  • 我通过以下代码以编程方式创建JMS路由: 我有课: 我想在上述路由和endpoint之间交换一些信息/参数。根据我想要的参数值,选择要在这个消息侦听器容器中设置的连接工厂。 请让我知道我是否能够解释我的问题陈述。 还有其他方法可以实现这一点吗?我想在运行时构建连接工厂,路由也是如此。JmsEndpoint 中是否有任何方法可以用来了解路由 id?

  • 我设置了一个endpoint,如下所示: 我用骆驼石英2.22.2和石英1.8.6 下面是从关闭到启动上下文的日志。

  • 问题内容: 我尝试对Apache骆驼路线进行junit测试。像这样的东西: 构建器类的定义如下 “ myExportRouteProcessor”类仅从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。当前,处理器未启动。我该怎么办? 问题答案: 您可以使用AdviceWithRouteBuilder#replaceFromWith直接替换测

  • 我试着为阿帕奇骆驼路线做一个jUnit测试。类似于这样: builder类的定义如下 myExportRouteProcencer类只是从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。目前,处理器没有被触发。我应该做些什么?

  • 嗨,我在camel中有一个JMS消费者路由,我的要求是在特定事件时停止/暂停该路由(基于某个字段值),然后使用调度器恢复该路由。为此,我创建了两个路由,一个是我的原始jms消费者路由,另一个是调度程序路由,它们恢复jms消费者路由,虽然我能够暂停路由,但第二个路由不恢复暂停的路由,它显示的状态为已启动。 以下是我的两条路线 请帮助我如何实现上述场景。