根据错误提示信息,去查看了些文档,发现原来java6中rt.jar包中已经发行了jaxb-api-2.0版本。而且在程序启动时,jre先load这个包,导致cxf依赖的jaxb-api-2.1包中的某些class,就无法工作。sun提供了解决方案是endorsed文件下放这些准备覆盖系统自带的包!也就是jaxb-api-2.1.jar , 别忘了也把jaxb-impl-2.1.x 也放进去!
Java6
$JAVA_HOME/lib/endorsed (or$JDK_HOME/jre/lib/endorsed)
tomcat
Tomcat 5.5,则新建文件路径为“Tomcat 5.5/common/endorsed”,
Tomcat 6.0,则新建路径为“Tomcat 6.0/endorsed”。
Jboss请参考
http://nwangwei.spaces.live.com/Blog/cns!3A3D02B743E87051!240.entry
由此可以看出,其他程序只要依赖jaxb-api-2.1以上的程序都会有类似的问题!例如 很多webservice框架就直接依赖这个包。
这个问题给工程的部署带来了麻烦,怎么解决这个问题就要看sun发布新的jdk是否升级jaxb-api了。