0

运行程序时出现 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 这样的 url,由 Spring Web MVC 中的控制器处理!

这是我在谷歌搜索时发现的!

如果您在 J2EE 环境中工作,那么多个 Classloader 之间的 Class 可见性也会导致 java.lang.NoClassDefFoundError,请参阅示例和场景部分进行详细讨论。

阅读更多:http: //javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz28CQRODWN

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

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

谢谢

4

3 回答 3

2

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

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

于 2012-10-03T02:21:31.157 回答
0

你用的是maven吗?摇篮?蚂蚁?

如果是 Maven,只需添加:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xerces</artifactId>
    <version>2.4.0</version>
    <!-- or whatever version you want -->
</dependency>
于 2012-10-03T02:26:17.270 回答
0

根据 NoClassDefFoundError 的 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,那么您的依赖范围可能设置为编译。您必须将其设置为运行时才能解决此问题。

于 2012-10-03T15:31:31.693 回答