0

Camel(2.10.0)コンテキストを開始するOSGiバンドル(Karaf 2.2.4にデプロイされている)があります。Camelコンテキストのルートビルダーには、次のようなxqueryエンドポイントURIがあります。

"xquery:classpath:Dir1/Dir2/example.xq"

コンテキストがそのURIを解決しようとしたとき、Camelバンドルが.xqファイルが存在する場所と同じクラスパスにないため、失敗しました。そこで、URL展開関数を作成しました。

"xquery:classpath:..."

の中へ

"xquery:bundle://42.0:6/..."

私はバンドルURIを扱っていたのでOsgiBundleResourcePatternResolver、プロジェクトの初期の段階でClassPathScanningCandidateComponentProvider(Spring 3.1.1)を扱っていました。XQueryComponent残念ながら、Camelに自分のを使用させる方法が見つからないようですOsgiBundleResourcePatternResolver

  1. 私はこれを正しい方法で行っていますか?これを行う簡単な方法はありますか?
  2. もしそうなら、どうすればがURIXQueryComponentを理解できることを確認できますか?bundle:
  3. bundle:また、ラクダのコンポーネントがURIを理解できることを確認することはできますか?
4

2 に答える 2

2

上記のxqueryエンドポイントを持つCamelルートを持つアプリケーションは、xqファイルが配置されているパッケージ(「Dir1.Dir2」を表すパッケージなど)をインポートする必要があります。

したがって、OSGiのインポート|エクスポートがあるMETA-INF/MANIFEST.MFで。その特定のパッケージのインポートが必要です。

そしてあなたの3つの弾丸に答えるために

  1. いいえ、上記を参照してください
  2. このコンポーネントを拡張し、「バンドル」用の独自のロジックを追加する必要があります
  3. いいえ、実際にはそうではありません。camel-core/camel-core-osgiにロジックを追加する必要があるためです。

また、アプリケーションのバンドルIDは変更される可能性があるため、そのIDでバンドルを参照することはお勧めしません。また、osgiコンテナーによって自己割り当てされるバンドルIDを割り当てることはできません。

于 2012-09-29T16:44:44.017 に答える
0

クロースの答えのおかげで、私の.xqファイルがその.jarの正しいディレクトリにないことに気付くことができました。

Dir1は、その.jarファイルのルートに存在していました。OSGi以外のWebコンテナーでアプリケーションを実行することは正常に機能しましたが、Karafは、リソースが.warファイルのどこにあるべきかに関してより厳密に見えます。.xqファイルをに移動しましたが、コードが使用するときにWEB-INF/classes/Dir1/...受信しなくなりましたFileNotFoundExceptionsxquery:classpath:Dir1/Dir2/example.xq

于 2012-10-01T14:44:40.840 に答える