繁体   English   中英

使用OSGi捆绑uri的Camel xquery端点

[英]Camel xquery endpoint with OSGi bundle uri

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

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

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

"xquery:classpath:..."

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

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

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

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

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

并回答你的3发子弹

  1. 不,见上文
  2. 你需要扩展这个组件并为“bundle”添加你自己的逻辑
  3. 不,不是真的,因为你需要为camel-core / camel-core-osgi添加逻辑。

此外,应用程序的bundle id可以更改,因此不建议不要通过其id引用bundle。 并且您无法分配由osgi容器自行分配的包ID。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM