我有关于将XML转换为Java对象的问题,在这里我使用JAXB。
在我的情况:如何自定义JAXBContext Unmarshaller复杂的情况下
XML数据:XML数据的
<persons>
<person>
<name>Aris Tonar</name>
<age />
<nickname />
<saldo />
</person>
</persons>
JAVA CLASS:
public class Person{
private String name;
private Integer age;
private String nickName;
private Integer id;
private Double saldo;
/**
*Setter and Getter
*/
}
,当我使用标准的JAXBContext Unmarshaller的代码,它解析为Java对象。与代码:
JAXBContext context = JAXBContext.newInstance(Person.class.getPackage().getName());
Unmarshaller unmarshaller = context.createUnmarshaller();
JAXBElement element = (JAXBElement) unmarshaller.unmarshal(new StreamSource(new StringReader(stringOfXmlData.toString())));
Person obj = (Person) element.getValue();
它会给结果: 人名= “阿里斯Tonar”
人年龄= NULL
人昵称= “”
人物ID = NULL
人saldo = NULL
但不是那个结果我想要的,我想JAXB会给出结果:
Person name =“Aris Tonar”
人年龄= 0
人昵称= “”
人物ID = NULL
人saldo = 0
- 我想这在XML数据中声明的每一个元素会:它是否值指定JAXB会解释它是正常的(如名称元素),但如果它的值没有指定jaxb会将其解释为默认值(如年龄,昵称,saldo元素)
- 如果元素未在XML数据中声明,则jaxb会将其解释为null。 (如id元素)
是否有可能我做了吗?可能会自定义JAXBContext代码?
+1 - 你说得对。 – 2012-08-16 11:44:18
非常感谢Err,你的解释是我的解决方案,, – 2012-08-18 09:09:29
hallo Err,我有其他问题.. 我的Java类,它也是该类中的xml注释是来自xsd文件的JAXB Binding的结果,在我的情况下JAXB Binding define '@XmlAttribute'属性,所以我如何为该属性分配defaultValue。 谢谢 – 2012-08-19 07:33:53