【发布时间】:2016-07-13 11:47:37
【问题描述】:
项目结构:
战争包含:
- Servlet.class
- pom.xml(包含jar作为依赖)
罐子:
- 包含用于战争的类
Servlet 创建一个实例并调用方法generate():
@Override
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
A a = new a();
a.generate();
}
那么,A.class 中的方法generate 包含以下几行:
InputStream is = this.getClass().getResourceAsStream("/reports/foo.jrxml");
InputStream isSubReport = this.getClass().getResourceAsStream("/reports/foo_subreport.jrxml");
JasperDesign jasperDesign = JRXmlLoader.load(isSubReport);
所以,当我从 jar 项目运行此方法时 - 一切正常。
但是,当我从 war 中调用这个方法时,它有这个 jar 作为依赖项 - 我在线上遇到了一个异常
JasperDesign jasperDesign = JRXmlLoader.load(isSubReport);
从 jar 中调用方法以读取其资源并使其工作的正确方法是什么?
更新:
还是没有解决办法
如果我将 servlet 与报告放在同一个战争中 - InputStream 工作正常,但如果我通过战争和 jar 拆分它们 - 不起作用。
冻结
在线JasperDesign jasperDesign = JRXmlLoader.load(isSubReport);
而且我有一个异常,令人惊讶的是,如果没有深度调试甚至看不到(没有调试没有异常,白屏):
Method threw 'net.sf.jasperreports.engine.JRRuntimeException' exception. Cannot evaluate net.sf.jasperreports.engine.JRRuntimeException.toString()
这个异常出现在这里(这是来自 jasper-reports lib 的类):
public JasperDesign loadXML(InputSource is) throws JRException {
try {
this.digester.push(this);
this.digester.parse(is);
} catch (SAXException var7) {
throw new JRException(var7);
} catch (IOException var8) {
throw new JRException(var8);
} finally {
this.digester.clear(); // this method works fine
}
//this line can not be reached (somewhere appears exception)
if(this.errors.size() > 0) { ...
并且要明确一些东西 - 异常的“messageKey”和“detailMessage”:
util.message.provider.not.found
【问题讨论】: