如何使用JAXB将空元素解组为空字符串

如何使用JAXB将空元素解组为空字符串,jaxb,marshalling,element,unmarshalling,Jaxb,Marshalling,Element,Unmarshalling,有这样一个伪代码: Alma alma = new Alma(); alma.setKorte(""); //Korte is a string member marshaller.marshal(alma, stringwriter); System.out.println(stringwriter.toString()); <alma><korte/></alma> @XmlAccessorType(XmlAccessType.FIELD) @XmlT

有这样一个伪代码:

Alma alma = new Alma();
alma.setKorte(""); //Korte is a string member
marshaller.marshal(alma, stringwriter);
System.out.println(stringwriter.toString());
<alma><korte/></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;
它产生的输出是(我知道这是一种技巧,其中有空元素,但这就是它在我的系统中的工作方式,所以在我之前有人这样设置):


JAXB实现应该将空元素解组为字符串属性的“”。解决方案是升级到包含此修复程序的JAXB实现的更新版本

下面的示例使用JDK1.6.0_20中包含的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());
    }

}
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;
    }

}

阿尔玛课程是什么样子的?是的,是真的。结果是代码的其他部分使其为空。:)
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;
    }

}