使用OSGi捆绑uri的Camel xquery端点

时间:2012-09-28 17:21:26

标签: spring osgi xquery apache-camel apache-karaf

我有一个OSGi包(部署到Karaf 2.2.4),它启动了Camel(2.10.0)上下文。 Camel上下文的routebuilder有一些xquery端点URI,例如

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

当上下文尝试解析该URI时,它失败了,因为Camel包与.xq文件所在的类路径不在同一个类路径中。所以,我创建了一个转动的URL扩展函数

"xquery:classpath:..."

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

因为在处理OsgiBundleResourcePatternResolver(Spring 3.1.1)时,我在项目的早期处理过bundle URI和ClassPathScanningCandidateComponentProvider。不幸的是,我似乎找不到让Camel XQueryComponent使用OsgiBundleResourcePatternResolver的方法。

  1. 我是以正确的方式来做这件事的吗?有没有更简单的方法呢?
  2. 如果我是,我如何确保XQueryComponent能够理解bundle: URI?
  3. 另外,我是否可以确保任何驼峰组件都能理解bundle: URI?

2 个答案:

答案 0 :(得分:2)

具有上述xquery端点的Camel路由的应用程序需要导入xq文件所在的包,例如代表“Dir1.Dir2”的包。

所以在META-INF / MANIFEST.MF中有OSGi导入|导出。你应该对该给定的包进行导入。

并回答你的3发子弹

  1. 不,见上文
  2. 您需要扩展此组件并为“bundle”
  3. 添加自己的逻辑
  4. 不,不是真的,因为你需要为camel-core / camel-core-osgi添加逻辑。
  5. 此外,应用程序的软件包ID也可以更改,因此建议不要通过其id引用软件包。并且您无法分配由osgi容器自行分配的包ID。

答案 1 :(得分:0)

感谢Claus的回答,我能够意识到我的.xq文件不在.jar的正确目录中。

Dir1位于其.jar文件的根目录中。虽然在非OSGi Web容器中运行应用程序运行良好,但Karaf似乎对我的.war文件中的资源应该更加严格。我将.xq文件移至WEB-INF/classes/Dir1/...,现在代码使用FileNotFoundExceptions时不再收到xquery:classpath:Dir1/Dir2/example.xq