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

使用XStream需注意的问题

阅读更多

这些问题是我在实际工作中遇到的,遇到一个问题就记一个问题,因为我这人脑子不太好,过段时间就会想不起来怎么解决了。

(一) 类的继承关系,在转化为xml时,父类节点应添加class属性,指明当前是哪个子类继承了它,否则在由xml转化为Object时会出错,因为XStream并不知道该把当前节点实例化为哪种类型。

(1)一个抽象类 Animal.java

packagexml_chb;

publicabstractclassAnimal...{
privateintage;

publicintgetAge()...{
returnage;
}


publicvoidsetAge(intage)...{
this.age=age;
}

}

(2) Pig继承自Animal

packagexml_chb;

publicclassPigextendsAnimal...{
privateintweight;

publicintgetWeight()...{
returnweight;
}


publicvoidsetWeight(intweight)...{
this.weight=weight;
}

}

(3) AnimalContor类中包含Animal类型的变量

packagexml_chb;

publicclassAnimalContor...{
privateStringid;
privateAnimalanimal;
publicAnimalgetAnimal()...{
returnanimal;
}

publicvoidsetAnimal(Animalanimal)...{
this.animal=animal;
}

publicStringgetId()...{
returnid;
}

publicvoidsetId(Stringid)...{
this.id=id;
}


}

(4) 将AnimalContor对象转化为xml

//实例化一个AnimalContor对象
AnimalContorac=newAnimalContor();
ac.setId(
"0001");

//生成Pig对象,并作为AnimalContor的Animal变量实例
Pigpig=newPig();
pig.setAge(
10);
pig.setWeight(
100);
ac.setAnimal(pig);

//将对象转化为xml
XStreamxstream=newXStream(newDomDriver());
xstream.alias(
"animalcontor",AnimalContor.class);
Stringstrxml
=xstream.toXML(ac);
System.out.println(strxml);

输出:

<animalcontor>
<id>0001</id>
<animalclass="xml_chb.Pig">
<weight>100</weight>
<age>10</age>
</animal>
</animalcontor>

注意,animal节点有class属性,表明当前类由哪个子类来实现

(5) 将xml转化为AnimalContor对象

animal节点有class属性

Stringstr1="<animalcontor><id>0002</id><animalclass='xml_chb.Pig'><weight>100</weight><age>11</age></animal></animalcontor>";
AnimalContorac1
=(AnimalContor)xstream.fromXML(str1);
System.out.println(ac1.getId());

输出:0002

animal节点没有class属性,会抛出异常

Stringstr2="<animalcontor><id>0003</id><animal><weight>100</weight><age>11</age></animal></animalcontor>";
AnimalContorac2
=(AnimalContor)xstream.fromXML(str2);
System.out.println(ac2.getId());

抛出如下异常:

java.lang.InstantiationError: xml_chb.Animal
at sun.reflect.GeneratedSerializationConstructorAccessor3.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.newInstance(Sun14ReflectionProvider.java:54)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:223)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:117)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:182)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:159)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:118)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:117)
at com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:29)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:826)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:813)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:761)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:753)
at xml_chb.AnimalContor.main(AnimalContor.java:41)
Exception in thread "main"

分享到:
评论
1 楼 lancezhcj 2011-08-16  
呵呵,楼主谦虚了,不过还是很好的习惯,谢谢你的分享

相关推荐

    使用XStream操作xml教程

    XStream是以个实现序列化数据和xml之间相互转换的类库,使用非常简单、方便

    Xstream使用说明

    Xstream使用说明 各种使用案例

    XStream Java下的使用

    XStream Java Android下的使用.有读写相关的测试.

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

    一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换

    XStream使用例子

    XStream使用例子,如何序列化、反序列化到XML和JSON格式。

    使用XStream序列化/反序列化对象

    使用XStream序列化/反序列化对象

    最齐全的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 最齐全的xstream1.4.8.jar ...

    xStream使用demo

    使用xstream来读取xml文件的demo,该demo中,使用了支付宝对账单返回的xml为列子来展示使用xstream的注解的方式读取xml,并且转成实体类.学习xstream或者对xstream有疑问的可以参考下..之所以使用支付宝账单返回的xml是...

    使用xstream进行java类与xml文件互转解析--代码

    使用xstream进行java类与xml文件互转解析

    xstream最新版 - xstream-1.4.18.jar

    xstream最新版jar包

    xstream-1.4.15.jar

    XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发...

    XStream使用文档

    该文件是XStream官方使用文档,有效帮助程序员解决xml技术问题

    XStream开发使用的包

    XStream开发时使用的包,官网原句:XStream is a simple library to serialize objects to XML and back again. 要使对象转化成xml,使用: XStream xstream = new XStream(); String str = xtream.toXML(Object); ...

    xstream-1.4.11-API文档-中文版.zip

    赠送jar包:xstream-1.4.11.jar; 赠送原API文档:xstream-1.4.11-javadoc.jar; 赠送源代码:xstream-1.4.11-sources.jar; 赠送Maven依赖信息文件:xstream-1.4.11.pom; 包含翻译后的API文档:xstream-1.4.11-...

    xStream xml to bean

    xStream xml to bean,使用xStream 互转 xml 、bean. 的一个工具类。

    XStream所需jar包

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得...Xstream也可以将JavaBean序列化成Json或反序列化,使用非常方便。

    xstream-1.4.19.jar

    xstream-1.4.19.jar

    xstream使用案例

    xstream xml java对象转换,直接导入使用即可看到效果

    XStream XML与Json转换

    XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...

    使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar

    使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar,使用XStream解析MXL文件更快捷方便

Global site tag (gtag.js) - Google Analytics