Web service之 CXF详解
CXF是建立在SOAP协议上的一个Web service框架。什么是SOAP协议,简单来说就是两个不同项目(开发语言不同等)通过xml文件来描述要传输的东西,然后通过HTTP协议传输,接收方把收到的xml解析成需要的对象使用,返回的时候又用xml封装又通过http协议传输,如此就是SOAP协议。而CXF就是两个项目之间为了提供服务,而开发的一个开源框架,使用CXF框架可以快速搭建web service。CXF就是将项目中暴露出来的接口(服务)包装起来,成为wsdl,使用方通过wsdl来调用这些服务。
cxf依赖包
<!-- 需要添加Spring相关最少jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.21.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.21.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.21.RELEASE</version>
</dependency>
<!-- 添加CXF相关jar包 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.5</version>
</dependency>
修改web.xml文件
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<!-- 这个设置很重要,那么我们的webservice的地址就是http://localhost:8080/yourProgramName/webservice/impl -->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
在spring配置文件中引入cxf自带的xml文件
<import resource="classpath:META-INF/cxf/cxf.xml"/><!-- 在 cxf-rt-core.jar中 -->
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/><!-- 在 cxf-rt-transports-http.jar中 -->
定义接口及实现类
定义一个接口与实现类,并且该接口与类需要放在一个包中,且需要在类上标明@WebService注解
@WebService
public interface Hello {
String save(@WebParam(name = "name") String name,@WebParam(name = "age") Integer age,@WebParam(name = "sex") Integer sex);
}
@WebService
@Component("add")
public class HelloImpl implements Hello{
public String save(String name,Integer age,Integer sex){
System.out.println(name+" "+age+" "+sex);
return name+age+sex;
}
}
将实现类交给Spring生成和管理
在实现类中添加 “@Component” 注解,并且修改Spring配置文件,让Spring扫描后管理我们写好的实现类
<!-- 扫描包中的component -->
<context:component-scan base-package="com.mr" />
修改Spring配置文件,暴露webservice的endpoint
在实现类上添加@Component(" ") 相当于是bean标签创建对象
<jaxws:endpoint implementor="#add" address="/user"/>
访问
通过IP:端口号/项目名/webservice(web.xml中定义的)路径访问即可
测试服务端是否可以被调用到使用SoapUI
输出结果表示测试成功,可以被客户端使用。