0

使用 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 中工作,或者我应该寻找其他解决方案?

4

1 回答 1

1

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

于 2017-05-06T16:43:45.783 回答