2007-09-15

JAXB出现的怪异的异常及解决办法

关键字: Exception,java.lang.NoClassDefFoundError: javax/activation/D

笔者做好了一个Java Application的JAXB Project之后,想把它应用到Web Project中,用于实现我们实验室的构建库项目中的REST服务。本来以为三两下就可以搞定,没想到碰到一个怪异的异常,结果搞了整整一天才弄出来。故把它贴出来,希望对同样遇到这样问题的人有所帮助。

异常如下:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: javax/activation/DataSource

        com.sun.xml.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl.<clinit>(RuntimeBuiltinLeafInfoImpl.java:172)

        com.sun.xml.bind.v2.model.impl.RuntimeTypeInfoSetImpl.<init>(RuntimeTypeInfoSetImpl.java:25)

        com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:78)

        com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createTypeInfoSet(RuntimeModelBuilder.java:41)

        com.sun.xml.bind.v2.model.impl.ModelBuilder.<init>(ModelBuilder.java:97)

        com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.java:44)

        com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:320)

        com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:198)

        com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)

        com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55)

        com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:124)

        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        java.lang.reflect.Method.invoke(Method.java:585)

        javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:132)

        javax.xml.bind.ContextFinder.find(ContextFinder.java:286)

        javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:358)

        javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:323)

        javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:244)

        RestServlet.doGet(RestServlet.java:78)

        javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

        javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.

 

解决办法:将\jwsdp-2.0\jwsdp-shared\lib目录下的activation.jar拷贝到Tomcat 5.5\common\lib。
笔者征询了一些,觉得这个在
application中可以运行,但是在web project却抛出异常的原因可能是:application加载xmlObj.component的时候用的是System的类加载器,web中用的是加载你这段程序的类加载器,两者类路径不同,造成这个错误

评论
发表评论

您还没有登录,请登录后发表评论

younker
搜索本博客
最近加入圈子
存档
最新评论