上篇文章是通过main方法来发布及访问webservice,下面通过tomcat来发布,其实只需在上面基础上稍加修改即可:
1.web.xml文件
<display-name>TestCXF</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/cxf-service.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<description>Apache CXF Endpoint</description>
<display-name>cxf</display-name>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
2. service配置文件:
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:server id="jaxwsService" serviceClass="com.uu.service.IService" address="/test">
<!-- address为服务发布二级地址 完整地址为 /项目发布名称/cfx拦截地址/address (cfx拦截地址在web.xml中url-pattern标签中配置) -->
<jaxws:serviceBean>
<!-- 服务实现类 -->
<bean class=" com.uu.service.impl.Service" />
</jaxws:serviceBean>
</jaxws:server>
该文件几乎没变,只是顶上加了三行
3.部署进tomcat并启动测试:http://localhost:8080/TestCXF/services/test?wsdl
显示wsdl的xml文件及成功
注意点:
如果启动服务报错如下:
严重: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:META-INF/cxf/cxf-extension-soap.xml]
可能有两个原因:
一 该工程中的CXFjar包是通过userlibrary形式导入的,解决方案---全部导入web-inf的lib包中再导classpath即可
二 下载的jar包太新,里面没有cxf-extension-soap.xml文件,换成老的cxf版本重新导入项目,我测试时候用的apache-cxf-3.1.7 就不行,马上换了apache-cxf-2.7.18 测试通过
下面附上测试通过的jar包