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

标签 java apache-camel osgi apache-fop barcode4j

通过使用 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/

相关文章:

java - 从数组 int 的参数返回 boolean 值的方法

java - Intent服务AsyncTask后台setAdapter

java - 没有 Eclipse 的 OSGi 教程?

java - 如何控制服务可见性

java找不到符号对象

java - 方法的性能

java - 如何修复Camel route 的 “java.nio.charset.MalformedInputException: Input length = 1”?

tomcat - tomcat osgi 实现中的简单 Web 应用程序包 (WAB)

java - 如何配置2.6 spring : Failed to create route route2 at:

java - Camel 收件人列表/多播与聚合策略