2012-06-13 132 views
0

当我尝试编译或运行Jasper报告时,出现NoClassDefFoundError错误。Jasper报告NoClassDefFoundError

2012-06-13 14:46:26,710 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/jahtest].[jahtest]] Servlet.service() for servlet jahtest threw exception 
java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.xml.JRXmlDigesterFactory 
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:207) 
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:172) 
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:156) 

我有一套java类封装在war文件中并部署在JBoss default/deploy文件夹中。 我在JBoss的default/lib文件夹中有jasperreports-4.1.2.jar文件,所以我看不到如何解决类路径问题,因为可以看到lib文件夹中的所有其他jar。

我的前端应用程序调用HTTPServlet类,然后使用反射来调用包含Jasper代码的类。一切工作正常,直到这一行被称为 -

JasperDesign jasperDesign = JRXmlLoader.load(strCompiledReportFile); 

strCompiledReportFile是正确的,并存在。这一切在我通过Eclipse运行时都有效,而不是从我的HTTPServlet类中调用。

我现在想要抛弃贾斯珀,因为我遇到过很多问题,所以这是最后一次机会。

干杯可能会提供任何帮助。

+0

除了在我的JBoss default/lib文件夹中包含所有需要的jar之外,还有其他地方应该引用它们吗? 我已经尝试将它们添加到我的war文件的WEB-INF \ lib文件夹中,我也尝试将它们添加到C:\ Program Files \ Java \ jdk1.6.0_13 \ jre \ lib文件夹中,但仍然获得同样的错误。 – user1167796

+0

这太令人沮丧了!当我尝试通过servlet访问Jasper类时,我只会遇到错误。我可以成功访问自己的类,如果我调用一个使用任何Jasper代码的方法,那么我会得到这个classNotFound错误。 – user1167796

+0

好的,这必须是我的servlet的类路径问题。我确定在通过Eclipse运行时,运行时类路径与通过我的servlet运行时不同。我已将所有必需的jar添加到我的war文件中的web-inf/lib文件夹中。它仍然不起作用!我是否必须在我的war文件中的清单文件中设置类路径?如果是这样,我该怎么做? – user1167796

回答

1

我想你错过了jasper在运行时依赖的几个jar。检查thread并确保你的classpath中也有这些jar。

+0

感谢您的建议。刚刚选中并且所有建议的jar文件已经包含在我的JBoss default/lib文件夹中。 – user1167796

+0

我相信你在运行时缺少一些jar,很难分辨出哪一个。堆栈跟踪有更多的信息吗? – helios

+0

这就是所有产生..... – user1167796

0

我不确定它是否也适用于您的情况,但最近我遇到了类似的问题,在加载字体失败(“读取字体数据”问题)后,Jasper Reports将开始为虚假java.lang.NoClassDefFoundError它的许多类;此问题是由于java.awt.Font.createFont(int fontFormat, InputStream fontStream)尝试过而无法创建临时文件而引起的。错误发生在Tomcat内部,但不在Eclipse内部;发生了什么事情是Tomcat自动配置其JVM以指向其临时文件夹而不是默认文件夹,并且Tomcat的临时文件夹已被删除。