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/..."

因为我在处理(Spring 3.1.1)时处理了捆绑 URI 和OsgiBundleResourcePatternResolver项目的早期版本。ClassPathScanningCandidateComponentProvider不幸的是,我似乎找不到让 CamelXQueryComponent使用我的OsgiBundleResourcePatternResolver.

  1. 我会以正确的方式解决这个问题吗?有没有更简单的方法来做到这一点?
  2. 如果我是,我如何确保XQueryComponent可以理解bundle:URI?
  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 引用捆绑包。并且您不能分配捆绑 ID,这是由 osgi 容器自行分配的。

于 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 回答