`

CXF-03 WebService中传递复杂类型对象

阅读更多

 

前面介绍的都是传递简单的字符串,现在开始介绍传递复杂类型的对象。如JavaBeanArrayListMap等。

 

1首先看看服务器端的代码所需要的JavaBean对象

 

package com.iflytek.entity;

import java.io.Serializable;

/**
 * @author xdwang
 * 
 * @create 2013-7-25 下午7:32:33
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 实体
 * 
 */
public class User implements Serializable {
	private int id;
	private String name;
	private String email;
	private String address;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return this.id + "#" + this.name + "#" + this.email + "#" + this.address;
	}
}

 

下面的是集合传递UsersCXF直接传递集合对象会出现异常,用一个对象包装下就Ok

 

package com.iflytek.entity;

import java.util.HashMap;
import java.util.List;

/**
 * @author xdwang
 * 
 * @create 2013-7-25 下午7:36:02
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description
 * 
 */
public class Users {
	private List<User> users;
	private User[] userArr;
	private HashMap<String, User> maps;

	public List<User> getUsers() {
		return users;
	}

	public void setUsers(List<User> users) {
		this.users = users;
	}

	public User[] getUserArr() {
		return userArr;
	}

	public void setUserArr(User[] userArr) {
		this.userArr = userArr;
	}

	public HashMap<String, User> getMaps() {
		return maps;
	}

	public void setMaps(HashMap<String, User> maps) {
		this.maps = maps;
	}
}

 

 

2下面看看复杂对象传递的服务器端代码

package com.iflytek.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

import com.iflytek.entity.User;
import com.iflytek.entity.Users;

/**
 * @author xdwang
 * 
 * @create 2013-7-25 下午7:34:56
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description WebService传递复杂对象,如JavaBean、Array、List、Map等
 * 
 */
@WebService
@SOAPBinding(style = Style.RPC)
@SuppressWarnings("deprecation")
public class ComplexUserService {
	public User getUserByName(@WebParam(name = "name") String name) {
		User user = new User();
		user.setId(new Date().getSeconds());
		user.setName(name);
		user.setAddress("china");
		user.setEmail(name + "@iflytek.com");
		return user;
	}

	public void setUser(User user) {
		System.out.println("============Server setUser===========");
		System.out.println("setUser:" + user);
	}

	public Users getUsers(int i) {
		List<User> users = new ArrayList<User>();
		for (int j = 0; j <= i; j++) {
			User user = new User();
			user.setId(new Date().getSeconds());
			user.setName("xdwang=" + j);
			user.setAddress("china");
			user.setEmail("xdwang" + j + "@iflytek.com");
			users.add(user);
		}
		Users u = new Users();
		u.setUsers(users);
		return u;
	}

	public void setUsers(Users users) {
		System.out.println("============Server setUsers===========");
		for (User u : users.getUsers()) {
			System.out.println("setUsers:" + u);
		}
	}

	public Users getUserArray(int i) {
		User[] users = new User[i];
		for (int j = 0; j < i; j++) {
			User user = new User();
			user.setId(new Date().getSeconds());
			user.setName("xdwang=" + j);
			user.setAddress("china");
			user.setEmail("xdwang" + j + "@iflytek.com");
			users[j] = user;
		}
		Users u = new Users();
		u.setUserArr(users);
		return u;
	}

	public void setUserArray(Users users) {
		System.out.println("============Server setUserArray===========");
		for (User u : users.getUserArr()) {
			System.out.println("setUserArray:" + u);
		}
	}

	public void setUserMap(Users maps) {
		System.out.println("============Server setUserMap===========");
		System.out.println("setUserMap:" + maps.getMaps());
	}

	public Users getUserMap() {
		HashMap<String, User> users = new HashMap<String, User>();
		User user = new User();
		user.setId(new Date().getSeconds());
		user.setName("xdwang=");
		user.setAddress("china=");
		user.setEmail("xdwangiflytek@gmail.com");
		users.put("A", user);
		user = new User();
		user.setId(new Date().getSeconds());
		user.setName("xiaoming");
		user.setAddress("china$$");
		user.setEmail("xiaoming@iflytek.com");
		users.put("B", user);
		Users u = new Users();
		u.setMaps(users);
		return u;
	}
}

 

3发布WebService的代码

package com.iflytek.service.deploy;

import com.iflytek.service.ComplexUserService;

/**
 * @author xdwang
 * 
 * @create 2013-7-25 下午7:40:04
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 发布ComplexUserService服务
 * 
 */
public class DeployComplexUserService {
	public static void main(String[] args) throws InterruptedException {
		String address = "http://localhost:9000/complexUser";
		DeployUtils.deployService(address, new ComplexUserService());
		Thread.sleep(1000 * 60 * 20);
		System.exit(0);
		System.out.println("Server exit ");
	}
}

 

DeployUtils.java

package com.iflytek.service.deploy;

import javax.xml.ws.Endpoint;

/**
 * @author xdwang
 * 
 * @create 2013-7-25 下午7:40:51
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 发布WebService工具类
 * 
 */
public class DeployUtils {
	public static void deployService(String address, Object service) {
		System.out.println("Server start ……");
		Endpoint.publish(address, service);
	}
}

 

4通过发布后的地址的http://localhost:9000/complexUser?wsdl; wsdl中的内容定制你的客户端调用WebService的接口,当然你也可以让服务器端实现一个接口。

package com.iflytek.service;

import javax.jws.WebParam;
import javax.jws.WebService;

import com.iflytek.entity.User;
import com.iflytek.entity.Users;

/**
 * @author xdwang
 * 
 * @create 2013-7-25 下午7:41:42
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description import javax.jws.WebParam;import javax.jws.WebService;
 * 
 */
@WebService
public interface IComplexUserService {
	public User getUserByName(@WebParam(name = "name") String name);

	public void setUser(User user);

	public Users getUsers(int i);

	public void setUsers(Users users);

	public Users getUserArray(int i);

	public void setUserArray(Users users);

	public void setUserMap(Users maps);

	public Users getUserMap();
}

 

5客户端调用代码

package com.iflytek.client;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.iflytek.entity.User;
import com.iflytek.entity.Users;
import com.iflytek.service.IComplexUserService;

/**
 * @author xdwang
 * 
 * @create 2013-7-25 下午7:42:35
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 调用ComplexUserService客户端
 * 
 */
public class ComplexUserServiceClient {
	public static void main(String[] args) {
		// 调用WebService
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(IComplexUserService.class);
		factory.setAddress("http://localhost:9000/complexUser");
		IComplexUserService service = (IComplexUserService) factory.create();
		System.out.println("=============Client getUserByName==============");
		User user = service.getUserByName("xdwang");
		System.out.println(user);
		user.setAddress("China-Anhui");
		service.setUser(user);
		System.out.println("=============Client getUsers==============");
		Users users = service.getUsers(4);
		System.out.println(users);
		List<User> tempUsers = new ArrayList<User>();
		for (User u : users.getUsers()) {
			System.out.println(u);
			u.setName("xdwang" + new Random().nextInt(100));
			u.setAddress("Chian-Anhui=" + new Random().nextInt(100));
			tempUsers.add(u);
		}
		users.getUsers().clear();
		users.getUsers().addAll(tempUsers);
		service.setUsers(users);
		System.out.println("=============Client getUserArray==============");
		users = service.getUserArray(4);
		User[] userArr = new User[4];
		int i = 0;
		for (User u : users.getUserArr()) {
			System.out.println(u);
			u.setName("xdwang" + new Random().nextInt(100));
			u.setAddress("Chian-Anhui=" + new Random().nextInt(100));
			userArr[i] = u;
			i++;
		}
		users.setUserArr(userArr);
		service.setUserArray(users);
		System.out.println("==================Client getUserMap===============");
		users = service.getUserMap();
		System.out.println(users.getMaps());
		users.getMaps().put("ABA", userArr[0]);
		service.setUserMap(users);
	}
}

 

运行结果:

 

Server start ……
2013-7-25 19:44:31 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.iflytek.com/}ComplexUserServiceService from class com.iflytek.service.ComplexUserService
2013-7-25 19:44:32 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:9000/complexUser
2013-7-25 19:44:32 org.eclipse.jetty.server.Server doStart
信息: jetty-8.1.7.v20120910
2013-7-25 19:44:32 org.eclipse.jetty.server.AbstractConnector doStart
信息: Started SelectChannelConnector@localhost:9000
2013-7-25 19:44:32 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
信息: Creating Service {http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01}Discovery from WSDL: classpath:/org/apache/cxf/ws/discovery/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl
2013-7-25 19:44:32 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be soap.udp://239.255.255.250:3702
2013-7-25 19:44:32 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01}DiscoveryProxy from class org.apache.cxf.jaxws.support.DummyImpl
============Server setUser===========
setUser:40#xdwang#xdwang@iflytek.com#China-Anhui
============Server setUsers===========
setUsers:40#xdwang94#xdwang0@iflytek.com#Chian-Anhui=91
setUsers:40#xdwang77#xdwang1@iflytek.com#Chian-Anhui=1
setUsers:40#xdwang13#xdwang2@iflytek.com#Chian-Anhui=43
setUsers:40#xdwang45#xdwang3@iflytek.com#Chian-Anhui=10
setUsers:40#xdwang69#xdwang4@iflytek.com#Chian-Anhui=70
============Server setUserArray===========
setUserArray:40#xdwang53#xdwang0@iflytek.com#Chian-Anhui=20
setUserArray:40#xdwang59#xdwang1@iflytek.com#Chian-Anhui=73
setUserArray:40#xdwang30#xdwang2@iflytek.com#Chian-Anhui=70
setUserArray:40#xdwang30#xdwang3@iflytek.com#Chian-Anhui=33
============Server setUserMap===========
setUserMap:{ABA=40#xdwang53#xdwang0@iflytek.com#Chian-Anhui=20, A=40#xdwang=#xdwangiflytek@gmail.com#china=, B=40#xiaoming#xiaoming@iflytek.com#china$$}

 

 

分享到:
评论

相关推荐

    WebService CXF 对象传递 附

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

    apache-cxf-2.1.4及教程

    传递复杂类型对象是CXF的一个重要特性。在传统的Web服务中,我们通常只能传递简单类型如字符串、整数等。然而,CXF支持XML Schema定义的复杂数据类型,这意味着你可以直接传递和接收Java对象,这极大地简化了服务...

    CXF-WebService-开发指南、技术文档.docx

    **四、CXF WebService 中传递复杂类型对象** CXF允许在Web服务中传递复杂类型的对象,这通常涉及到数据绑定(Data Binding)。CXF支持JAXB(Java Architecture for XML Binding)来自动将XML与Java对象进行映射。...

    apache-cxf-2.7.4

    SOAP是一种基于XML的消息传递协议,适用于需要强类型和事务处理的场景。而RESTful API则更为轻量级,常用于构建Web资源的交互接口,易于理解和使用。 2. **JAX-WS与JAX-RS支持**:CXF是Java API for XML Web ...

    CXF WebService 开发指南、技术文档

    CXF支持在WebService中传递复杂类型的对象,这通常通过序列化对象为XML实现。复杂类型可以是自定义的Java类,也可以是POJO(Plain Old Java Object)。 1. **定义复杂类型**: - 使用`@XmlRootElement`注解定义根...

    CXF_webService所需jar包

    在Java世界中,CXF是一个广泛使用的工具,因为它提供了丰富的功能和良好的性能。 CXF支持两种主要的Web服务规范:SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。SOAP是一种...

    cxf-ws.zip

    SOAP是一种基于XML的消息传递协议,适用于复杂的、事务性的服务;而REST则更轻量级,常用于资源导向的API设计。CXF允许开发者选择合适的模式来实现服务,提供了丰富的工具和API来简化开发过程。 在创建一个简单的...

    spring,cxf,restful发布webservice传递List,Map,List&lt;Map&gt;

    在IT行业中,Web服务是一...总的来说,结合Spring、CXF和RESTful,我们可以轻松地创建和消费传递复杂对象的Web服务,这在分布式系统和微服务架构中尤其有用。理解并熟练掌握这些技术,对于提升你的IT职业生涯至关重要。

    apache-cxf-3.1.9.zip

    数据绑定允许XML文档与Java对象之间的自动转换,减少了手动处理XML的复杂性。 4. **协议栈**:CXF能够处理多种通信协议,包括HTTP、HTTPS、JMS、SMTP等,同时支持WS-*规范,如WS-Security、WS-ReliableMessaging等...

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

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

    cxf开发指南

    四、CXF WebService 中传递复杂类型对象 1. CXF 支持传递复杂类型对象,包括: * Java 对象 * XML 对象 * JSON 对象 2. CXF 提供了多种方式来传递复杂类型对象,包括: * 通过 CXF 提供的 DataBinding 机制 * ...

    WebService传递对象与集合问题.rar

    本资源"WebService传递对象与集合问题.rar"显然关注的是在Web Service中如何有效地传递复杂数据类型,如对象和集合。 在传统的Web Service中,数据通常通过XML格式进行传输,这是SOAP消息的基础。然而,直接传递...

    WebService_CXF实现及ANT

    2. CXF WebService中传递复杂类型对象: CXF允许在Web服务中传递复杂数据类型,如自定义的Java对象。这通常涉及到XML Schema(XSD)的使用,用于定义这些复杂类型的结构。通过JAXB(Java Architecture for XML ...

    cxf webservice demo

    总的来说,这个"CXF Webservice Demo"是一个完整的示例,涵盖了从基础的字符串传递到复杂的对象交换,以及与Spring的集成。通过学习和理解这个示例,开发者能够更好地掌握如何在实际项目中使用CXF来创建高效、灵活且...

    CXF WebService实例

    接下来,我们要讨论的是如何通过CXF传递复杂数据类型,如`List`和`Map`。CXF支持数据绑定,可以自动将Java对象转换为XML消息,反之亦然。在服务接口中,你可以定义接受或返回`List`或`Map`的方法,然后在实现中处理...

    CXF实现webservice

    SOAP是一种基于XML的消息传递协议,适用于需要强类型和事务处理的复杂环境。CXF支持基于JAX-WS的标准API来创建SOAP服务,开发者可以使用注解或者XML配置文件定义服务接口和服务实现。 #### 2.2 RESTful Web服务 ...

    CXF webService 工具类

    - **数据绑定**:帮助将XML消息自动映射到Java对象,反之亦然,减少手动处理XML的复杂性。 - **错误处理**:提供异常处理机制,便于捕获和处理服务调用中的错误。 4. **使用CXF工具类的步骤** - **添加依赖**:...

    CXF应用整理(包括大文件上传MTOM、安全机制)

    本篇文章将深入探讨 CXF 的一些核心功能,包括简单的 HelloWorld 示例、复杂对象的传递、安全机制以及大文件上传(MTOM)。 ### 1. CXF HelloWorld 示例 创建一个简单的 CXF 服务,首先要定义一个服务接口,使用 `...

    cxf 源码 java websevice

    - 如何利用CXF实现复杂的安全策略和消息传递模式。 - 如何将CXF集成到现有的Java EE应用服务器中,如Tomcat、Jetty等。 - 如何使用CXF与其他Java框架(如Spring)配合,实现松耦合的Web服务解决方案。 总之,Apache...

Global site tag (gtag.js) - Google Analytics