有一个伪代码,如下所示:
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;
发布于 2011-06-21 21:22:07
JAXB实现应该将空元素解组为字符串属性的"“。解决方案是升级到包含此修补程序的较新版本的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
Alma
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;
}
}
https://stackoverflow.com/questions/6421352
复制相似问题