本文链接:http://blog.csdn.net/kongxx/article/details/7527094
Apache CXF实战之一 Hello World Web Service
Apache CXF实战之二 集成Sping与Web容器
前面两篇文章介绍了怎样通过CXF来构建最基本的Web Service,并且其中暴露的接口参数和返回值都是字符串,下面来看看一个稍微复杂一点的例子。
1. 首先是一个普通的pojo对象,用来表示一个实体类
2. 创建Web Service接口类
3. 创建Web Service接口的实现类
4. 下面是Server端的代码
5. 下面是Client端的代码
6.测试
首先运行MyServer类,然后运行MyClient类来验证Web Service。
Apache CXF实战之一 Hello World Web Service
Apache CXF实战之二 集成Sping与Web容器
前面两篇文章介绍了怎样通过CXF来构建最基本的Web Service,并且其中暴露的接口参数和返回值都是字符串,下面来看看一个稍微复杂一点的例子。
1. 首先是一个普通的pojo对象,用来表示一个实体类
package com.googlecode.garbagecan.cxfstudy.jaxws;
import java.util.Date;
public class Customer {
private String id;
private String name;
private Date birthday;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this);
}
}
2. 创建Web Service接口类
package com.googlecode.garbagecan.cxfstudy.jaxws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService
public interface CustomerService {
@WebMethod
@WebResult Customer findCustomer(@WebParam String id);
}
3. 创建Web Service接口的实现类
package com.googlecode.garbagecan.cxfstudy.jaxws;
import java.util.Calendar;
public class CustomerServiceImpl implements CustomerService {
public Customer findCustomer(String id) {
Customer customer = new Customer();
customer.setId("customer_" + id);
customer.setName("customer_name");
customer.setBirthday(Calendar.getInstance().getTime());
return customer;
}
}
4. 下面是Server端的代码
package com.googlecode.garbagecan.cxfstudy.jaxws;
import javax.xml.ws.Endpoint;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class MyServer {
private static final String address = "http://localhost:9000/ws/jaxws/customerService";
public static void main(String[] args) throws Exception {
// http://localhost:9000/ws/jaxws/customerService?wsdl
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
factoryBean.setServiceClass(CustomerServiceImpl.class);
factoryBean.setAddress(address);
factoryBean.create();
}
}
5. 下面是Client端的代码
package com.googlecode.garbagecan.cxfstudy.jaxws;
import java.net.SocketTimeoutException;
import javax.xml.ws.WebServiceException;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class MyClient {
public static void main(String[] args) throws Exception {
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setAddress("http://localhost:9000/ws/jaxws/customerService");
factoryBean.setServiceClass(CustomerService.class);
Object obj = factoryBean.create();
CustomerService customerService = (CustomerService) obj;
try {
Customer customer = customerService.findCustomer("123");
System.out.println("Customer: " + customer);
} catch(Exception e) {
if (e instanceof WebServiceException
&& e.getCause() instanceof SocketTimeoutException) {
System.err.println("This is timeout exception.");
} else {
e.printStackTrace();
}
}
}
}
6.测试
首先运行MyServer类,然后运行MyClient类来验证Web Service。