2016-07-13 58 views
0

項目結構報告:JasperReports的建設從罐子

戰爭包含:

  • Servlet.class
  • 的pom.xml(包括JAR的依賴)

罐子:

  • 包含在戰爭中使用的類

servlet創建一個實例,並調用方法generate()

@Override 
public void doGet(HttpServletRequest req, 
        HttpServletResponse resp) 
     throws ServletException, IOException { 
A a = new a(); 
a.generate(); 
} 

然後,方法generate中的A.class包含這些行:

 InputStream is = this.getClass().getResourceAsStream("/reports/foo.jrxml"); 
    InputStream isSubReport = this.getClass().getResourceAsStream("/reports/foo_subreport.jrxml"); 
     JasperDesign jasperDesign = JRXmlLoader.load(isSubReport); 

所以,當我運行這個方法從罐子項目 - 一切都很好。

然而,當我打電話從戰爭這個方法,它有這個罐子是依賴 - 我正在上線異常

JasperDesign jasperDesign = JRXmlLoader.load(isSubReport); 

什麼是調用方法從罐子將讀取它的正確方法資源並使其工作?

UPDATE:

還是無解

如果我把在同一報告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 

回答

0

我通過類似的問題搜索找到了答案。

  1. 你應該建立沒有任何依賴關係的jar。

  2. 不要把它們放到jar裏面,你應該把它們加入到war中。

  3. 構建罐子並把它作爲依賴於戰爭

  4. 構建戰爭與罐子的依賴

  5. 完成

0

jar文件添加到您的WEB-INF/lib文件夾和進口JasperDesign包。

+0

將在幾分鐘內 – quento

+0

等待,我已經進口的嘗試它。問題出在inputStream – quento

+0

你有什麼異常? –

0

如果輸入流是那麼問題試試這個

InputStream inputstream = new FileInputStream("/reports/foo.jrxml");