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

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

(1)一个抽象类 Animal.java

使用XStream需注意的问题package xml_chb;
使用XStream需注意的问题

(2) Pig继承自Animal

 

使用XStream需注意的问题package xml_chb;
使用XStream需注意的问题

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

使用XStream需注意的问题package xml_chb;
使用XStream需注意的问题

(4) 将AnimalContor对象转化为xml

使用XStream需注意的问题        //实例化一个AnimalContor对象
使用XStream需注意的问题
        AnimalContor ac=new AnimalContor();
使用XStream需注意的问题        ac.setId(
"0001");
使用XStream需注意的问题        
使用XStream需注意的问题        
//生成Pig对象,并作为AnimalContor的Animal变量实例
使用XStream需注意的问题
        Pig pig=new Pig();
使用XStream需注意的问题        pig.setAge(
10);
使用XStream需注意的问题        pig.setWeight(
100);
使用XStream需注意的问题        ac.setAnimal(pig);
使用XStream需注意的问题        
使用XStream需注意的问题        
//将对象转化为xml
使用XStream需注意的问题
        XStream xstream=new XStream(new DomDriver());
使用XStream需注意的问题        xstream.alias(
"animalcontor",AnimalContor.class);
使用XStream需注意的问题        String strxml
=xstream.toXML(ac);
使用XStream需注意的问题        System.out.println(strxml);

输出:

使用XStream需注意的问题<animalcontor>
使用XStream需注意的问题  
<id>0001</id>
使用XStream需注意的问题  
<animal class="xml_chb.Pig">
使用XStream需注意的问题    
<weight>100</weight>
使用XStream需注意的问题    
<age>10</age>
使用XStream需注意的问题  
</animal>
使用XStream需注意的问题
</animalcontor>

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

(5) 将xml转化为AnimalContor对象

animal节点有class属性

使用XStream需注意的问题String str1="<animalcontor><id>0002</id><animal class='xml_chb.Pig'><weight>100</weight><age>11</age></animal></animalcontor>";
使用XStream需注意的问题        AnimalContor ac1
=(AnimalContor)xstream.fromXML(str1);
使用XStream需注意的问题        System.out.println(ac1.getId());

输出:0002

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

使用XStream需注意的问题String str2="<animalcontor><id>0003</id><animal><weight>100</weight><age>11</age></animal></animalcontor>";
使用XStream需注意的问题        AnimalContor ac2
=(AnimalContor)xstream.fromXML(str2);
使用XStream需注意的问题        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"

相关文章: