2011-06-21 43 views
2

有這樣的僞代碼:如何解組空元素爲空字符串與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

查看編輯的問題 –

回答

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

} 
+0

是的,這是真的。原來,代碼的其他部分使其爲空。 :) –