使用 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 扩展 Jar 将纯文本文件保存在 META_INF/services 下,这些文件必须对 FOP 包可见,以及扩展 Jar 中的几个 Java 包。此文本文件包含字符串“org.krysalis.barcode4j.fop.BarcodeElementMapping”,它对应于 FOP 包必须实例化的 FOP 扩展中的类。
编辑:我还应该补充一点,我已经查看了 FOP 捆绑清单,并且没有对我正在使用的 FOP 扩展 Jar 的可选导入或其他引用。我认为扩展的想法是它们是运行时可发现的,因此不会被隐式引用。
有没有办法让它在 OSGi 中工作,或者我应该寻找其他解决方案?