工作项目使用了SpringMVC的RESTful作为webservice的对外接口; 客户需要我们项目提供wsdl形式的webservice;
初始尝试把CXF整合到项目内, 项目启动后, 在浏览器中访问对应路径 报 No services have been found.
网上看到的原因:文章链接->cxf和spring mvc的集成
Spring MVC是通过DispatcherServlet来加载Spring配置文件的,因此不需要在web.xml中配置ContextLoaderListener。但是CXF却需要通过ContextLoaderListener来加载Spring。
我的情况:
1. 只配DispatcherServlet 就报No services have been found.
2. 只配ContextLoaderListener 就访问不到SpringMVC中的@Controller
3. 根据上面提到的文章, 方案, 进行了配置:
- 在web.xml 中添加 一个ContextLoaderListener
- 添加一个cxf.xml 配置文件, 配置与spring的整合信息.
web.xml 添加的配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/classes/applicationContext_interface.xml, <!-- 项目主配置文件; 之后Spring的DispatcherServlet 也使用了这个配置文件-->
WEB-INF/classes/cxf-server.xml <!-- 项目cxf配置文件; 这个是一个单独的spring 配置文件-->
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- cxf 的servlet -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>