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”中设置完整路径。相对路径或规范名称不起作用。