您的位置:首页 > 运维架构 > Apache

Apache CXF实战之三 传输Java对象

2012-07-20 10:10 495 查看
前面两篇文章介绍了怎样通过CXF来构建最基本的Web Service,并且其中暴露的接口参数和返回值都是字符串,下面来看看一个稍微复杂一点的例子。

1. 首先是一个普通的pojo对象,用来表示一个实体类

[java]
view plaincopyprint?

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);

}
}

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接口类

[java]
view plaincopyprint?

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);

}

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接口的实现类

[java]
view plaincopyprint?

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;
}
}

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端的代码

[java]
view plaincopyprint?

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();
}
}

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端的代码

[java]
view plaincopyprint?

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();
}
}
}
}

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: