更新
我看到了那些“重复”的答案,并且也接受了。我尝试了这些方法,但对我的问题没有帮助。
因此,为解决此问题,我使用了一个外部资源路径,该路径指向我的.jrxm(用于子报表的.jasper)文件。现在解决了。
此问题不是Jasper: error opening input stream from url和Warning while Running report: Found two components for namespace的重复。
在我的碧玉报告中,有几个子报告将有条件地打印。
在本地运行项目时,我可以下载并查看报告,而不会出现错误。但是当在远程服务器上以.war
文件的形式运行时,会出现此错误:
警告:
找到了命名空间的两个组成部分 http://jasperreports.sourceforge.net/jasperreports/components
错误:
Caused by: net.sf.jasperreports.engine.JRException: Error opening input stream from URL : file:/opt/tigerhrm/tigerhrm-client/target/tigerhrmclient-beta-1.3.0.war!/WEB-INF/classes!/report-templates/employee-details/empWiseContactReport.jasper
at net.sf.jasperreports.engine.util.JRLoader.getInputStream(JRLoader.java:348)
at net.sf.jasperreports.repo.DefaultRepositoryService.getInputStream(DefaultRepositoryService.java:132)
... 80 more
Caused by: java.io.FileNotFoundException: /opt/tigerhrm/tigerhrm-client/target/tigerhrmclient-beta-1.3.0.war!/WEB-INF/classes!/report-templates/employee-details/empWiseContactReport.jasper (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
我正在从控制器设置这样的文件路径:
String jasperResourcePath = request.getServletContext().getRealPath("/WEB-INF/");
InputStream reportInputStream = getClass().getClassLoader().getResourceAsStream("report-templates/attendance.jrxml");
//请注意,所有子报表都直接从jasper链接到 主报告即
<subreportExpression><![CDATA[$P{reportLocation} + "empWiseContactReport.jasper"]]></subreportExpression>
项目结构:
在我的.war
文件中,我已使用如下所示的java-decompiler检查了jasper文件路径:
因此,尽管该路径在.war文件中正确显示,但为什么会出现此错误?任何建议都将受到欢迎。