- 浏览: 932876 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
前面一篇文章介绍的都是传递简单的字符串,现在开始介绍传递复杂类型的对象。如JavaBean、Array、List、Map等。
如有不正确之处,请各位给予指出!
1、 首先看看服务器端的代码所需要的JavaBean对象
package com.wy.object.entry; import java.io.Serializable; /** * User Entity * @author Administrator * */ public class User implements Serializable { private static final long serialVersionUID = 1L; 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.address + " - " + this.email; } }
下面的是集合传递Users,CXF直接传递集合对象会出现异常,用一个对象包装下就Ok了,不知道是什么原因。
package com.wy.object; import java.util.HashMap; import java.util.List; import com.wy.object.entry.User; /** * CXF直接传递集合对象会出现异常,用一个对象包装下就Ok了,不知道是什么原因? * * @author Administrator * */ 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、 下面看看复杂对象传递的服务器端代码
interface:
package com.wy.object.server; import javax.jws.WebParam; import javax.jws.WebService; import com.wy.object.Users; import com.wy.object.entry.User; /** * 定制客户端请求WebService所需要的接口 * @author Administrator * */ @WebService public interface IUserService { 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(); }
接口实现类:
package com.wy.object.server.impl; 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.wy.object.Users; import com.wy.object.entry.User; import com.wy.object.server.IUserService; /** * WebService传递复杂对象,如JavaBean、Array、List、Map等 * * @author Administrator * */ @WebService(endpointInterface = "com.wy.object.server.IUserService", serviceName = "IUserService") @SOAPBinding(style = Style.RPC) @SuppressWarnings("deprecation") public class UserService implements IUserService { // string public User getUserByName(@WebParam(name = "name") String name) { User user = new User(); user.setId(new Date().getSeconds()); user.setName(name); user.setAddress("China BeiJing"); user.setEmail(name + "@163.com"); return user; } // object JavaBean public void setUser(User user) { System.out.println("@@@@@@@@@@@@ Server setUser @@@@@@@@@@@"); System.out.println("setUser:" + user); } // 传递集合的包装对象 List 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("Sun#" + j); user.setAddress("China"); user.setEmail("Sun" + j + "@163.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); } } // 传递集合的包装对象 Array 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("Jack#" + j); user.setAddress("China"); user.setEmail("Jack" + j + "@163.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); } } // 传递集合的包装对象 Map 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("Jack#"); user.setAddress("China#"); user.setEmail("Jack@163.com"); users.put("A", user); user = new User(); user.setId(new Date().getSeconds()); user.setName("Tom"); user.setAddress("China$$"); user.setEmail("Tom@163.com"); users.put("B", user); Users u = new Users(); u.setMaps(users); return u; } }
3、 发布WebService的代码
package com.wy.object; import javax.xml.ws.Endpoint; import com.wy.object.server.impl.UserService; /** * 发布UserService服务 * @author Administrator * */ public class DeployUserService { public static void main(String[] args) throws InterruptedException { String address = "http://localhost:8080/WebServiceCXF/services/IUserService"; UserService service = new UserService(); Endpoint.publish(address, service); System.out.println("Server ready..."); Thread.sleep(1000 * 60 * 20); System.out.println("Server exit..."); System.exit(0); } }
4、 客户端调用代码
package com.wy.object.client; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.wy.object.Users; import com.wy.object.entry.User; import com.wy.object.server.IUserService; /** * 调用UserService客户端 * * @author Administrator * */ public class UserServiceClient { public static void main(String[] args) { // 调用WebService JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(IUserService.class); factory.setAddress("http://localhost:8080/WebServiceCXF/services/IUserService"); IUserService service = (IUserService) factory.create(); //string System.out.println("@@@@@@@@@@@@@Client getUserByName@@@@@@@@@@@@@@"); User user = service.getUserByName("Jack"); System.out.println("Client: "+ user); user.setAddress("China-BeiJing"); //object JavaBean service.setUser(user); //传递集合的包装对象 List System.out.println("#############Client getUsers###################"); Users users = service.getUsers(4); System.out.println("Client: "+ users); List<User> tempUsers = new ArrayList<User>(); for (User u : users.getUsers()) { System.out.println("Client: "+ u); u.setName("Jack" + new Random().nextInt(100)); u.setAddress("Chian-BeiJing#" + new Random().nextInt(100)); tempUsers.add(u); } users.getUsers().clear(); users.getUsers().addAll(tempUsers); service.setUsers(users); //传递集合的包装对象 Array 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("Client: "+ u); u.setName("Jack" + new Random().nextInt(100)); u.setAddress("Chian-ShenZhen#" + new Random().nextInt(100)); userArr[i] = u; i++; } users.setUserArr(userArr); service.setUserArray(users); //传递集合的包装对象 Map System.out.println("------------Client getUserMap----------------"); users = service.getUserMap(); System.out.println("Client: "+ users.getMaps()); users.getMaps().put("ABA", userArr[0]); service.setUserMap(users); } }
评论
9 楼
we0476
2013-03-10
一样的文章贴来贴去 有意思没?
8 楼
we0476
2013-03-09
请问你就没有配置web.xml之类的文件么?
7 楼
Itach
2012-11-16
补充6楼:
服务端:
private List<Material> materials;
public void setMaterials(List<Material> materials){
this.materials = materials;
}
public void setMaterial(List<Material> materials){
this.materials = materials;
}
生成的客户端:
@XmlElement(nillable = true)
protected List<Material> materials;
public List<Material> getMaterials() {
if (materials == null) {
materials = new ArrayList<Material>();
}
return this.materials;
}
无 setMaterials() 方法
服务端:
private List<Material> materials;
public void setMaterials(List<Material> materials){
this.materials = materials;
}
public void setMaterial(List<Material> materials){
this.materials = materials;
}
生成的客户端:
@XmlElement(nillable = true)
protected List<Material> materials;
public List<Material> getMaterials() {
if (materials == null) {
materials = new ArrayList<Material>();
}
return this.materials;
}
无 setMaterials() 方法
6 楼
Itach
2012-11-16
您好,请问CXF框架下,服务端实体类代码中有List类型的属性,在客户端生成的该类对应的代码只有getter方法,没有setter方法,该怎么解决。
5 楼
jiangli19192
2012-08-30
如果在线的话,请联系我,qq:362503078
4 楼
jiangli19192
2012-08-30
cxf能把对象转化成json格式输出,那服务端接收参数是对象,但是客户端传入的是json格式,能不能自动转换?
3 楼
萧_瑟
2012-03-30
温柔的羊 写道
萧_瑟 写道
您好,请问你说的 :CXF直接传递集合对象会出现异常。这个异常指的是什么异常呢?是这个吗?
[javax.xml.bind.JAXBException: class xxxxxxxx nor any of its super class is known to this context.]
我通过JSON封装了一个Bean
String result = JSonDataFormatUtils.resultJSonFormat(object);
然后通过CXF webservice去获得这个json的result 数据就报出这个错了,你知道怎么解决吗?
如果不通过CXF,普通的方法调用就可以获得,不知道是什么原因。
[javax.xml.bind.JAXBException: class xxxxxxxx nor any of its super class is known to this context.]
我通过JSON封装了一个Bean
String result = JSonDataFormatUtils.resultJSonFormat(object);
然后通过CXF webservice去获得这个json的result 数据就报出这个错了,你知道怎么解决吗?
如果不通过CXF,普通的方法调用就可以获得,不知道是什么原因。
把跟接口和实现类放到同一个包下面,试一试。
可能是cxf在object和xml转换的时候会默认在同一个包下面找。
还是不行。
2 楼
温柔的羊
2012-03-29
萧_瑟 写道
您好,请问你说的 :CXF直接传递集合对象会出现异常。这个异常指的是什么异常呢?是这个吗?
[javax.xml.bind.JAXBException: class xxxxxxxx nor any of its super class is known to this context.]
我通过JSON封装了一个Bean
String result = JSonDataFormatUtils.resultJSonFormat(object);
然后通过CXF webservice去获得这个json的result 数据就报出这个错了,你知道怎么解决吗?
如果不通过CXF,普通的方法调用就可以获得,不知道是什么原因。
[javax.xml.bind.JAXBException: class xxxxxxxx nor any of its super class is known to this context.]
我通过JSON封装了一个Bean
String result = JSonDataFormatUtils.resultJSonFormat(object);
然后通过CXF webservice去获得这个json的result 数据就报出这个错了,你知道怎么解决吗?
如果不通过CXF,普通的方法调用就可以获得,不知道是什么原因。
把跟接口和实现类放到同一个包下面,试一试。
可能是cxf在object和xml转换的时候会默认在同一个包下面找。
1 楼
萧_瑟
2012-03-29
您好,请问你说的 :CXF直接传递集合对象会出现异常。这个异常指的是什么异常呢?是这个吗?
[javax.xml.bind.JAXBException: class xxxxxxxx nor any of its super class is known to this context.]
我通过JSON封装了一个Bean
String result = JSonDataFormatUtils.resultJSonFormat(object);
然后通过CXF webservice去获得这个json的result 数据就报出这个错了,你知道怎么解决吗?
如果不通过CXF,普通的方法调用就可以获得,不知道是什么原因。
[javax.xml.bind.JAXBException: class xxxxxxxx nor any of its super class is known to this context.]
我通过JSON封装了一个Bean
String result = JSonDataFormatUtils.resultJSonFormat(object);
然后通过CXF webservice去获得这个json的result 数据就报出这个错了,你知道怎么解决吗?
如果不通过CXF,普通的方法调用就可以获得,不知道是什么原因。
发表评论
-
WebService CXF --- 传输文件MTOM
2011-12-25 14:06 13183一、几个相关的概念 ... -
WebService CXF JAXB角色及简单使用
2011-12-24 22:23 3655WebService传递XML文档,当然也可以传递JSON对象 ... -
WebService CXF SOAP基本结构
2011-12-24 18:20 2087SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP ... -
WebService CXF WSDL描述
2011-12-24 18:16 1296原文http://www.ibm.com/develo ... -
Sping3+CXF Web应用
2011-12-24 00:21 1493一、准备环境 Apache Cxf 2.4.5 ... -
WebService CXF下的Service(URL, QName, WebServiceFeature[]) is undefined
2011-09-21 21:11 2704Service(URL, QName, WebServiceF ... -
WebService CXF 如何设置 timeout
2011-05-21 09:31 4383由于用CXF构建的webservice使用的是spring配置 ... -
让Apache CXF 支持传递java.sql.Timestamp和java.util.HashMap类型
2011-05-02 12:46 2484让Apache CXF 支持传递java.sql.Timest ... -
WebService CXF 中的拦截器(Interceptor)
2011-05-02 12:38 3594CXF的Interceptor在每个请求响应之前或响应之后,做 ... -
WebService CXF --- 由WSDL文件开发Client端
2011-04-30 17:49 3870WSDL文件:http://www.webxml.com.cn ... -
WebService CXF----JAX-RPC 与 JAX-WS
2011-04-30 10:00 4393Web服务: 1、SOAP 2、WSDL ... -
WebService CXF --- 创建基础的示例
2011-04-09 16:11 15781、开发环境: cxf-2.3.3 ... -
WebService CXF --- CXF简单介绍
2011-04-09 14:48 41791、WebService介绍 WebService让 ... -
Web Service中的XFire 传输List、Map 自定义对象
2011-04-05 09:14 7839简单记录XFire中怎么传输对象的实现,以备查阅;又不正确的地 ... -
一个基础的XFire WebService快速开发
2011-04-03 09:03 1567环境: XFire-1.2.6 JDK1.5 MyEcl ... -
axis和xfire以及CXF
2011-04-03 08:51 1554由于最近使用WebService,于是到网上疯狂搜索,找点资料 ...
相关推荐
**WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...
下面我们将深入探讨"webservice CXF 服务端客户端传递参数的例子demo"。 1. **CXF框架介绍** CXF是一个Java框架,它允许开发者通过简单的API来创建和使用Web服务。CXF支持多种Web服务标准,如WS-I Basic Profile、...
2. CXF WebService中传递复杂类型对象: CXF允许在Web服务中传递复杂数据类型,如自定义的Java对象。这通常涉及到XML Schema(XSD)的使用,用于定义这些复杂类型的结构。通过JAXB(Java Architecture for XML ...
在描述中提到的【详细配置及参数传递】是指在实现WebService时,我们需要对服务端进行一系列配置,并确保能够正确地接收和传递参数。以下是这些概念的详细说明: 1. **服务端配置**: - **JavaBean对象**:在示例...
接下来,我们要讨论的是如何通过CXF传递复杂数据类型,如`List`和`Map`。CXF支持数据绑定,可以自动将Java对象转换为XML消息,反之亦然。在服务接口中,你可以定义接受或返回`List`或`Map`的方法,然后在实现中处理...
本资源"WebService传递对象与集合问题.rar"显然关注的是在Web Service中如何有效地传递复杂数据类型,如对象和集合。 在传统的Web Service中,数据通常通过XML格式进行传输,这是SOAP消息的基础。然而,直接传递...
在IT行业中,Web服务是一...总的来说,结合Spring、CXF和RESTful,我们可以轻松地创建和消费传递复杂对象的Web服务,这在分布式系统和微服务架构中尤其有用。理解并熟练掌握这些技术,对于提升你的IT职业生涯至关重要。
总的来说,这个"CXF Webservice Demo"是一个完整的示例,涵盖了从基础的字符串传递到复杂的对象交换,以及与Spring的集成。通过学习和理解这个示例,开发者能够更好地掌握如何在实际项目中使用CXF来创建高效、灵活且...
CXF支持在WebService中传递复杂类型的对象,这通常通过序列化对象为XML实现。复杂类型可以是自定义的Java类,也可以是POJO(Plain Old Java Object)。 1. **定义复杂类型**: - 使用`@XmlRootElement`注解定义根...
SOAP是一种基于XML的消息传递协议,适用于需要强类型和事务处理的复杂环境。CXF支持基于JAX-WS的标准API来创建SOAP服务,开发者可以使用注解或者XML配置文件定义服务接口和服务实现。 #### 2.2 RESTful Web服务 ...
- **数据绑定**:帮助将XML消息自动映射到Java对象,反之亦然,减少手动处理XML的复杂性。 - **错误处理**:提供异常处理机制,便于捕获和处理服务调用中的错误。 4. **使用CXF工具类的步骤** - **添加依赖**:...
在这个例子中,`Customer`类将作为Web服务参数进行传递,通过CXF框架,开发者可以轻松地在服务端和客户端之间交换复杂的数据对象,实现了Java对象到XML的自动转换和反转换,简化了Web服务开发的复杂度。通过这样的...
在本文中,我们将深入探讨如何使用Apache CXF框架来处理JavaBean式的复合类型以及List集合类型的参数和返回值。CXF是一个开源的、强大的Web服务框架,它支持多种Web服务标准,包括SOAP、RESTful等,并且允许开发者以...
**四、CXF WebService 中传递复杂类型对象** CXF允许在Web服务中传递复杂类型的对象,这通常涉及到数据绑定(Data Binding)。CXF支持JAXB(Java Architecture for XML Binding)来自动将XML与Java对象进行映射。...
在本节中,我们将介绍如何在CXF中传递复杂对象。首先,我们需要定义一个实体类`Demo`,用于存储各种复杂数据类型: ```java public class Demo { private String name; private int age; private List<Integer> ...
**四、CXF WebService 中传递复杂类型对象** 除了基本类型,CXF还支持在Web服务中传递复杂类型对象。你可以定义Java类来表示这些复杂类型,并在服务接口中作为参数或返回值。CXF会自动处理这些对象的序列化和反序列...
传递复杂类型对象是CXF的一个重要特性。在传统的Web服务中,我们通常只能传递简单类型如字符串、整数等。然而,CXF支持XML Schema定义的复杂数据类型,这意味着你可以直接传递和接收Java对象,这极大地简化了服务...
在Java世界中,CXF是一个广泛使用的工具,因为它提供了丰富的功能和良好的性能。 CXF支持两种主要的Web服务规范:SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。SOAP是一种...