Что заменяет FileResolver в API JasperReports? - PullRequest
0 голосов
/ 02 июня 2018

Одна из наших программных утилит использует класс, который реализует net.sf.jasperreports.engine.util.FileResolver для загрузки элементов отчета (например, изображений), которые находятся по пути относительно отчета или должны быть загружены через собственный протокол файлового сервера.Начиная с последней версии 6.6.0 я вижу, что планируется полностью удалить класс FileResolver.Однако в Javadocs он только отмечает, что класс будет удален.Никаких подробностей о замене не указано.

Я не ожидаю, что смогу обменять FileResolver с другим классом с заменой 1: 1, но очень хотел бы знать, что теперь использует заполнитель отчетов для поиска внешних элементов отчета.

1 Ответ

0 голосов
/ 06 июня 2018

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...