2012-01-17 51 views
1

我開始瞭解球衣如何與JAXB一起工作。但今天我面對我想要的馬歇爾地圖(日期,列表)條目的具體情況:澤西馬歇爾地圖<Date,List>

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class MyClass{ 
    @XmlJavaTypeAdapter(MapAdapter.class) 
    private Map<Date,List<MyObject>> = new TreeMap<Date,List<MyObject>>(new DateCompareDesc()); 
} 

這裏的目標是馬歇爾地圖其條目和其相應的MyObject的列表中選擇一個日期。該地圖按降序排列。

爲此我實現了一個適配器映射(MapAdapter,遵循@Blaise Doughan的教程,http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html)。問題出在Date鍵上。我有一個錯誤:無法marshall java.util.Date。所以我想這個新的日期適配器:

public class DateAdapter extends XmlAdapter<String, Date> { 

@Override 
public Date unmarshal(String v) throws Exception { 
    //not implemented 
} 

@Override 
public String marshal(Date v) throws Exception { 
    return v.toString(); 
} 

} 

我在哪裏可以添加@XmlJavaTypeAdapter(DateAdapter.class),這樣可以澤西日期marhsall關鍵我TreeMap的?

謝謝。

回答

1

JAXB支持java.util.Date到標準XML模式類型的編組/解組:date,time,dateTime。您可以控制使用@XmlSchemaType註釋的類型。

如果你的約會信息不表示爲標準的XML模式類型中的一種,您可以使用XmlAdapter類似我用下面的回答類似的問題之一:

如果您需要使用XmlAdapter方法時,@XmlJavaTypeAdapter註釋將放置在表示Map中的條目的適應對象的Date字段上。以下是根據我的博客顯示的內容:http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html

import javax.xml.bind.annotation.XmlValue; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 

public class MyMapEntryType { 

    @XmlAttribute 
    @XmlJavaTypeAdapter(DateAdapter.class) 
    public Date key; 

    public List<MyObject> value; 

} 
+0

嗨Blaise,謝謝你的迴應。在我的情況下,我有一個地圖。日期和列表不是來自另一個課程,我可以添加適當的註釋。那麼是不是可以註釋該映射來修改日期和列表? – Lahniep 2012-01-17 13:19:13

+0

@Lahniep - 您正在使用Map的默認表示形式?你的日期信息又是如何格式化的? – 2012-01-17 13:34:29

+0

是..它是一個TreeMap,日期是用SimpleDateFormat格式化的(「yyyy-MM-dd HH:mm:ss」) – Lahniep 2012-01-17 13:42:32