[英]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
。
XQueryComponent
能夠理解bundle:
URI? bundle:
URI? 具有上述xquery端點的Camel路由的應用程序需要導入xq文件所在的包,例如代表“Dir1.Dir2”的包。
所以在META-INF / MANIFEST.MF中有OSGi導入|導出。 您應該具有該給定包的導入。
並回答你的3發子彈
此外,應用程序的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.