首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自jar的JasperReports构建报告

来自jar的JasperReports构建报告
EN

Stack Overflow用户
提问于 2016-07-13 11:47:37
回答 3查看 303关注 0票数 0

项目结构:

战争包括:

  • Servlet.class
  • pom.xml (包含jar作为依赖项)

jar:

  • 包含用于war的类。

Servlet创建实例并调用方法generate()

代码语言:javascript
运行
复制
 @Override
public void doGet(HttpServletRequest req,
                  HttpServletResponse resp)
        throws ServletException, IOException {
A a = new a();
a.generate();
}

然后,方法 in A.class包含以下几行:

代码语言:javascript
运行
复制
        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作为依赖项,我在网上得到了一个异常。

代码语言:javascript
运行
复制
JasperDesign jasperDesign = JRXmlLoader.load(isSubReport);

从jar调用方法的正确方法是什么,它将读取它的资源并使其工作?

更新:

仍然没有解决方案

如果我将servlet与报告放在相同的war中-- InputStream工作正常,但如果我按war和jar将它们拆分--则不起作用。

冻住了

在线JasperDesign jasperDesign = JRXmlLoader.load(isSubReport);

而且我有一个异常,令人惊讶的是,在没有深入调试的情况下(没有调试-没有异常,白色屏幕):

代码语言:javascript
运行
复制
Method threw 'net.sf.jasperreports.engine.JRRuntimeException' exception. Cannot evaluate net.sf.jasperreports.engine.JRRuntimeException.toString()

这个exeption出现在这里(这是jasper-reports lib中的类):

代码语言:javascript
运行
复制
 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”:

代码语言:javascript
运行
复制
util.message.provider.not.found
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-14 12:18:02

我通过搜索类似的问题找到了答案。

  1. 您应该构建没有任何依赖项的jar。
  2. 与其把它们放在罐子里,不如把它们加到战争中去。
  3. 构建jar并将其作为对战争的依赖
  4. 使用jar的依赖关系构建war
  5. 完成
票数 0
EN

Stack Overflow用户

发布于 2016-07-13 11:54:14

将jar文件添加到web-inf/lib文件夹中,并导入JasperDesign包。

票数 0
EN

Stack Overflow用户

发布于 2016-07-13 12:26:57

如果输入流是问题所在,那么尝试如下

代码语言:javascript
运行
复制
InputStream inputstream = new FileInputStream("/reports/foo.jrxml");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38350875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档