我正在尝试为我的骆驼路线编写测试。我将 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
在我自己的产品路线之前看到了我的测试路线构建者
我希望我的路线在测试路线构建器之前运行,以便可以对其进行编辑。最后测试应该会成功。
这似乎是一个错误。
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")
}
}