有一个像这样的伪代码:
Alma alma = new Alma();
alma.setKorte(""); //Korte is a string member
marshaller.marshal(alma, stringwriter);
System.out.println(stringwriter.toString());
它产生的输出(我知道这是空元素存在的某种技巧,但这就是它在我的系统中的工作原理,所以有人在我之前设置了这个):
<alma><korte/></alma>
哪个对我好。但是当我解组时,空字符串没有被正确解组,但是korte将为null。如何让jaxb将空元素解组成空字符串?
我使用JDK6捆绑的jaxb。
编辑:
alma类看起来像(类的名称已更改,但它是这样的):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Alma", propOrder = {
"korte"
})
public class Alma
implements Serializable
{
private final static long serialVersionUID = 100L;
@XmlElement(required = true)
protected String korte;
答案 0 :(得分:1)
JAXB实现应该将空元素解组为String属性的“”。解决方案是升级到包含此修复程序的JAXB实现的更新版本。
以下示例使用JDK 1.6.0_20和EcliseLink JAXB (MOXy) 2.3中包含的JAXB版本为我工作。
<强>演示强>
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Alma.class);
String xmlString = "<alma><korte/></alma>";
StringReader xmlReader = new StringReader(xmlString);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Alma alma = (Alma) unmarshaller.unmarshal(xmlReader);
System.out.println(alma.getKorte().length());
}
}
<强>输出强>
0
<强>阿尔玛强>
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlType(name = "Alma", propOrder = { "korte" })
public class Alma implements Serializable {
private final static long serialVersionUID = 100L;
@XmlElement(required = true)
protected String korte;
public String getKorte() {
return korte;
}
public void setKorte(String korte) {
this.korte = korte;
}
}