簡體   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