运行我的程序时遇到了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对多个类加载器的可见性!??
这是我第一次收到这样的错误! 对我有什么建议吗?
由于
答案 0 :(得分:2)
您必须找到包含Apache Xerces XML解析器的JAR并将其放在CLASSPATH中。
看起来像investxa控制器包想要使用Xerces。就个人而言,我认为这不是一个好主意。 Java JDK已经内置了DOM和SAX解析器很长一段时间。
答案 1 :(得分:0)
如果是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,那么可能您的依赖范围设置为编译。您必须将其设置为运行时才能解决此问题。