如何解组空元素为空字符串与JAXB

问题描述:

有这样的伪代码:如何解组空元素为空字符串与JAXB

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。

编辑:

母校类是什么样子(类的名称改变,但它是这样的):

@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

什么的'Alma'类是什么样子? – skaffman

+0

查看编辑的问题 –

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

} 
+0

是的,这是真的。原来,代码的其他部分使其为空。 :) –