2016-06-07 97 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,事实上链接在底部回答,证明它工作正常。更好地检查你的代码。 –