`
caiying0504
  • 浏览: 341472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebService CXF学习(进阶篇3):对象传递

阅读更多
前面几节都是讲一些理论知识,现在又用一个例子来说明一下,这一节我们就CXF框架对象传递进行讲解。
    第一步:创建传输对象Customer
Java代码 
   @XmlRootElement(name="Customer")   
   @XmlAccessorType(XmlAccessType.FIELD)   
   @XmlType(propOrder = {"name","age"})   
   public class Customer {   
  
private int age;   
private String name;   
  
public int getAge() {   
    return age;   
}   
  
public void setAge(int age) {   
    this.age = age;   
}   
  
public String getName() {   
    return name;   
}   
  
public void setName(String name) {   
    this.name = name;   
}   
  
   }  

    @XmlRootElement(name="Customer")
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(propOrder = {"name","age"})
    public class Customer {

	private int age;
	private String name;

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

    }
 
  @XmlRootElement-指定XML根元素名称(可选)
    @XmlAccessorType-控制属性或方法序列化
    四种方案:
    FIELD-对每个非静态,非瞬变属性JAXB工具自动绑定成XML,除非注明XmlTransient
    NONE-不做任何处理
    PROPERTY-对具有set/get方法的属性进行绑定,除非注明XmlTransient
    PUBLIC_MEMBER -对有set/get方法的属性或具有共公访问权限的属性进行绑定,除非注
    明XmlTransient
    @XmlType-映射一个类或一个枚举类型成一个XML Schema类型

   第二步:创建WebService接口
   Java代码 
 
 @WebService  
  public interface HelloService {   
  
public void save(Customer c1,Customer c2);   
  
public void test(String args);   
  
public Customer get(int id);   
 }   
  
    

   @WebService
   public interface HelloService {

	public void save(Customer c1,Customer c2);
	
	public void test(String args);
	
	public Customer get(int id);
  }
  

   每三步:创建WebService接口实现类
   Java代码 
  @WebService  
  public class HelloServiceImpl implements HelloService {   
  
public void save(Customer c1, Customer c2) {   
  
    System.out.println(c1.getAge()+"---"+c2.getAge());   
    System.out.println(c1.getName()+"---"+c2.getName());   
}   
  
public void test(String args) {   
    System.out.println(args);   
       
}   
  
public Customer get(int id) {   
    Customer cus = new Customer();   
    cus.setAge(100);   
    cus.setName("Josen");   
    return cus;   
}   
  
  
  
   }   
  @WebService
   public class HelloServiceImpl implements HelloService {

	public void save(Customer c1, Customer c2) {

		System.out.println(c1.getAge()+"---"+c2.getAge());
		System.out.println(c1.getName()+"---"+c2.getName());
	}

	public void test(String args) {
		System.out.println(args);
		
	}

	public Customer get(int id) {
		Customer cus = new Customer();
		cus.setAge(100);
		cus.setName("Josen");
		return cus;
	}
	
	

    }
   
    


   第四步:创建服务端
   Java代码 
public class SoapServer {   
  
ublic static void main(String[] args){   
//两种方法,任选一种发布WebService接口   
              //Endpoint.publish("http://localhost:8080/helloService", new    
               HelloServiceImpl());   
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();   
factory.setAddress("http://localhost:8080/helloService");   
factory.setServiceClass(HelloServiceImpl.class);   
              factory.getInInterceptors().add(new LoggingInInterceptor());         
factory.getOutInterceptors().add(new LoggingOutInterceptor());   
factory.create();   
  
  }   
   

   public class SoapServer {

	public static void main(String[] args){
		//两种方法,任选一种发布WebService接口
                //Endpoint.publish("http://localhost:8080/helloService", new 
                 HelloServiceImpl());
		JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
		factory.setAddress("http://localhost:8080/helloService");
		factory.setServiceClass(HelloServiceImpl.class);
                factory.getInInterceptors().add(new LoggingInInterceptor());		
		factory.getOutInterceptors().add(new LoggingOutInterceptor());
		factory.create();
	}
    }
  

  第五步:创建客户端
  Java代码 
 public class SoapClient {   
  
public static void main(String[] args){   
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();   
    factory.setAddress("http://localhost:8080/helloService");   
    factory.setServiceClass(HelloService.class);   
               factory.setServiceClass(HelloServiceImpl.class);   
               factory.getInInterceptors().add(new LoggingInInterceptor());   
    HelloService service = (HelloService)factory.create();   
       
    Customer c1 = new Customer();   
    c1.setAge(1);   
    c1.setName("aaa");   
       
    Customer c2 = new Customer();   
    c2.setAge(2);   
    c2.setName("bbb");   
       
    service.save(c1, c2);   
    service.test("aaaaaaaaaaaaa");   
}   
 }   
   

  public class SoapClient {

	public static void main(String[] args){
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setAddress("http://localhost:8080/helloService");
		factory.setServiceClass(HelloService.class);
                factory.setServiceClass(HelloServiceImpl.class);
                factory.getInInterceptors().add(new LoggingInInterceptor());
		HelloService service = (HelloService)factory.create();
		
		Customer c1 = new Customer();
		c1.setAge(1);
		c1.setName("aaa");
		
		Customer c2 = new Customer();
		c2.setAge(2);
		c2.setName("bbb");
		
		service.save(c1, c2);
		service.test("aaaaaaaaaaaaa");
	}
  }
 

  最后,测试程序
  运行服务端程序,在浏览器地址栏输入http://localhost:8080/helloService?wsdl查看接口是否发布成功。成功则运行一下客户端程序,看看对象传输是否成功。

   现在我们来分析一下控制打印的日志信息。

引用

信息: Inbound Message 
---------------------------- 
ID: 1 
Address: /HelloWorld 
Encoding: UTF-8 
Content-Type: text/xml; charset=UTF-8 
Headers: {content-type=[text/xml; charset=UTF-8], connection=[keep-alive], Host=[localhost:9000], Content-Length=[184], SOAPAction=[""], User-Agent=[Apache CXF 2.2.2], Content-Type=[text/xml; charset=UTF-8], Accept=[*/*], Pragma=[no-cache], Cache-Control=[no-cache]} 
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:say xmlns:ns1="http://client.itdcl.com/"><text> Josen</text></ns1:say></soap:Body></soap:Envelope> 
-------------------------------------- 
2010-1-9 20:41:56 org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose 
信息: Outbound Message 
--------------------------- 
ID: 1 
Encoding: UTF-8 
Content-Type: text/xml 
Headers: {} 
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><text xmlns="http://client.itdcl.com/">hi Josen</text></soap:Header><soap:Body><ns1:sayResponse xmlns:ns1="http://client.itdcl.com/"></ns1:sayResponse></soap:Body></soap:Envelope> 
-------------------------------------- 
2010-01-09 20:41:56.578::INFO:  seeing JVM BUG(s) - cancelling interestOps==0 



     当客户端向服器发送请求时,服务端LoggingInInterceptor拉截客户端发送过来的SOAP消息,如下:

引用

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
<ns1:sayHi xmlns:ns1="http://client.itdcl.com/"> 
<text>Josen</text> 
</ns1:sayHi> 
</soap:Body> 
</soap:Envelope> 

     客户端将请求信息封闭在<soap:Body></soap:Body>中,当然也可以将其放到<soap:Header></soap:Header>,只要在@WebParam中的header设置成true,默认为false;
     服务器接到请求之后,响应客户端。同样以SOAP形式将信息封装好发回客户端,SOAP信息如下:

引用

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Header> 
<text xmlns="http://client.itdcl.com/">hi Josen</text> 
</soap:Header> 
<soap:Body> 
<ns1:sayResponse xmlns:ns1="http://client.itdcl.com/"></ns1:sayResponse> 
</soap:Body> 
</soap:Envelope> 

分享到:
评论

相关推荐

    WebService CXF 对象传递 附

    **WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...

    WebService CXF学习文档

    WebService CXF学习——进阶篇 1.SOAP讲解 2.JAX-WS讲解 3.对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析

    WebService CXF 详细教程

    3. **数据绑定**:CXF支持JAXB和XMLBeans等多种数据绑定技术,简化了XML与Java对象之间的转换。 4. **动态客户端生成**:CXF可以从WSDL生成客户端代码,使得调用服务如同调用本地方法一样简单。 5. **模块化设计**:...

    webservice cxf_demo

    3. **集成工具**:CXF提供了代码生成器,可以自动生成服务客户端和服务端代码,简化开发过程。 4. **强大的调试和测试工具**:CXF提供了一套完整的测试工具,如CXFWS-Security测试工具,可以帮助开发者调试和测试...

    webService(基于cxf)的完整例子

    1. **CXF框架介绍**:CXF,全称为"Code first eXtended Framework",最初由XFire项目发展而来,后与Apache Axiom和Neethi等项目合并。CXF提供了一种从代码直接生成Web服务的方式,支持JAX-WS和JAX-RS标准,使得开发...

    WebService CXF学习-入门篇.pdf

    **WebService CXF 学习——入门篇** **一、WebService CXF 由来与目标** Apache CXF 是一个流行的开源框架,它源自 ObjectWeb Celtix 和 CodeHaus XFire 的合并,这两个项目分别由 IONA 公司和业界知名SOAP堆栈...

    webservice cxf.jar 相关包

    3. 插件支持:CXF有丰富的插件系统,可以集成到IDE如Eclipse中,方便开发和调试。 4. 编码解码:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)和Aegis,用于XML与Java对象之间的转换。 5. ...

    webservice cxf 服务端客户端传递参数的例子demo

    下面我们将深入探讨"webservice CXF 服务端客户端传递参数的例子demo"。 1. **CXF框架介绍** CXF是一个Java框架,它允许开发者通过简单的API来创建和使用Web服务。CXF支持多种Web服务标准,如WS-I Basic Profile、...

    webservice cxf集成servlet

    ### WebService CXF与Servlet集成详解 #### 一、项目准备与搭建 ##### 1. 创建Web Project - **项目命名**:首先,在开发环境中创建一个新的Web项目,并将其命名为`cxf_bigdata`。 ##### 2. 目录结构 - 项目的...

    WebService_CXF学习

    在CXF框架中,学习进阶篇3介绍了如何进行对象传递。在示例中: 1. **创建传输对象**:定义了一个名为`Customer`的Java类,使用了`@XmlRootElement`、`@XmlAccessorType`和`@XmlType`等JAXB注解,以便将对象序列化为...

    Java webservice cxf客户端调用demo和服务端

    1. 生成客户端代理:CXF的WSDL2Java工具可以将服务端的WSDL(Web Service Description Language)文件转换为Java客户端代码,生成服务代理类。 2. 创建服务代理实例:通过代理类,客户端可以创建服务的实例,就像...

    webservice cxf 客户端创建

    本篇文章将深入探讨如何使用Apache CXF来创建一个Web服务客户端。 首先,让我们了解Apache CXF。CXF,全称CXF CXF (Common eXtensible Framework),它提供了多种方式来创建和调用Web服务,包括SOAP(Simple Object ...

    webservice使用cxf的实例

    6. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding),将XML与Java对象之间进行映射。这意味着XML文档可以直接转换为Java对象,反之亦然,简化了数据的序列化和反序列化。 7. **安全性**:CXF支持...

    webservice cxf 整合spring例子源代码

    2. **CXF Bus**:CXF的Bus是整个框架的核心,它可以管理服务的生命周期,处理各种协议和消息格式。在Spring中,可以通过`&lt;cxf:bus&gt;`标签来创建和配置Bus,将它注入到其他需要使用CXF功能的bean中。 3. **服务接口与...

    WebService CXF 对应版本及资源

    WebService CXF 用了一天时间找,官网打不开,国内要积分,下下来又永不了。最后终于搞到手,上传上来分享给大家。 jdk版本 CXF版本 java 9及以上 3.3.x java 8 3.x java 7 2.2x --- 3.2之前版本 java 6 3.1 ...

    基于spring+cxf实现用户文件传输的webservice

    基于spring+cxf实现用户文件传输的webservice 在本文中,我们将探讨如何使用Spring+CXF实现用户文件传输的Webservice。该Webservice提供了基本的报文上传和查询功能,同时还提供了用户身份验证功能。 Spring 和 ...

    WebService cxf

    3. **示例**:CXF提供了一些示例项目,演示了如何创建和调用SOAP和REST服务,这对于初学者来说是非常有价值的参考资料。 4. **API文档**:包括Javadoc,详细说明了CXF的类和方法,帮助开发者更好地使用和集成CXF。 ...

    Webservice-CXF实用手册学习大全

    WebService-CXF实用手册学习大全的知识点涵盖了WebService技术的多个方面,主要分为以下几个部分: 1. WebService基础: - WebService是一种通过网络提供服务的技术,使用HTTP作为传输协议,SOAP作为消息格式,...

    webservice_cxf Demo

    - **WSDL 生成**:CXF 可以根据 Java 接口自动生成 WSDL 文件,这是 Web 服务的合同,描述了服务提供的操作、输入和输出参数。 - **服务实现**:实现上述接口,提供具体的服务逻辑。 - **部署**:使用 CXF 提供的...

Global site tag (gtag.js) - Google Analytics