WebService CXF整合Spring框架
1. 准备工作
使用Maven构建一个Web项目,并添加如下依赖:
cxf框架依赖:
<!-- apache cxf框架依赖 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.9</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.1.9</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.9</version>
</dependency>
Spring框架依赖:
<!-- spring-mvc webmvc依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- spring-mvc JDBC依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
其他依赖按照需要自行导入。
2. 配置web.xml
在web.xml中配置处理webservice请求的Servlet
<!-- WebService配置(CXF方式) -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<!-- 以ws开头的请求路径将会交给cxf来处理 -->
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
3. 编写WebService接口
OrderProcess.java:
@WebService
public interface OrderProcess {
@WebMethod
String processOrder(Order order);
}
4. 编写WebService接口实现类
OrderProcessImpl.java
public class OrderProcessImpl implements OrderProcess {
@Override
public String processOrder(Order order) {
System.out.println(order);
return "Hello From Server";
}
}
5. 实体类
public class Order {
private String customerID;
private String itemID;
private int qty;
private double price;
public String getCustomerID() {
return customerID;
}
public void setCustomerID(String customerID) {
this.customerID = customerID;
}
public String getItemID() {
return itemID;
}
public void setItemID(String itemID) {
this.itemID = itemID;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Order{" +
"customerID='" + customerID + '\'' +
", itemID='" + itemID + '\'' +
", qty=" + qty +
", price=" + price +
'}';
}
}
6. 配置applicationContext-cxf.xml
在WEB-INF中创建applicationContext-cxf.xml并做出如下配置:
<?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.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<!-- endpoint元素:配置WebService终端
id属性:该bean对象的id
implementor属性:指定webservice的SEI
address属性:该WebService服务的访问地址-->
<jaxws:endpoint
id="orderProcess"
implementor="cn.jxzhang.test.model.OrderProcessImpl"
address="/OrderProcess">
<!-- 配置入拦截器 -->
<jaxws:inInterceptors>
<!-- 添加一个服务器日志入拦截器 -->
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
</jaxws:inInterceptors>
<!-- 配置出拦截器 -->
<jaxws:outInterceptors>
<!-- 添加一个服务器日志出拦截器 -->
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
</jaxws:outInterceptors>
</jaxws:endpoint>
</beans>
7. 发布项目
将项目发布到tomcat上,访问:
http://localhost:8080/ws
将会得到WebService服务列表,点击相应服务即可跳转到该服务的wsdl文档页面。