Apache Camel:调用 .bean 不在数据库中保存对象

Apache Camel : Call to .bean not saving object in DB

我正在使用 Apache Camel 编写一个简单的 POC 来接收 SMNP 陷阱。我正在尝试获取传入的交换消息,将其转换为 SnmpMessage,然后创建一个包含 SnmpMessage 中的两个字段的自定义类型。然后我想将这个自定义对象保存到 H2 数据库中。我的 SNMP 路由如下所示:

open class SnmpTrapRoute(private val repository: IPduEventRepository) : RouteBuilder() {

    @Throws(Exception::class)
    override fun configure() {

        from("snmp:0.0.0.0:1611?protocol=udp&type=TRAP")
                .process { exchange ->
                    val message = exchange.getIn() as SnmpMessage
                    val pduEvent = CustomPduEvent(message.snmpMessage.requestID.toLong(), message.snmpMessage.type)
                    exchange.getIn().setBody(pduEvent, CustomPduEvent::class.java)
                }
                .bean(repository, "save")
                .log("MIH :: DB Entries [" + repository.findAll() + "]")
    }
}

但是,.bean 调用似乎没有将对象添加到数据库中。如果我在处理器中包含 repository.save(pduEvent) 并删除对 .bean 的调用,它会很好地添加它。

也尝试设置输出消息正文exchange.out.setBody(pduEvent, PduEvent::class.java)但结果相同。

我哪里错了?

原来我有两个主要问题。首先,我需要设置 out 消息的主体,而不是 in,其次,在调用 bean 方法时,最后的 .log 调用不起作用。所以对 bean 方法的调用是有效的,但日志调用让它看起来好像没有。所以我改为从 process 调用中调用我的记录器。

    from("snmp:0.0.0.0:1611?protocol=udp&type=TRAP")
            .process { exchange ->
                val message = exchange.getIn() as SnmpMessage
                exchange.out.body = CustomPduEvent(message.snmpMessage.requestID.toLong(), message.snmpMessage.type)
            }
            .bean(repository, "save")
            .process {
                logger.debug("MIH :: DB Entries [" + repository.findAll() + "]")
            }