【问题标题】:Camel bean parameter binding not working骆驼豆参数绑定不起作用
【发布时间】:2018-04-03 15:27:22
【问题描述】:

我正在学习 Apache Camel 框架,尝试实现简单的 bean 参数绑定示例。

我有以下路线

from("timer://foo?delay=2000")
    .setBody(simple("hello"))
    .log("${body}")
    .transform(simple("<foo>${body}</foo>"))
    .log("${body}")
    .bean(DocumentProcessorBean.class, "process");

还有下面的 Spring bean

@Component("documentProcessorBean")
public static class DocumentProcessorBean {

    public Document process(@Body Document doc, @Headers Map<String, Object> headers) {
        System.out.println(doc);
        System.out.println(headers);
        return doc;
    }
}

但是,参数绑定似乎不起作用,因为我正在获取没有内容的 Document 实例,如日志中所示

2018-04-03 18:14:39.354  INFO 7740 --- [1 - timer://foo] route1                                   : hello
2018-04-03 18:14:39.354  INFO 7740 --- [1 - timer://foo] route1                                   : <foo>hello</foo>
[#document: null]
{breadcrumbId=ID-DESKTOP-LI5P50P-1522768469501-0-6, firedTime=Tue Apr 03 18:14:39 EEST 2018}

我也对骆驼使用的“隐式”数据格式感到困惑。例如,使用simple 的转换是否总是返回一个字符串?在路由中使用字符串、编组格式(例如 xstream)或绑定类格式(POJO)有什么区别,或者它甚至重要吗?一般在路由中需要在这些格式之间进行转换的场景有哪些?还有最重要的是,为什么这个特定路由中的bean参数绑定不起作用?

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

    您不能只是 System.out.println 一个 Document 实例并让它显示 XML 内容。您在日志中看到的内容是预期的,它可能只是显示Document: null 或其他内容,但这并不意味着没有内容。

    【讨论】:

    • 你说得对,我设法打印了特定节点的值。即使在使用调试器检查实例成员时,我也确信它是空的,因为 Document 对象的实现有些模糊。很高兴在这里见到你,我很喜欢你的书。
    • 如果您希望 XML 文档只是一个字符串类型,那么您可以在 bean 方法签名中定义它。
    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多