有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取服务器上某个子报表的ReportDesign类以进行基于脚本的修改?

在本地,我有一个master.jrxml报告和一些subreport.jrxml,可以通过Scriptlet代码中的ReportDesign design = JRXmlLoader.load( "/local-file-dir/path/to/subreport.jrxml" )加载和操作子报告

在服务器上,上述加载方法(由我的master.jrxml触发)显然无法处理repo路径,无论我尝试了什么(基本上是net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: ...

subreport.jrxml作为JRXML文件资源上传,而不是作为报告以不可见的方式创建文件夹结构; subreport-attached.jrxml作为我的主机的文件资源上载。jrxml报告 )

  • apwop)没有协议前缀的绝对回购路径,例如/repo/path/subreport.jrxml
  • apwp)带有协议前缀的绝对回购路径,例如repo:/repo/path/subreport.jrxml
  • rpwop)没有协议前缀的相对回购路径,例如subreport-attached.jrxml
  • rpwp)带有协议前缀的相对回购路径,例如repo:subreport-attached.jrxml

我还使用上述uri变体尝试了以下操作,但没有成功,正如在web的其他地方所发现的那样

  • JRXmlLoader:

    JRXmlLoader.load(
      new DefaultRepositoryService( 
        DefaultJasperReportsContext.getInstance() 
      ).getInputStream( subrepPath )
    
  • RepositoryUtil:

    RepositoryUtil.getInstance( 
      DefaultJasperReportsContext.getInstance() 
    ).getInputStreamFromLocation( subrepPath )
    
  • JasperServerUtil:与this类似,我仍在尝试并将报告(到目前为止,在适当的Maven jasperserver库支持方面存在问题-其他问题我可能会在another question中解决)
    • 更新:成功了:请参见下面的我的答案

共 (1) 个答案

  1. # 1 楼答案

    呜呜!:)使用com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService的最后一种方法是这样工作的:

    JasperDesign design = JRXmlLoader.load(
       ( (RepositoryService) StaticApplicationContext.getApplicationContext()
         .getBean( "repositoryService" ) 
       )
       .getResourceData( JasperServerUtil.getExecutionContext() , 
         "repo:/some/where/subreport.jrxml" )
       .getDataStream()
    

    呸!难产