Маршруты верблюда не разрешаются в файле xml

Я обновляюсь с Java 8 до Java 11. Даже версия Spring, которая использовалась ранее, была 4.x, теперь я обновился до Spring 5.x.

Я использую верблюда для маршрутов

Мой файл контекста верблюда выглядит следующим образом

 <bean id="samplePriceBean"
    class="com.abc.SamplePriceBean">
    <constructor-arg index="0"
        ref="route1" />
        <constructor-arg index="1"
        ref="route2" />
    <constructor-arg index="2"
        ref="myCamelContext" />
    <constructor-arg index="3" value="route1" />
    <constructor-arg index="4" value="route1" />
</bean>
<camelContext id="myCamelContext" xmlns="http://camel.apache.org/schema/spring">
    <route id="listRoute" autoStartup="false">
        <from
            uri="file:{{abc.list}}?noop=true&amp;" />
        <to uri="direct:route1"
            id="route1" />
    </route>
    <route id="readRoute" autoStartup="false">
        <from
            uri="file:{{abc.read}}?noop=true&amp;" />
        <to uri="direct:route2"
            id="route2" />
    </route>
</camelContext>

Теперь, когда я запускаю ошибку приложения в консоли, как показано ниже

Error creating bean with name 'samplePriceBean' defined in class path resource [app-camel.xml]: Cannot resolve reference to bean 'route1' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'route1' available
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:787)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)

Приложение не может разрешить маршруты, определенные в контексте верблюда.

Я использую JDk 11, SPring 5.x, Apache camel 3.0.0

2 ответа

Ладно, это тоже неправильно с самого начала

В <route>предназначен для определения маршрутов, и маршруты не отображаются как Spring bean-компонент, который может использовать / lookup для инъекции зависимостей Spring. Только<camelContext> предназначен для этого, так как его CamelContext.

В вашем SamplePriceBean вы можете изменить его конструктор, чтобы он не принимал route1 и route2 как ссылки, но вы можете просто использовать API из CamelContext искать эти маршруты через CamelContext API (не идентификаторы Spring bean).

Camel 2.x НЕ поддерживает Java 11. Вы должны использовать Camel 3 для поддержки Java 11.

Другие вопросы по тегам