在hibernate下使用XStream会有Cannot handle CGLIB enhanced proxies with multiple callbacks的问题,原因在于hibernate取出来的集合对象其实不是POJO的集合,而是依赖于HIBERNATE API的代理对象,在网上找了下,找到这篇文章
先做记录,有时间做下翻译
以下的代码只在hibernate 2下面做了测试,但是理论上同样适用于hibernate 3
解决这个问题的关键在于,让JVM像处理java.util包下面的 Collection一样处理hibernate的Collection,这样就可以避免臭名昭著"com.thoughtworks.xstream.converters.ConversionException: Cannot handle CGLIB enhanced proxies with multiple callbacks..."异常。
主要分为三个步骤,首先,告诉Xstream像处理java Collection一样处理hibernate Collection
xstream.addDefaultImplementation(
net.sf.hibernate.collection.List.class, java.util.List.class);
xstream.addDefaultImplementation(
net.sf.hibernate.collection.Map.class, java.util.Map.class);
xstream.addDefaultImplementation(
net.sf.hibernate.collection.Set.class, java.util.Set.class);
然后需要注册一些Coverter来帮助Xstream处理这些hibernaye Collection
Mapper mapper = xstream.getMapper();
xstream.registerConverter(new HibernateCollectionConverter(mapper));
xstream.registerConverter(new HibernateMapConverter(mapper));
这样,这些转换器就加入到了Xstream内建的转换器队列当中。在完成了具体的转换代码之后,Xstream就具备了处理hibernate Collection的能力
import net.sf.hibernate.collection.List;
import net.sf.hibernate.collection.Set;
import com.thoughtworks.xstream.converters.collections.CollectionConverter;
import com.thoughtworks.xstream.mapper.Mapper;
class HibernateCollectionConverter extends CollectionConverter {
HibernateCollectionConverter(Mapper mapper) {
super(mapper);
}
public boolean canConvert(Class type) {
return super.canConvert(type) || type == List.class || type == Set.class;
}
}
and
import net.sf.hibernate.collection.Map;
import com.thoughtworks.xstream.converters.collections.MapConverter;
import com.thoughtworks.xstream.mapper.Mapper;
class HibernateMapConverter extends MapConverter {
HibernateMapConverter(Mapper mapper) {
super(mapper);
}
public boolean canConvert(Class type) {
return super.canConvert(type) || type == Map.class;
}
}
这些就是全部了,基本可以解决Hibernate + Xstream出现的问题,Good Luck!
分享到:
相关推荐
修改XStream源码,解决SAE不支持XStream的问题。
多个类注解@XStreamAlias,value相同、且在集合上使用了@XStreamImplicit会出现异常: com.thoughtworks.xstream.converters.ConversionException: No field 'null' found in class '.....(注解的...该包解决了这个bug
最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar ...
《XStream详解与应用》 ...总之,XStream是一个强大且灵活的工具,对于处理Java对象与XML之间的转换,它提供了简洁、高效的解决方案。无论你是新手还是经验丰富的开发者,都能从XStream的易用性和强大功能中受益。
XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发...
xstream最新版jar包
XStream可以与Spring框架、Hibernate等库无缝集成,提供更便捷的数据持久化和传输方案。 八、实战案例 在"XStream+技术指南.docx"中,你将找到丰富的实践示例,涵盖基础操作、复杂类型转换、安全配置等多个方面,...
通过了解以上关键概念,你可以充分利用 XStream 的强大功能,无论是简化数据存储,还是在分布式系统中传递数据,XStream 都能提供简洁、高效的解决方案。在实际项目中,结合文档和 `xstream-1.4-API` 中的示例,你将...
XStream 1.4.15 版本的更新主要目的是解决这些安全问题。开发者引入了新的安全特性,比如默认禁止不受信任的数据源反序列化,以及提供更严格的黑名单策略,来阻止潜在危险类的实例化。这些改进确保了只有白名单中的...
6. **与其他框架集成**:Xstream可以轻松地与Spring、Hibernate等其他Java框架集成,提供更强大的数据序列化和反序列化解决方案。 7. **版本兼容性**:Xstream具有良好的版本兼容性,即使Java类结构发生变化,只要...
6. **兼容性**:XStream 1.4.2支持Java SE 5.0及更高版本,以及大部分流行的企业级框架,如Spring、Hibernate等。 二、XStream的使用方法 1. **基本序列化与反序列化**:通过`XStream.fromXML()`和`xstream.toXML...
《XStream解析依赖包详解》 在Java开发中,数据序列化是一个不可或缺的环节,它使得对象的状态可以被保存和恢复。XStream是一款强大的Java库,用于将Java对象转换为XML,反之亦然,极大地简化了序列化和反序列化的...
XStream库提供了一个简单、直观的方式来实现这种转换,使得XML序列化和反序列化变得非常方便。本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一...
**XStream 概述** XStream 是一个 Java 库,用于将对象序列化为 XML,以及从 XML 反序列化回对象。它提供了一种简单而直观的方式来处理 XML 数据,使得 XML 文档与 Java 对象之间的转换变得轻而易举。这个“xStream...
XStream是一款强大的Java库,用于将Java对象序列化为XML,反之亦然。这个库的主要优点在于其简单易用的API和对复杂对象图的处理能力。在标题中提到的"Xstream相关的jar包",是指为了使用XStream库,需要引入的依赖...
xstream xstream-1.4.5.jar
* XStream 的管理和监控工具可以帮助用户快速定位和解决问题。 * XStream 的管理和监控工具可以集成到 Oracle 企业管理器中,提供统一的管理界面。 Oracle Database XStream 是一个功能强大且灵活的数据捕获和事件...
当需要将数据转换为XML格式以便于传输或处理时,工具如xStream就显得尤为重要。Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream...
### XStream解析各种数据格式...无论是在简单的数据交换场景下还是在复杂的系统集成中,XStream 都能提供有效的解决方案。通过本文介绍的基本使用方法和高级特性,开发者可以更好地利用 XStream 来满足项目的实际需求。
《XStream 1.3.1:Java对象到XML的高效转换工具》 XStream是一款强大的Java库,它能够将Java对象序列化为XML,并能从XML反序列化回Java对象。这个“xstream-1.3.1.zip”文件包含了一个名为“xstream-1.3.1.jar”的...