CXF、Spring与JDK

今天闲来无事,学习了下apache CXF,cxf是xfire的升级版,xfire有的特性cxf都有,比如SOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports such as HTTP, JMS or JBI.总之,个人感觉cxf是一个很有前途的框架。
例子教程网上搜到很多,大家几乎都是从官网上http://cxf.apache.org/学习的。当然我也如此,在参考下大家的教程,很快一个webservice便出炉了,可事实上却并没有我们想象的那么容易,因为我下载的是cxf-2.1.3,jdk使用的是jdk1.5,在做测试时就会出现下面问题:
Caused by: java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/MyEclipseWork/myWorkspace/AtomInterface/WebRoot/WEB-INF/lib/jaxb-impl-2.1.7.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.1 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)

问题很明确了,就是因为JAXB包的冲突造成的,因为jdk中已经带有jaxb的实现,可惜是2.0的,但是我们的cxf却要2.1的,所以这就是问题之根本,如何解决?
看了下jdk的目录结构,没有发现在那里加载了jaxb,google后发现了一些解决方案,http://blog.csdn.net/njchenyi/archive/2008/05/19/2456981.aspx 和 http://java.sun.com/j2se/1.5.0/docs/guide/standards/ 这种方案为没有尝试,毕竟这是要有一些改变jdk,我认为不好。还有人说是使用JDK1.6就OK了,因为JDK1.6使用的是jaxb2.1的实现。我觉得既然我们jdk只支持jaxb2.0,那么我们就用jaxb2.0好了,把cxf的版本降低不就行了吗。更换三个jar即可(cxf-2.0.9.jar、jaxb-impl-2.0.5.jar和jaxb-api-2.0.jar)。

你可能感兴趣的:(spring,jdk,webservice,J2SE,sun)