2016-06-07 95 views
0

我對jaxb解組有點問題。對於映射到日期類型的元素,JAXB返回null

我有這一塊的xml:

<item> 
    <title>My title</title> 
    <link>https://some-link/</link> 
    <comments>Hello world</comments> 
    <pubDate>Thu, 13 Jan 2016 09:45:06 +0000</pubDate> 
</item> 

的一個項目是在Java代碼中表示爲項目類:

@XmlType 
public class Item{ 

    private String title; 

    //link and comments I'm temporary skipping 

    @XmlElement(name = "pubDate") 
    private Date publicDate; 

    //getters and setters 
} 

所以,當我試圖來解讀這個XML,我已經有publicDate等於null。 我做錯了什麼?請指教。

回答

0

你需要讓JAXB知道你是對私人領域的直接註解:

@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Item{ 

    private String title; 

    //link and comments I'm temporary skipping 

    @XmlElement(name = "pubDate") 
    private Date publicDate; 

    //getters and setters 
} 

或者,您也可以完全離開了@XmlAccessorType註釋和註釋getter方法publicDate代替。 @XmlAccessorType的默認行爲是綁定每個公共字段和/或公共getter/setter。

+0

即使我註釋類@ XmlAccessorType或在publicDate getter上添加註釋,它仍然返回空值 – Volodymyr

0

如果日期格式與xsd類型匹配datetime:yyyy-MM-ddTHH:mm:ss,那麼JAXB將只允許您自動解除java.util.Date實例的綁定;但在你的示例XML格式是不同的,在這種情況下,你需要實現自己的幫手實施XmlAdapter<String,Date>,如下所示:

public class MyDateFormatAdapter extends XmlAdapter<String, Date> { 

    private static final String FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z"; 

    public Date unmarshal(String v) throws Exception { 
     DateFormat dateFormat = new SimpleDateFormat(FORMAT); 
     return dateFormat.parse(v); 
    } 

} 

演示在這裏:http://ideone.com/0dngV3

+0

我已經檢查過。這段代碼也returs pubDate等於null – Volodymyr

+0

如果我把日期時間設置爲xy,如yyyy-MM-ddTHH:mm:ss格式,那麼一切正常...... – Volodymyr

+0

我發佈的代碼不會返回null,事實上鍊接在底部回答,證明它工作正常。更好地檢查你的代碼。 –