我有一个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
的方法。
XQueryComponent
能够理解bundle:
URI?bundle:
URI?答案 0 :(得分:2)
具有上述xquery端点的Camel路由的应用程序需要导入xq文件所在的包,例如代表“Dir1.Dir2”的包。
所以在META-INF / MANIFEST.MF中有OSGi导入|导出。你应该对该给定的包进行导入。
并回答你的3发子弹
此外,应用程序的软件包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