我在骆驼路线中使用 OSGI 服务时遇到问题。阅读tutorial-osgi-camel-part1 但没有让它工作。
设置:
- bundle 1 定义了一个 Service 接口(接口的单独包,因为它可以有多个实现)
- bundle 2 实现了这个接口
- bundle 3 应该使用 bundle 2,它提供 bundle 1 的接口
在 bundle 2(实现)中有两个 xml 文件,一个带有
<osgi:service ref="invokeService">
<osgi:interfaces>
<value>invoker.Invoker</value>
</osgi:interfaces>
</osgi:service>
另一个与
<bean id="invokeService" class="invokerImpl.InvokerImpl">
</bean>
Bundle 3 有一个 xml 文件
<osgi:reference id="invokeService" interface="invoker.Invoker"/>
在里面。Bundle 3 和 CamelContext 开始于
@Override
public void start(BundleContext bundleContext) throws Exception {
OsgiDefaultCamelContext camelContext = new OsgiDefaultCamelContext(bundleContext);
camelContext.addRoutes(new ExampleRoute());
camelContext.start();
}
在我的路线中,我想使用服务(来自捆绑包2)
.to("bean:invokeService")
我得到的例外:
19:14:39.953 TRACE o.a.camel.core.osgi.OsgiClassResolver:42 Resolve class invokeService
19:14:39.969 TRACE o.a.camel.core.osgi.OsgiClassResolver:84 Cannot load class: invokeService using classloader: CamleOSGIExample_1.0.0.qualifier [254]. This exception be ignored.
java.lang.ClassNotFoundException: invokeService
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513) ~[na:na]
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) ~[na:na]
(...)
和
org.apache.camel.NoSuchBeanException: No bean could be found in the registry for: invokeService
at org.apache.camel.component.bean.RegistryBean.getBean(RegistryBean.java:68) ~[camel-core-2.10.3.jar:2.10.3]
at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:83) ~[camel-core-2.10.3.jar:2.10.3]
我正在使用春分。