作者:可惜偏偏孤独一个小姐_448 | 来源:互联网 | 2023-05-16 20:27
本文链接:http:blog.csdn.netkongxxarticledetails7527094ApacheCXF实战之一HelloWorldWebService
本文链接: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;@WebServicepublic 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。