2017-05-05 20 views
0

使用JBoss Fuse,我有一個Camel-FOP端點組件,可以成功生成PDF作爲路由的一部分。新的要求是在PDF輸出中包含動態條形碼生成。這必須在OSGi容器中運行。雖然FOP和Barcode4J都是捆綁包,但FOP擴展(barcode4j-fop-ext:21)只是一個普通的jar,沒有捆綁版本可用。如何讓Barcode4J FOP擴展在OSGi中工作(適用於帶條形碼的PDF生成)

我第一次試圖通過bnd包裝FOP擴展並部署它,但是FOP沒有找到/看到擴展。其工作方式是,在運行時,FOP會查找由classpath中的可選擴展提供的名爲org.apache.fop.fo.ElementMapping的任何文本文件。然後FOP使用該文本文件中提供的類名--class.forName(...)動態實例化擴展Jar中的類。

FOP擴展Jar保留META_INF/services下的純文本文件,它必須對FOP包以及擴展Jar中的幾個Java包可見。該文本文件包含字符串「org.krysalis.barcode4j.fop.BarcodeElementMapping」,該字符串與FOP擴展中的類必須實例化的類相對應。

編輯:我還應該補充一點,我已經看過FOP包清單,並沒有可選的導入或其他引用到我正在使用的FOP擴展JAR。帶有我認爲的擴展的想法是,它們是運行時可發現的,因此不會被隱式引用。

有沒有什麼辦法可以在OSGi中使用它,或者我應該查看其他解決方案嗎?

+0

如果該FOP擴展不支持OSGi,我不會認爲這很容易做到。你可以嘗試開啓camel-fop和fop bundles上的動態導入,在Karaf中有一個用於該dev-dynamic-import或類似的命令。 –

+0

難道你不能簡單地包裝非osgi jar讓Karaf爲你創建捆綁包嗎? http://stackoverflow.com/questions/32889600/install-depency-jar-file-in-apache-karaf-2-3-10 –

回答

1

聽起來像你的FOP正在尋找服務擴展。確保你還安裝了Aries SPI-Fly功能。該功能查找那些服務擴展META-INF/services,並使這些服務可用於需要這些擴展的其他bundle。這應該已經爲你做了大部分工作。