SPRING-BOOT – FileNotFoundException: class path resource cannot be resolved to absolute file path because it does not reside in the file system: jar:file:*

Personalmente reputo jasper reports un prodotto ottimo, permette di elaborare report di elevata complessità permettendo di concentrarsi sugli aspetti più importanti come la presentazione senza aver bisogno di una conoscenza approfondita di librerie per gestire i vari formati pfg, xls, csv, …

Lo stack tecnologico si evolve con il tempo e capita che soluzioni adottate precedentemente non siano più percorribili. E’ il caso di jasper report e spring boot. Spring boot, altro prodotto validissimo, ci permette di generare dei jar eseguibili che tramite l’uso dei tomcat embedded ci permette di tirare dei servizi web senza particolari problemi. Non hai più la necessità di gestire una istanza tomcat, e di generare il war che va installata su di essa, ma generi un jar che eseguito espone il servizio richiesto. Se all’interno del jar prevediamo la presenza dei template jasper per l’elaborazione del report occorre non più fornire il path ma fornire questo template sotto forma di inputstream. Su questo argomento avevo già scritto un articolo che trovate qui.

In questi giorni però mi è capitato di dover gestire un report che a suo volta conteneva un subreport passato sotto forma di path ed ecco che si è ripresentata di nuovo l’eccezione FILENOTFOUNDEXCEPTION, perchè giustamente anche il subreport va passato come inpustream per risolvere il problema.

Ricapitolando:

In JasperReport definisco un parametro di tipo inputstream

Lo utilizzo come espressione del subreport

E nella classe java dove invoco il metodo per la generazione del report lo passo come parametro

params.put("SUBREPORT_INPUTSTREAM", report.getInputStream());

Buon lavoro