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

我正在使用Apache Camel编写一个简单的POC来接收SMNP陷阱。我试图接收传入的交换消息,将其转换为snmpMessage,然后创建一个自定义类型,该类型包含snmpMessage中的两个字段。然后,我想将此自定义对象保存到H2 DB。我的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的调用,则可以添加它。

还尝试设置out邮件正文exchange.out.setBody(pduEvent,PduEvent::class.java),但结果相同。

我要去哪里错了?

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

原来,我有两个主要问题。首先,我需要设置out消息的主体,而不是in,然后,在调用bean方法时,最后的.log调用不起作用。因此,对bean方法的调用是有效的,但是log调用使它看起来好像不起作用。因此,我改为从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() + "]")
            }
本文链接:https://www.f2er.com/3150440.html

大家都在问