作爲一個有趣的不談,你實際上並不需要適應的XMLGregorianCalendar到日期,因爲JAXB支持java.util.Date本身 - 是這樣的:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Example {
@XmlSchemaType(name = "date")
public Date publishingDate;
}
如果你需要它,@XmlJavaTypeAdapter能這樣的工作,假設您的自定義類:
public class SillyDate {
public SillyDate(int year, int month, int day) {
super();
this.year = year;
this.month = month;
this.day = day;
}
public String toString() {
return "SillyDate [year=" + year + ", month=" + month + ", day=" + day + "]";
}
public int year;
public int month;
public int day;
}
你需要一個類JAXB能理解,然後寫一個類和自定義類之間的適配器,就像這樣:
public class SillyDateAdapter extends XmlAdapter<XMLGregorianCalendar, SillyDate> {
public SillyDate unmarshal(XMLGregorianCalendar val) throws Exception {
return new SillyDate(val.getYear(), val.getMonth(), val.getDay());
}
public XMLGregorianCalendar marshal(SillyDate val) throws Exception {
return DatatypeFactory.newInstance().newXMLGregorianCalendarDate(val.year, val.month, val.day, 0);
}
}
現在你可以使用在自己的類,像這樣:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Example2 {
@XmlSchemaType(name = "date")
@XmlJavaTypeAdapter(type=XMLGregorianCalendar.class,value =SillyDateAdapter.class)
public SillyDate publishingDate;
}
有大量的使用在網絡上提供的@XmlJavaTypeAdapter,像this one和this one,和其他幾個人的好例子。快樂適應!
您是使用從模式或手寫JAXB綁定中生成的代碼嗎? – skaffman 2011-01-12 10:27:02
謝謝你的回覆,skaffman。我將它製作成手寫的,並且架構是從JavaBean創建的,沒有使用Ant任務的註釋。 – Take 2011-01-13 00:06:11