< 返回技术文档列表

Apache CXF中如何传输Java对象

发布时间:2021-11-07 01:49:57⊙投诉举报

这篇文章将为大家详细讲解有关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。

关于Apache CXF中如何传输Java对象就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


/template/Home/Zkeys/PC/Static