如何在驼峰路线中使用OSGI捆绑?

时间:2013-02-23 18:22:48

标签: java osgi apache-camel

我在驼峰路线中使用OSGI-Service时遇到问题。阅读tutorial-osgi-camel-part1 ,但没有让它发挥作用。

设置:

  • bundle 1定义了一个Service接口(用于接口的单独bundle,因为它可以有多个实现)
  • 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]

我正在使用Equinox。

1 个答案:

答案 0 :(得分:3)