问题
Locally I have a master.jrxml report and some subreport.jrxml and can load and manipulate the subreport via ReportDesign design = JRXmlLoader.load( "/local-file-dir/path/to/subreport.jrxml" ) in the Scriptlet code.
On the server, the above load method (trigged by my master.jrxml) obviously cannot deal with repo paths, no matter what I tried (basically net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: ...)
(subreport.jrxml uploaded as a JRXML File Resource - not as Report with invisibly created folder structures ;
subreport-attached.jrxml uploaded as a file resource of my master.jrxml Report
)
- apwop) absolute repo path without protocol prefix, e.g.
/repo/path/subreport.jrxml - apwp) absolute repo path with protocol prefix, e.g.
repo:/repo/path/subreport.jrxml - rpwop) relative repo path without protocol prefix, e.g.
subreport-attached.jrxml - rpwp) relative repo path with protocol prefix, e.g.
repo:subreport-attached.jrxml
I also tried the following with the above uri variants as found elsewhere in the web without success:
JRXmlLoader:
JRXmlLoader.load( new DefaultRepositoryService( DefaultJasperReportsContext.getInstance() ).getInputStream( subrepPath )RepositoryUtil:
RepositoryUtil.getInstance( DefaultJasperReportsContext.getInstance() ).getInputStreamFromLocation( subrepPath )- JasperServerUtil: similar to this I am still trying out and will report back (had problems with proper Maven jasperserver libraries support till now - other problem I may address in another question)
- update: it worked: see my answer below
回答1:
Woohoo! :) The last approach with the com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService worked like this:
JasperDesign design = JRXmlLoader.load(
( (RepositoryService) StaticApplicationContext.getApplicationContext()
.getBean( "repositoryService" )
)
.getResourceData( JasperServerUtil.getExecutionContext() ,
"repo:/some/where/subreport.jrxml" )
.getDataStream()
Puh! hard birth.
来源:https://stackoverflow.com/questions/37960315/how-to-get-the-reportdesign-class-of-some-subreport-on-the-server-for-scriptlet