将 AdviceWith 与 Kotlin 和 Quarkus 结合使用

问题描述 投票:0回答:1

我正在尝试为我的骆驼路线编写测试。我将 Kotlin 与 Quarkus 一起使用。

正如我所意识到的,CamelContext 尝试在我自己的 RouteBuilder 之前使用我的生产路线运行 AdviceWithRouteBuilder,因此测试无法启动。我初始化建议如下:

fun configureMockEventTopicEndpoint() {
    AdviceWith.adviceWith(
        "event-collector",
        context,
        ReplaceDirectThem()
    )
}

class ReplaceDirectThem : AdviceWithRouteBuilder() {
    override fun configure() {
        replaceFromWith("direct:abc")
        interceptSendToEndpoint("jms:topic:*")
            .skipSendToOriginalEndpoint()
            .to("mock:jms:topic:someTopic")
    }
}

在这种情况下,它会抛出:

原因:java.lang.IllegalArgumentException:originalRoute 必须是 指定于:路线:[]

显然,因为这是在我的实际路线构建器之前运行的。当我把它变成java时:

fun configureEventTopicEndpoint() {
    AdviceWith.adviceWith(
        "event-collector",
        context,
        object : AdviceWithRouteBuilder() {
            override fun configure() {
                replaceFromWith("direct:abc")
                interceptSendToEndpoint("jms:topic:*")
                    .skipSendToOriginalEndpoint()
                    .to("mock:jms:topic:sendstuff")
            }
        }
    )
}

然后它抛出:

类 org.apache.camel.support.ObjectHelper 无法访问以下成员 类.....CamelRoutesTest$configureMockEventTopicEndpoint$1 与 修饰符“”

我在这里缺少什么?

我尝试了上述两种方法。还检查了camel的源代码并意识到

MainConfigurationProperties.routeBuilders
在我自己的产品路线之前看到了我的测试路线构建者

我希望我的路线在测试路线构建器之前运行,以便可以对其进行编辑。最后测试应该会成功。

kotlin apache-camel quarkus
1个回答
0
投票

这似乎是一个错误。

AdviceWithRouteBuilder
类型包含在 Camel Quarkus 构建时
RouteBuilder
发现中,但无法设置建议的原始路线。因此出现了“
originalRoute must be specified on...
”例外。

您可以通过创建任何

AdviceWithRouteBuilder
private
来解决此问题。例如,上面的原始示例。

private class ReplaceDirectThem : AdviceWithRouteBuilder() {
    override fun configure() {
        replaceFromWith("direct:abc")
        interceptSendToEndpoint("jms:topic:*")
            .skipSendToOriginalEndpoint()
            .to("mock:jms:topic:someTopic")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.