昨晚合租的一个小弟弟问我CXF的问题,配置正常,但是服务端一直发布不成功,项目也不报错,后面发现原因是配置文件加载问题,需要子父容器分别加载。一下子勾起了我的好奇心,今天正好不忙,于是研究一番。
一、服务端
首先上一下配置文件:
1. pom文件
定义下版本,mvn中最新都到3.3.x了,我们用3.1.6. Spring 4.x与CXF 2.*不兼容
<cxf.version>3.1.6</cxf.version>
<!--cxf-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>${cxf.version}</version>
</dependency>
2. cxf 的配置-服务端
我加了拦截器,不需要可自行注释。我看到很多博客都去引了cxf的三个配置文件,其实不需要的,3.0.x以后的版本都不需要去引。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!--jaxws:endpoint发布soap协议的服务,无接口的类-->
<jaxws:endpoint id="hellocxf" address="/hellocxf" implementor="com.basic.demo.cxf.webservice.HelloCXF"/>
<!--jaxws:server发布SOAP协议的服务 ,有接口的实现类 -->
<!--<jaxws:endpoint id="helloFacade" address="/helloFacade" implementor="com.basic.demo.cxf.impl.HelloFacadeImpl"/>-->
<!-- 相当于使用endpoint进行服务发布 无需拦截器直接注释-->
<jaxws:endpoint id="helloFacade"
implementor="com.basic.demo.cxf.impl.HelloFacadeImpl" address="/helloFacade" >
<!-- 配置IN拦截器 -->
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
<bean class="com.basic.demo.cxf.inteceptor.AuthInterceptor"></bean>
</jaxws:inInterceptors>
</jaxws:endpoint>
</beans>
3. 需要暴露服务的类
3.1. 直接暴露的类
类上需要加 @WebService 注解
package com