`
Getwaysun
  • 浏览: 31306 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

Apache CXF实战之三 传输Java对象

 
阅读更多
本文链接:http://blog.csdn.net/kongxx/article/details/7527094


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。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics