最近一个项目里要用到webservice,因为之前用过CXF,觉得挺好用,就直接用这个了。
项目使用maven构建的,不能参照我之前写的那个CXF帖子,于是到网上搜了一下,发现很多人都是在pom文件里引用了很多<dependency>依赖,apache cxf官方网站上也是这么介绍,说要引用这些jar包,原文如下:
<!-- Use dependency blocks
for these CXF artifact Ids just as above -->cxf-rt-corecxf-rt-frontend-simplecxf-rt-frontend-jaxwscxf-rt-databinding-aegiscxf-rt-transports-localcxf-rt-transports-httpcxf-rt-transports-http-jettycxf-rt-transports-jmscxf-rt-managementcxf-common-utilities既然官方都这么讲了,那就照着做呗。
web.xml和applicationContext-webservice.xml都和上次写的CXF配置一样,由于是maven项目,还用了tomcat的运行插件:
<build>
<finalName>O2OBillService</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<url>http://localhost:8080/manager</url>
<server>tomcat6</server>
<contextReloadable>true</contextReloadable>
</configuration>
</plugin>
</plugins>
</build>运行这个插件,还需要在maven的配置文件settings.xml里面加上下面这一段:
<server>
<server>
<id>tomcat6</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>server里面的id和configuration里面的server要一样。
好了,貌式一切准备就绪了,运行(第一次运行tomcat插件需要配置一下,goals里面填上:tomcat:run),试试
悲了个催,爆了下面一个错,搞死洒家了!
java.lang.ClassCastException: org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.servlet.Servlet
------ 午饭时间到,先吃饭饭去。
上面的那个错误,百度搜了半天,没查到正解;谷歌现在还在被墙的状态,只好去being查了一下,发现是由于servlet-api jar的冲突,需要去掉geronimo-servlet这样的一个jar包,最后的pom依赖如下(其他的配置比如web.xml,app***.xml都没有修改):
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>apache-cxf</artifactId>
<version>2.2.3</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_2.5_spec</artifactId>
</exclusion>
</exclusions>
<type>pom</type>
</dependency>是不是看起来很干净,apache-CXF官方网站实在是不给力。
最后也是可以正常运行了,all right !
本文介绍了在maven项目中使用CXF实现Webservice的配置过程,包括遇到的servlet-api冲突问题及解决方法,通过调整pom依赖解决了错误,实现了正常运行。

2723

被折叠的 条评论
为什么被折叠?



