无法在 CamelContext 上调用 public void org.apache.camel.cdi.CdiCamelContext.start()

Unable to invoke public void org.apache.camel.cdi.CdiCamelContext.start() on CamelContext

我正在尝试添加 CdiCamelContext 以启动路由器,如下所示。

@Inject
@ContextName("new-camelContext")
CdiCamelContext camelContext;

@PostConstruct
public void init() throws Exception {
    camelContext.addRoutes(new MyRoute());
    camelContext.start();
}

堆栈跟踪:

Error occurred when build the project. org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke public void org.apache.camel.cdi.CdiCamelContext.start() on CamelContext(camel-4) at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:100) at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.postConstruct(DefaultLifecycleCallbackInvoker.java:81) at org.jboss.weld.injection.producer.BasicInjectionTarget.postConstruct(BasicInjectionTarget.java:126) at org.apache.camel.cdi.internal.CamelContextBean.create(CamelContextBean.java:73) at org.apache.camel.cdi.internal.CamelContextBean.create(CamelContextBean.java:40) at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96) at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101) at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50) at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99) at org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance(ProxyMethodHandler.java:125) at org.apache.camel.cdi.CdiCamelContext$Proxy$_$$_WeldClientProxy.getStatus(Unknown Source) at org.apache.camel.cdi.CdiCamelExtension.createCamelContexts(CdiCamelExtension.java:261) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88) at org.jboss.weld.injection.MethodInvocationStrategy$SpecialParamPlusBeanManagerStrategy.invoke(MethodInvocationStrategy.java:144) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:306) at org.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:121) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:284) at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:262) at org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:271) at org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:260) at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:154 at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:148 at org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:54) at org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:35) at org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28) at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:447) at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90) at org.jboss.as.weld.WeldStartService.start(WeldStartService.java:94) at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:497) at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:98) ... 36 more Caused by: org.apache.camel.RuntimeCamelException: javax.enterprise.inject.InjectionException: Camel annotations post processing of [InjectionTarget for Managed Bean [class org.apache.camel.cdi.component.properties.CdiPropertiesComponent] with qualifiers [@Default @Named @Any]] failed! at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1642) at org.apache.camel.impl.PropertyPlaceholderDelegateRegistry.lookupByName(PropertyPlaceholderDelegateRegistry.java:52) at org.apache.camel.util.CamelContextHelper.lookupPropertiesComponent(CamelContextHelper.java:575) at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2966) at org.apache.camel.impl.DefaultCamelContext.access[=13=]0(DefaultCamelContext.java:175) at org.apache.camel.impl.DefaultCamelContext.call(DefaultCamelContext.java:2812) at org.apache.camel.impl.DefaultCamelContext.call(DefaultCamelContext.java:2808) at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2831) at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2808) at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2777) at org.apache.camel.cdi.CdiCamelContext.start(CdiCamelContext.java:76)

我需要找到一种正确的方法来使用 camel cdi 并在不同的项目中访问相同的 camel 上下文。

看看各种 CDI 示例

作为 Camel 2.17 的一部分,还有一个改进的 camel-cdi 组件。

@coolD,我也遇到了同样的问题,找到了解决办法。我将 Apache Camel 2.16.2 与骆驼 CDI 一起使用。我在其他 Whosebug 问题中添加了我的答案。 看看吧。这可能会有所帮助。

ps。还有个骆驼2.17.0已经放出来了。我还没有尝试过。