如何让Barcode4J FOP扩展在OSGi中工作(用于生成带条形码的PDF)

时间:2017-05-05 16:39:15

标签: java apache-camel osgi apache-fop barcode4j

使用JBoss Fuse,我有一个Camel-FOP端点组件,可以成功生成PDF作为路径的一部分。新要求是在PDF输出中包含动态条形码生成。这必须在OSGi容器中运行。虽然FOP和Barcode4J都是捆绑包,但FOP扩展(barcode4j-fop-ext:21)只是一个普通的jar,似乎没有捆绑版本。

我首先尝试通过bnd包装FOP扩展并部署它,但是FOP没有找到/看到扩展名。这种方式的工作方式是在运行时FOP查找类路径中由可选扩展提供的名为org.apache.fop.fo.ElementMapping的任何文本文件。然后,FOP使用该文本文件中提供的类名 - class.forName(...)动态地实例化扩展Jar中的类。

FOP Extension Jar将纯文本文件保存在META_INF / services下,这些文件必须对FOP包可见,以及Extension Jar中的几个Java包。该文本文件包含字符串" org.krysalis.barcode4j.fop.BarcodeElementMapping"它对应于FOP扩展中FOP包必须实例化的类。

编辑:我还应该补充一点,我已经查看了FOP捆绑清单,并且没有可选的导入或其他对我使用的FOP Extension Jar的引用。我认为扩展的想法是它们是运行时可被发现的,因此不会被隐含地引用。

有什么方法可以让它在OSGi中运行,还是应该考虑其他解决方案?

1 个答案:

答案 0 :(得分:1)

听起来你的FOP正在寻找服务扩展。确保您还安装了Aries SPI-Fly功能。此功能查找这些服务扩展META-INF / services,并使其可用于需要这些扩展的其他bundle。这应该已经为你完成了大部分工作。