2012-10-03 89 views
0

運行我的程序時,我得到了java.lang.NoClassDefFoundError !? 這裏是堆棧跟蹤:如何解決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; 
} 

剛好路過的URL這樣abc.com/def.jsp?JobName=name1 &配置= CONFIG1代碼由Spring Web MVC中的控制器處理!

這是我搜索時發現的!

如果您在J2EE環境中工作而不是Class中多個Classloaders之間的可見性也會導致java.lang.NoClassDefFoundError,請參閱示例和方案部分以獲得詳細討論。

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

這可能是問題的根源,但如何類的可見性解決到多個類加載器?!

這是我第一次得到這樣的錯誤! 對我有什麼建議嗎?

感謝

+0

一些代碼請。 – Lion

+1

一件簡單的事情就是將一個虛擬引用放到org.apache.xerces.framework.XMLParser的某個地方的某個「外層」的代碼中,以確保它的解析令人滿意。事實上,使用名稱和監視器爲ClassNotFoundException執行'self.getClassLoader()。loadClass()'。如果您遇到ClassNotFoundException,那麼類路徑中缺少該類。如果你得到NoClassDefFoundError,那麼你的jar文件之間會有某種不匹配。如果兩者都得不到,但以後仍然會得到NoClassDefFoundError,那麼你確實可能會遇到多個類加載器的問題。 –

回答

2

你必須找到包含了Apache Xerces XML解析器一個JAR,並把它放在你的CLASSPATH。

看起來像investxa控制器包想使用Xerces。就我個人而言,我認爲這不是一個好主意。 Java JDK內置了DOM和SAX解析器很長一段時間。

0

您使用的是maven嗎?搖籃?螞蟻?

如果行家,只需添加:

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

按照Java文檔的NoClassDefFoundError,

/** 
* 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罐子存在。如果你正在處理maven,那麼可能你的依賴範圍被設置爲編譯。您必須將其設置爲運行時才能解決此問題。

相關問題