Apache CXF实战之三:传输Java对象
前面两篇文章介绍了怎样通过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。
页:
[1]