FileResolver
устарел в пользу net.sf.jasperreports.repo.RepositoryService
реализаций.
Существует встроенная реализация с именем net.sf.jasperreports.repo.FileRepositoryService
, которая примерно эквивалентна устаревшим net.sf.jasperreports.engine.util.SimpleFileResolver
.
Репозитарийрегистрируются как JasperReportsContext
расширений.
Это можно сделать либо в файле 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 (как в FileRepositoryPersistenceServiceFactory ).
Если вам нужно указать пути к ресурсам относительно отчета, вытакже можно взглянуть на методы JRFiller , которые принимают аргумент JasperReportSource
.Передача такого объекта предназначена для автоматического разрешения ссылок на ресурсы отчета относительно отчета (при условии, что служба репозитория реализует поиск ресурсов на основе RepositoryContext
).