3

キャメルルートでOSGIサービスを使用する際に問題が発生しました。tutorial-osgi-camel-part1 を読みましたが、機能しませんでした。

セットアップ:

  • バンドル1は、サービスインターフェイスを定義します(複数の実装が存在する可能性があるため、インターフェイス用に個別のバンドル)
  • バンドル2はこのインターフェースを実装します
  • バンドル3は、バンドル1のインターフェイスを提供するバンドル2を使用する必要があります

バンドル2(実装)には2つのxmlファイルがあります。

<osgi:service ref="invokeService">
    <osgi:interfaces>
        <value>invoker.Invoker</value>
    </osgi:interfaces>
</osgi:service> 

と他の

<bean id="invokeService" class="invokerImpl.InvokerImpl">
</bean>

バンドル3には次のxmlファイルがあります

 <osgi:reference id="invokeService" interface="invoker.Invoker"/>

初期化。バンドル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を使用しています。

4

1 に答える 1

3

また、こことソリューションについても説明します:http: //camel.465427.n5.nabble.com/Problems-using-a-osgi-bundle-in-a-camel-route-tp5728064.html

于 2013-02-25T17:44:35.323 に答える