【问题标题】:JasperReports: Getting java.lang.IllegalArgumentException: nameJasperReports:获取 java.lang.IllegalArgumentException:名称
【发布时间】:2012-10-18 10:52:01
【问题描述】:

我目前正在处理一个包含 jasper 报告、netbeans 7.1.1 和 Glassfish 服务器的项目。似乎带有图像的报告在 Jasper 上成功运行,但是当我通过我的 Web 应用程序运行时,异常被抛出为java.lang.IllegalArgumentException: name

SEVERE: java.lang.IllegalArgumentException: name
at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:460)
at sun.misc.URLClassPath.findResource(URLClassPath.java:146)
at java.net.URLClassLoader$2.run(URLClassLoader.java:385)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findResource(URLClassLoader.java:382)
at java.lang.ClassLoader.getResource(ClassLoader.java:1003)
at java.lang.ClassLoader.getResource(ClassLoader.java:998)
at com.sun.enterprise.v3.server.APIClassLoaderServiceImpl$APIClassLoader.getResource(APIClassLoaderServiceImpl.java:205)
at java.lang.ClassLoader.getResource(ClassLoader.java:998)
at java.lang.ClassLoader.getResource(ClassLoader.java:998)
at org.glassfish.web.loader.WebappClassLoader.getResource(WebappClassLoader.java:1153)
at net.sf.jasperreports.engine.util.JRResourcesUtil.findClassLoaderResource(JRResourcesUtil.java:473)
at net.sf.jasperreports.engine.util.JRLoader.loadBytesFromLocation(JRLoader.java:464)
at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRenderer.java:176)
at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:944)
at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:891)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:256)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:482)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2011)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillGroupHeader(JRVerticalFiller.java:603)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillGroupHeaders(JRVerticalFiller.java:523)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:250)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:110)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:923)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:826)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:59)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247)
at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:203)
at org.serv.ReportServlet.generateReport(ReportServlet.java:142)
at org.serv.ReportServlet.doPost(ReportServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)

谁能帮帮我

【问题讨论】:

  • 能否请您发布堆栈跟踪。它使我们能够更好地帮助您。
  • 您能告诉我们您在 jrxml 中使用的图像路径吗?此链接可能对您有所帮助stackoverflow.com/questions/2746561/…
  • 刚刚被类似的异常消息击中,问题原来是通过 webapp 类路径加载器的类路径中的错误。

标签: java jasper-reports glassfish-3


【解决方案1】:

只需在 ClasssLoader 上使用 try/catch 块包装对 getResource 的调用:

URL url = null;
try {
    url = loader.getResource(fileName);
} catch (final Exception e) {
}

在该语句之后,会检查 url 的空值,如果它是空值,您已经尝试创建 fileNamejava.io.File 对象。首先检查传递的文件名是否为有效文件,如果它不是现有文件,则仅向 ClassLoader 询问 URL,这可能是一个更好的解决方案。

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多