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