Java 什么替代了JasperReports API中的文件解析器?

Java 什么替代了JasperReports API中的文件解析器?,java,jasper-reports,Java,Jasper Reports,我们的一个软件实用程序使用一个实现net.sf.jasperreports.engine.util.FileResolver的类来加载位于相对于报表的路径上或通过专有文件服务器协议加载的报表元素(例如图像)。从最新版本6.6.0开始,我看到计划是完全删除FileResolver类。然而,在Javadocs中,它只注意到类将被删除。未指定有关替换的详细信息 我不希望能够用另一个具有1:1替换的类替换FileResolver,但我真的很想知道报表填充程序现在使用什么来定位外部报表元素 FileRes

我们的一个软件实用程序使用一个实现
net.sf.jasperreports.engine.util.FileResolver
的类来加载位于相对于报表的路径上或通过专有文件服务器协议加载的报表元素(例如图像)。从最新版本6.6.0开始,我看到计划是完全删除FileResolver类。然而,在Javadocs中,它只注意到类将被删除。未指定有关替换的详细信息


我不希望能够用另一个具有1:1替换的类替换FileResolver,但我真的很想知道报表填充程序现在使用什么来定位外部报表元素

FileResolver
被弃用,取而代之的是
net.sf.jasperreports.repo.RepositoryService
实现

有一个名为
net.sf.jasperreports.repo.FileRepositoryService
的内置实现,它大致相当于不推荐的
net.sf.jasperreports.engine.util.SimpleFileResolver

存储库服务注册为
JasperReportsContext
extensions

这可以在jasperreports_extension.properties文件中完成,如下所示:

net.sf.jasperreports.extension.registry.factory.file.repository=net.sf.jasperreports.repo.FileRepositoryServiceExtensionsRegistryFactory
net.sf.jasperreports.extension.file.repository.root=/path/to/repository
net.sf.jasperreports.extension.registry.factory.persistence=net.sf.jasperreports.repo.FileRepositoryExtensionsRegistryFactory
通过编程方式创建
JasperReportsContext
对象,然后使用它填充报告,也可以注册扩展:

    SimpleJasperReportsContext context = new SimpleJasperReportsContext();
    FileRepositoryService fileRepository = new FileRepositoryService(context, "/path/to/repository", false);
    context.setExtensions(RepositoryService.class, Collections.singletonList(fileRepository));
    context.setExtensions(PersistenceServiceFactory.class, Collections.singletonList(FileRepositoryPersistenceServiceFactory.getInstance()));

    JasperPrint jasperPrint = JasperFillManager.getInstance(context).fill(jasperReport, params);
如果需要实现自定义存储库服务,可以将
FileRepositoryService
作为参考。您可能需要实现
StreamRepositoryService
并注册
PersistenceService
s(如中所示)

如果您需要做的是关于相对于报表的资源路径,那么还可以查看使用
JasperReportSource
参数的。传递这样一个对象意味着自动解析相对于报表的报表资源引用(前提是存储库服务基于
RepositoryContext
实现资源查找)。

我必须在“/path/to/repository”中设置完整路径。相对路径或规范名称不起作用。