gpt4 book ai didi

java - CamelContext 已加载,但路由定义为空

转载 作者:太空宇宙 更新时间:2023-11-04 15:03:54 25 4
gpt4 key购买 nike

我正在尝试手动加载CamelContext来自applicationContext.xml文件如下所示:

<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:a"/>
<to uri="direct:b"/>
</route>

<route>
<from uri="direct:b"/>
<to uri="direct:c"/>
</route>

<route>
<from uri="direct:c"/>
<to uri="mock:direct:c"/>
</route>
</camelContext>

</beans:beans>

加载时我使用此片段(常规代码):

def xmlBeans = applicationContext.getBeanFactory()
new XmlBeanDefinitionReader(xmlBeans).loadBeanDefinitions('test/integration/resources/applicationContext.xml')
def camelContext = applicationContext.getBean("camelContext")
camelContext.start();
println "Route definitions: " + camelContext.routeDefinitions
println "Routes: " + camelContext.routes

一切加载都很好,但是routesrouteDefinitions为空;(

输出为:

Routes definitions: []
Routes: []

我做错了什么?或者我错过了什么?

更新1

经过一些研究,我发现了以下内容。如果我修改 XML 文件并将嵌套标记更改为某个无效值(例如,将 <from> 替换为 <from1> ),我会立即收到错误消息。但是,如果我将端点 URI 更改为某个无效值(例如 mock:direct:c 替换为 mock_XXX:direct:c ),则不会引发任何错误。

我相信 Spring 的模式验证会运行,但是, Camel 的路由验证不会运行。

更新2

当我替换camelContext.start()时与 applicationContext.start()没有任何改变。

更新3

经过一些建议,我改变了我的代码,如下所示:

    final Main main = new Main();
main.setApplicationContextUri("test/integration/resources/applicationContext.xml");
main.start();

def ctx = main.applicationContext

ctx.beanDefinitionNames.each { name ->
if(name == 'camelContext'){
def cctx = ctx.getBean(name);
println "\nRD:" + cctx.routeDefinitions // <!-- this prints routes
}
}

ctx.beanDefinitionNames.each { name ->
def beanDef = ctx.beanFactory.getBeanDefinition(name);
applicationContext.registerBeanDefinition(name, beanDef)
}

// TODO remove this snippets
def camelContext = applicationContext.getBean("camelContext")
applicationContext.start();
camelContext.start();
println "Route definitions: " + camelContext.routeDefinitions //<!-- this does not
println "Routes: " + camelContext.routes //<!-- this does not

第一个输出按预期打印路线。第二个输出没有。如下:

RD:[Route(a)[[From[direct:a]] -> [To[direct:b]]], Route(b)[[From[direct:b]] -> [To[direct:c]]], Route(c)[[From[direct:c]] -> [To[mock:direct:c]]]]
Route definitions: []
Routes: []

似乎路由定义未初始化或加载或其他任何内容,因此它只是空的。

最佳答案

您需要启动 CamelContext 才能加载其路由。看起来就像您刚刚加载 spring bean 定义一样。这不会导致 CamelContext 触发其路由等的加载。因此预计它是空的。

关于java - CamelContext 已加载,但路由定义为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com