2

有这样的伪代码:

Alma alma = new Alma();
alma.setKorte(""); //Korte is a string member
marshaller.marshal(alma, stringwriter);
System.out.println(stringwriter.toString());

它产生的输出(我知道这是空元素存在的某种技巧,但这就是它在我的系统中的工作方式,所以在我之前有人这样设置):

<alma><korte/></alma>

这对我来说很好。但是当我解组它时,空字符串没有正确解组,但 korte 将为空。如何让 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;
4

1 回答 1

1

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

阿尔玛

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

}
于 2011-06-21T13:22:06.520 回答