Самый простой и чистый способ, которым мы это сделали (исключая использование тонны устаревшей документации и незавершенных недокументированных статических антипаттерновых новых функций):
Создать контекст с расширением репозитория
SimpleJasperReportsContext jasperReportsContext = new SimpleJasperReportsContext();
jasperReportsContext.setExtensions(RepositoryService.class, Collections.singletonList(new MyRepositoryService(jasperReportsContext, yourOptionalParams)));
Заполнить таким образом (после компиляции и других обычных действий)
JasperPrint print = JasperFillManager.getInstance(jasperReportsContext).fill(compiled, new HashMap<>());
Теперь ваш репозиторий должен расширять хранилище по умолчанию, чтобы его можно было внедрить взломом (причина того, что Ходжи закодировал "isAssignableFrom") успешно
public class PrintFormsRepositoryService extends DefaultRepositoryService {
@Override
public InputStream getInputStream(RepositoryContext context, String uri) {
// return here your own good simple poj inputStream even from memory if you found source
// or pass to another repository service(default one probably)
return null;
}
}