Apache Camel: вызов .bean не сохранение объекта в БД - PullRequest
0 голосов
/ 06 ноября 2019

Я пишу простой POC, используя Apache Camel для получения ловушек 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), но тот же результат.

Куда я иду не так?

1 Ответ

1 голос
/ 07 ноября 2019

Оказалось, у меня две основные проблемы. Во-первых, мне нужно было задать тело сообщения out, а не in, а во-вторых, последний вызов .log не работал при вызове метода bean. Таким образом, вызов метода 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() + "]")
            }
...