通过使用 JBoss Fuse,我有一个 Camel-FOP 端点组件,它可以成功生成 PDF 作为路由的一部分。一项新要求是在 PDF 输出中包含动态条形码生成。它必须在 OSGi 容器中运行。虽然 FOP 和 Barcode4J 都是 bundle ,但 FOP 扩展 (barcode4j-fop-ext:21) 只是一个普通的 jar,似乎没有可用的 bundle 版本。
我首先尝试通过 bnd 包装 FOP 扩展并部署它,但是 FOP 找不到/看到该扩展。其工作方式是在运行时 FOP 查找由类路径中的可选扩展提供的任何名为 org.apache.fop.fo.ElementMapping 的文本文件。然后,FOP 使用该文本文件中提供的类名动态实例化扩展 Jar 中的类 - class.forName(...)。
FOP 扩展 Jar 将纯文本文件保存在 META_INF/services 下,这些文件必须对 FOP 包可见,以及扩展 Jar 中的几个 Java 包。此文本文件包含字符串“org.krysalis.barcode4j.fop.BarcodeElementMapping”,该字符串对应于 FOP bundle 必须实例化的 FOP 扩展中的类。
编辑:我还应该补充一点,我已经查看了 FOP 捆绑 list ,并且没有可选的导入或对我正在使用的 FOP 扩展 Jar 的其他引用。我认为扩展的想法是它们是运行时可发现的,因此不会隐式引用。
有什么方法可以让它在 OSGi 中工作,还是我应该考虑其他解决方案?
最佳答案
听起来您的 FOP 正在寻找服务扩展。确保您还安装了 Aries SPI-Fly 功能。此功能会查找那些服务扩展 META-INF/services,并使这些扩展可供需要这些扩展的其他包使用。这应该已经为您完成了大部分工作。
关于java - 如何让 Barcode4J FOP 扩展在 OSGi 中工作(用于使用条形码生成 PDF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809943/