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

cxf学习笔记之传递复杂对象

    博客分类:
  • j2ee
 
阅读更多
设计思路,创建一个人员注册的web服务。接受客户端传递的人员信息并注册到系统中。而这个人员信息是一个复杂对象。
一、服务端
1、创建人员类
package cn.ibeans.ws.pojo;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Person {
	private String name;
	private String sex;
	/*public Person(String name, String sex) {
		super();
		this.name = name;
		this.sex = sex;
	}*/
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", sex=" + sex + "]";
	}
	
}



2、定义服务接口
package cn.ibeans.ws;

import javax.jws.WebService;

import cn.ibeans.ws.pojo.Person;

/**
 * 设计一个人员报名的web服务,人员信息是一个复杂对象。
 * 服务端接收该对象后进行必要的处理,并将报名结果回传客户端
 * @author llf
 *
 */
@WebService
public interface RegisterWebService {
	public String toRegister(Person person);
        public String toBatchRegister(List<Person> persons);
}


3、定义服务接口的实现类
/**
 * 
 */
package cn.ibeans.ws.impl;

import javax.jws.WebMethod;
import javax.jws.WebService;

import cn.ibeans.ws.RegisterWebService;
import cn.ibeans.ws.pojo.Person;

/**
 * @author llf
 *
 */
@WebService(endpointInterface="cn.ibeans.ws.RegisterWebService")
public class RegisterWebServiceImpl implements RegisterWebService {

	/* (non-Javadoc)
	 * @see cn.ibeans.ws.PersonWebService#toRegister(cn.ibeans.ws.pojo.Person)
	 */

	@Override
	public String toRegister(Person person) {
		if(person!=null){
			System.out.print("注册信息是:"+person);
		}
		return person.getName();
	}

    @Override
	public String toBatchRegister(List<Person> persons) {
		if(persons!=null){
			for(Person person:persons){
				System.out.println(person);
			}
		}
		return "ok";
	}

}


4、发布web服务,这里借助spring
<?xml version="1.0" encoding="UTF-8"?>
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
                        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">  
      
    <import resource="classpath:META-INF/cxf/cxf.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />   

    <jaxws:endpoint id="register"  implementor="cn.ibeans.ws.impl.RegisterWebServiceImpl" address="/ws/register"/>
    
</beans>


5、测试服务是否发布成功
(1)、部署web工程,并启动web容器
(2)、在地址栏中输入:http://localhost:9090/cxfServer/ws/register?wsdl
如果能得到如下图的效果,说明服务发布成功。


二、客户端
可以另建一个java工程来作为上面发布的web服务的客户端,通过调用该服务将人员信息注册到服务端。在java工程创建并加入cxf依赖包后,开始以下步骤:
1、创建服务接口在客户端的引用

打开dos窗口,找到cxf目前的bin目录(前提是你已经下载cxf项目并解压到本地)
执行命令:
wsdl2java http://localhost:9090/cxfServer/ws/register?wsdl

这一命令会在bin目录下生成一个包目录,包含多个java文件。
将这个包目录移到java工程中。我们可以查看生成了哪些文件:
引用

ObjectFactory.java
package-info.java
Person.java
RegisterWebService.java
ToRegister.java
ToRegisterResponse.java

另外还有一个实现类的包,有1个java文件:
引用

HelloWorldImplService.java
我们只关注两个类就可以了:
一个是Person.java,这是web服务接口中的形参,我们要将数据封装到这个对象中,传递给服务端。
另外一个是RegisterWebService.java,它就是web服务类,我们要调用它的接口。

2、调用web服务接口
可以创建一个JUnit测试类,来测试一下:
/**
 * 
 */
package cn.ibeans.test.ws.client;

import junit.framework.Assert;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.junit.Before;
import org.junit.Test;

import cn.ibeans.ws.Person;
import cn.ibeans.ws.RegisterWebService;


/**
 * @author llf
 *
 */
public class RegisterWSTest {
	//RegisterWebService registerClient = (RegisterWebService)new RegisterWebServiceImplService();
	//registerClient.toRegister(null);
	private JaxWsProxyFactoryBean factory;
	private Person person;
	@Before
	public void setUp() throws Exception {
		factory = new JaxWsProxyFactoryBean();
		person = new Person();
		person.setName("zhangsan");
		person.setSex("man");
	}
	@Test
	public void testRegister(){
		factory.setServiceClass(RegisterWebService.class);
		factory.setAddress("http://localhost:9090/cxfServer/ws/register");
		RegisterWebService client = (RegisterWebService)factory.create();
		String result = client.toRegister(person);
		Assert.assertEquals("zhangsan", result);
	}
        
    @Test
	public void testBatchRegister(){
		factory.setServiceClass(RegisterWebService.class);
		factory.setAddress("http://localhost:9090/cxfServer/ws/register");
		RegisterWebService client = (RegisterWebService)factory.create();
		//以上语句的功能 可以通过spring来实现
		Person p1 = new Person();
		p1.setName("zhangsan");
		p1.setSex("man");
		
		Person p2 = new Person();
		p2.setName("lishi");
		p2.setSex("man");
		
		Person p3 = new Person();
		p3.setName("wangwu");
		p3.setSex("woman");
		
		persons = new ArrayList<Person>();
		persons.add(p1);
		persons.add(p2);
		persons.add(p3);
		
		String result = client.toBatchRegister(persons);
		System.out.println("web service调用结果是:"+result);
		Assert.assertEquals("ok", result);
	}
}

如果没个步骤都做对了,你会发现复杂对象Person已经被传递到服务端了。
3、注意:
(1)wsdl2java命令在客户端生成的类,除了与用来封装数据的复杂对象和服务接口类,其它都不是必须的,你也不一定非要用wsdl2java命令,如果对wsdl文档理解得很好完全可以自己写出这2个类
(2)客户端例子中没有用spring.如果用spring.则须在spring的配置文件中加上
<jaxws:endpoint id="client"  serviceClass="cn.ibeans.ws.RegisterWebService" address="http://localhost:9090/cxfServer/ws/register"/>

然后在测试类中先获取叫"client"的引用
  • 大小: 50.2 KB
分享到:
评论

相关推荐

    WebService CXF 对象传递 附

    CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换更加灵活。本文将深入探讨如何在CXF中进行对象传递,并结合相关代码实例来帮助理解。 1. **CXF简介** CXF(Code first ...

    超详细CXF学习笔记

    WebService的实现——CXF学习笔记

    【WebService的实现——CXF学习笔记】 在Java世界中,WebService是一种通过标准协议(如SOAP)进行跨平台、跨语言通信的技术。CXF是Apache软件基金会的一个开源项目,它提供了构建和消费Web服务的工具和库。CXF支持...

    cxf和对Interceptor的支持和传递复杂对象的小例子

    这里的Interceptor就和Filter、Struts的Interceptor很类似,提供它的主要作用就是为了很好的降低代码的耦合性,提供...参照网址:http://www.cnblogs.com/hoojo/archive/2011/03/30/1999587.html,cxf入门很不错的哦!

    CXF学习笔记.docx )

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和服务导向架构(Service-Oriented Architecture, SOA)中的Web服务。CXF允许开发者通过多种方式来创建和消费Web服务,无论是基于...

    cxf学习笔记之结合spring创建客户端

    总的来说,结合Spring创建CXF客户端是一种高效且灵活的方法,它允许我们利用Spring的便利性来管理复杂的Web服务调用。通过这种方式,可以更加专注于业务逻辑,减少与基础设施相关的繁琐工作。对于开发者而言,熟悉...

    Apache_cxf_学习笔记

    本学习笔记旨在提供对Apache CXF的基本理解、功能特性和实际操作指导。 **1. CXF 简介** 1.1 CXF概述 Apache CXF是一个全面的服务开发框架,它允许开发者创建和部署各种类型的Web服务,包括基于SOAP、RESTful、WS-...

    Axis2,CXF版本学习笔记

    当我们谈论“Axis2,CXF版本学习笔记”时,这通常涉及到两个主要的Java Web服务框架:Apache Axis2和Apache CXF。这两个框架都用于构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)...

    Apache cxf 学习笔记.pdf

    Apache CXF 是一个开源的Java框架,它主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)的应用程序。...通过深入学习和实践,开发者可以充分利用CXF的优势,提高软件开发的效率和质量。

    Cxf应用整理学习资料

    在本节中,我们将介绍如何在CXF中传递复杂对象。首先,我们需要定义一个实体类`Demo`,用于存储各种复杂数据类型: ```java public class Demo { private String name; private int age; private List&lt;Integer&gt; ...

    WebService CXF学习文档

    做开发时,查了大量资料,发现一比较全面的资料,分享一下!...对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析

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

    总结,这个例子是一个很好的学习资源,它覆盖了CXF框架下Web服务端和客户端的创建、参数传递、测试等核心知识点。对于初学者而言,通过实践这个demo,可以深入理解Web服务的工作原理,以及CXF框架的使用方式。在实际...

    CXF的学习笔记

    CXF 包含了大量的功能特性,但是主要集中在以下几个方面: 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。...

    webservice+cxf基础笔记和视频,

    总的来说,这份“webservice+cxf基础笔记和视频”资源将引导你进入Web服务的世界,通过学习和实践,你可以掌握使用CXF和Spring进行Web服务开发的基本技能。无论你是初学者还是有一定经验的开发者,这都将是一份有...

    Apache_cxf_学习笔记.docx

    ### Apache CXF 学习笔记知识点汇总 #### 一、CXF简介 ##### 1.1 CXF概述 - **背景介绍**:Apache CXF 是一个高性能、功能丰富的开源框架,用于构建和消费 Web 服务。它融合了 Celtix 和 XFire 两个开源项目的...

    cxf3.0 spirng 集成笔记

    在本文中,我们将探讨如何将Apache CXF 3.0.2版本集成到Spring框架中,以及在这个过程中可能遇到的问题和解决方案。Apache CXF是一个开源的SOA(Service-Oriented Architecture)框架,它允许开发人员创建和消费各种...

    Apache-cxf-学习笔记.docx

    Apache CXF是一个强大的开源Web服务框架,源自Celtix和XFire两个项目的合并,现在作为Apache软件基金会的顶级项目存在。...无论是新手还是经验丰富的开发者,都可以通过CXF的学习和实践,提升Web服务开发的效率和质量。

Global site tag (gtag.js) - Google Analytics