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を渡すだけで、SpringWebMVCのコントローラーによって処理されます。

これは私がグーグルで回ったときに見つけたものです!

J2EE環境で作業している場合、複数のクラスローダー間でクラスが表示されるとjava.lang.NoClassDefFoundErrorが発生する可能性があります。詳細については、例とシナリオのセクションを参照してください。

続きを読む:http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz28CQRODWN

これが問題の根本である可能性がありますが、複数のクラスローダーに対するクラスの可視性を解決する方法!??

このようなエラーが発生したのはこれが初めてです。何かアドバイスはありますか?

ありがとう

4

3 に答える 3

2

Apache Xerces XMLパーサーを含むJARを見つけて、それをCLASSPATHに入れる必要があります。

InvestmentxaコントローラーパッケージがXercesを使用したいと考えているようです。個人的には、それは良い考えではないと思います。Java JDKには、かなり前からDOMパーサーとSAXパーサーが組み込まれています。

于 2012-10-03T02:21:31.157 に答える
0

Mavenを使用していますか?Gradle?蟻?

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 に答える