`
fengjianquan9527
  • 浏览: 32968 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过XStream将XML转Bean中使用泛型的一点疑惑

    博客分类:
  • java
阅读更多
今天在做XMl转为Bean的实例,遇到一个奇怪的问题,出代码先:
//工具类:
@SuppressWarnings("unchecked")
public  Object   readXml2Bean(String xml,Class rootClazz,Class headClazz,Class detailClazz){
try {
  xstream.alias("Root",rootClazz);
  xstream.alias("Head",headClazz);
  xstream.alias("Detail",detailClazz);
  return xstream.fromXML(xml);
}catch (Exception e) {
  e.printStackTrace();
  return null;
  }
}
//Head节点用泛型
public class PackRoot<T,M> {
  private T Head;
  public List<M> Detail_List;
  //getter/setter方法略
}
//Head节点用具体类型声明
public class PackRoot<M> {
  private PackHead Head;
  public List<M> Detail_List;
  //getter/setter方法略
}
//测试用例:
File file =new File("D:\\2001.xml");
BufferedReader bf =new BufferedReader(new FileReader(file));
StringBuilder sb=new StringBuilder();
String temp=null;
while((temp=bf.readLine())!=null){
sb.append(temp);
}
Object root=XMl2BeanUtil.getInstance().readXml2Bean(sb.toString(),PackRoot.class, PackHead.class,PackDetail.class);
if(root==null){
  System.out.println("解析报文出错[xml]="+sb.toString());
}
PackRoot<PackHead,PackDetail> rt=(PackRoot<PackHead,PackDetail>)root;
PackHead  head=rt.getHead();
List<PackDetail> details=rt.getDetail_List();
System.out.println("head="+head);
System.out.println("details="+details);
for(PackDetail detail:details){
System.out.println(detail);
}
报文结构:
<Root>
<Head>
   ......
</Head>
<Detail_List>
   <Detail>
     ......
   </Detail>
   <Detail>
     ......
   </Detail>
</Detail_List>
</Root>

场景:
  由于业务需求的报文头部(Head)和详情(Detail)里面节点内容不同,所以立马想到,在定义PackRoot时,通过泛型来该Head和Detail进行声明Head和Detail。

问题:
1:将Head和Detail都声明为泛型,代码见PackRoot(Head节点用泛型)! 就无法识别Head下面的子节点(错误如图);但是Detail是可以识别且得到对应子节点内容。
但是,将Head使用具体类型声明,Detail使用泛型声明,Head和Detail都能被解析。



不知道具体是什么原因?想不通!期待各位大侠高见,不吝赐教!!!
  • 大小: 27.7 KB
分享到:
评论

相关推荐

    xStream xml to bean

    在`beanToXml()` 方法中,同样需要初始化xStream实例,然后使用`toXML()` 方法将Bean对象转换为XML字符串: ```java public String beanToXml(YourBeanClass bean) { XStream xstream = new XStream(new DomDriver...

    Java用xStream拼接xml

    Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...

    xstream 1.3.1.jar bean对象转换为xml

    XStream 是一个强大的Java库,它能够将Java对象序列化为XML,并且可以从XML反序列化回Java对象。在标题和描述中提到的"1.3.1.jar"是XStream的一个特定版本号,表示该库的一个稳定发行版。在这个版本中,XStream提供...

    xml解析及使用XStream实现javaBean与xml之间的转换

    本篇将详细讲解XML的解析方式及其在Java中的应用,特别是如何使用XStream库进行JavaBean与XML之间的互转。 1. **XML解析方式** - DOM解析:Document Object Model,它一次性加载整个XML文档到内存,形成一棵树形...

    xstream将xml文档转换成json对象

    在这个场景中,我们将探讨如何使用XStream将XML文档转换成Java对象,进而转化为JSON对象。 首先,我们需要引入XStream库。XStream的核心功能是能够将Java对象和XML之间的映射自动化,极大地简化了序列化和反序列化...

    xstream+xmlpull xml to bean &&bean to xml

    在XStream中,你可以定义一个Java类,然后通过XStream实例将其实例化后的对象转换成XML字符串。同样,也可以从XML字符串反向创建出对应的Java对象。XStream通过注解或者配置来处理复杂的对象结构,如嵌套对象、集合...

    XStream解析xml 转换成对象案例

    本篇文章将深入探讨如何使用XStream进行XML到对象的转换,并提供一个实际的案例。 首先,理解XStream的基本工作原理是至关重要的。XStream通过映射XML节点到Java类的字段来实现对象的序列化和反序列化。这意味着你...

    JavaXml及Bean互转

    在提供的`xml-demo`压缩包中,可能包含了使用这两种方法的示例代码,通过查看和运行这些示例,你可以更好地理解如何在实际项目中应用XStream和JAXB进行XML与Java Bean的互转。无论选择哪种方法,都需要注意处理Java...

    XStream解析XML实例

    要在项目中使用XStream,首先需要添加依赖。如果你的项目是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.18 ``` ...

    将对象(java bean)转换为xml字符串

    在Java开发中,有时我们需要将Java Bean对象转换成XML字符串,以便于数据交换或存储。XStream库就是这样一个工具,它提供了一种简单且高效的方式来实现这个目标。XStream不仅能够将Java对象转换为XML,还可以反向将...

    xstream对象与xml转换

    本教程将深入探讨XStream库及其在Java中的使用,通过实际的代码示例帮助你理解和掌握这一技术。 首先,我们需要理解XStream的基本概念。XStream的核心功能是能够将Java对象直接映射到XML字符串,而无需编写任何额外...

    XStream XML与Json转换

    在缺省情况下,XStream不需要配置映射关系,对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时,XStream支持指定别名。XStream支持以方法调用的方式,或是Java 标注的方式指定别名。 ...

    xStream 实现xml与 java对象的转换

    xStream库的核心概念是“映射”,它通过创建一个映射关系,将Java对象与XML元素和属性对应起来。这使得我们可以轻松地将Java对象转换为XML文档,反之亦然。这个过程对于处理复杂的对象结构尤其有用,因为xStream能够...

    Xstream的xml转换

    **Xstream的XML转换** ...通过理解其工作原理和使用注解,开发者可以有效地将Java对象和XML数据相互转换,提高开发效率。在实际项目中,合理配置和安全使用Xstream是确保数据交换准确性和系统安全性的重要环节。

    Xstream生产xml和解析xml

    例如,别名中使用下划线`_`时,转换后的XML中可能会出现`__`的情况,为了避免这类问题,建议使用连字符`-`代替。同时,对于类中的常量,如果不希望它们在XML中生成额外的节点,可以使用`@XStreamOmitField`注解来...

    xStream转换xml和json源码

    xStream是一个轻量级的Java库,用于将Java对象序列化为XML,同时也能将XML反序列化回Java对象。这个强大的工具同样支持JSON格式,使得在Java应用程序中处理XML和JSON数据变得非常便捷。本篇文章将深入探讨xStream...

    XStream XML解析

    要使用 XStream,首先需要将其添加到你的项目依赖中。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;...

    XStream解析xml demo

    通过了解和掌握XStream的使用,开发者可以轻松地在应用程序中处理XML数据,无论是存储、传输还是解析。通过上述示例,你应该对XStream的基本操作有了清晰的认识,可以在实际项目中进一步探索其高级特性和功能。

    利用XStream读写xml文件

    通过本篇内容的学习,我们了解了XStream的基本原理以及如何使用它来读写XML文件。XStream不仅简化了XML与Java对象之间的转换过程,还提高了开发效率。在实际项目中,合理利用XStream可以有效地管理复杂的数据结构。

    XStream在JavaBean与XML/JSON 之间相互转换

    要使用XStream,首先需要将其添加到项目的依赖管理中。对于Maven项目,可以在`pom.xml`文件中添加如下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.19 ``` ...

Global site tag (gtag.js) - Google Analytics