项目结构:
战争包括:
jar:
Servlet创建实例并调用方法generate()
@Override
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
A a = new a();
a.generate();
}
然后,方法 in A.class包含以下几行:
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与报告放在相同的war中-- InputStream工作正常,但如果我按war和jar将它们拆分--则不起作用。
冻住了
在线JasperDesign jasperDesign = JRXmlLoader.load(isSubReport);
而且我有一个异常,令人惊讶的是,在没有深入调试的情况下(没有调试-没有异常,白色屏幕):
Method threw 'net.sf.jasperreports.engine.JRRuntimeException' exception. Cannot evaluate net.sf.jasperreports.engine.JRRuntimeException.toString()
这个exeption出现在这里(这是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
发布于 2016-07-14 12:18:02
我通过搜索类似的问题找到了答案。
发布于 2016-07-13 11:54:14
将jar文件添加到web-inf/lib文件夹中,并导入JasperDesign包。
发布于 2016-07-13 12:26:57
如果输入流是问题所在,那么尝试如下
InputStream inputstream = new FileInputStream("/reports/foo.jrxml");
https://stackoverflow.com/questions/38350875
复制相似问题