birk 发表于 2017-1-5 10:12:41

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]
查看完整版本: Apache CXF实战之三:传输Java对象