如何解决java.lang.NoClassDefFoundError?

时间:2012-10-03 02:18:41

标签: java exception spring-mvc error-handling stack-trace

运行我的程序时遇到了java.lang.NoClassDefFoundError! 这是堆栈跟踪:

java.lang.NoClassDefFoundError: org/apache/xerces/framework/XMLParser
abc.def.presentation.controllers.UnixServerJobController.handleRequestInternal(UnixServerJobController.java:64)
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

以下是关注

的代码
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
        throws Exception{
    try{
        String jobName = request.getParameter("JobName");
        jobName.concat(".xml");
        String config = request.getParameter("Config");
        File file = new File(config + "/"+jobName);
        ConfigFile jobConfig = new ConfigFile(file);
        SchdJobCaller jobCaller = getJobCaller();
        jobCaller.runJobs(jobConfig);
    }
    catch(Exception e){
        e.printStackTrace();
        throw e;
    }
    return null;
}

只需传递一个像这样的网址abc.com/def.jsp?JobName=name1&Config=config1,由Spring Web MVC中的控制器处理!

这是我在Google上搜索时发现的内容!

  

如果您在J2EE环境中工作,而多个类加载器中的Class的可见性也会导致java.lang.NoClassDefFoundError,请参阅示例和场景部分以进行详细讨论。

了解详情:http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz28CQRODWN

这可能是问题的根源,但如何解决Class对多个类加载器的可见性!??

这是我第一次收到这样的错误! 对我有什么建议吗?

由于

3 个答案:

答案 0 :(得分:2)

您必须找到包含Apache Xerces XML解析器的JAR并将其放在CLASSPATH中。

看起来像investxa控制器包想要使用Xerces。就个人而言,我认为这不是一个好主意。 Java JDK已经内置了DOM和SAX解析器很长一段时间。

答案 1 :(得分:0)

你正在使用maven吗?摇篮?蚂蚁?

如果是maven,只需添加:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xerces</artifactId>
    <version>2.4.0</version>
    <!-- or whatever version you want -->
</dependency>

答案 2 :(得分:0)

根据NoDlassDefFoundError的JavaDoc,

/**
* Thrown if the Java Virtual Machine or a <code>ClassLoader</code> instance
* tries to load in the definition of a class (as part of a normal method call
* or as part of creating a new instance using the <code>new</code> expression)
* and no definition of the class could be found. 
 * <p>
* The searched-for class definition existed when the currently 
 * executing class was compiled, but the definition can no longer be 
 * found.
*/

我认为xerces jar在编译期间存在但在运行时期间以某种方式丢失。如果您正在处理maven,那么可能您的依赖范围设置为编译。您必须将其设置为运行时才能解决此问题。