Als interessante beiseite, Sie müssen nicht tatsächlich XMLGregorianCalendar dem aktuellen Stand anzupassen, da JAXB java.util.Date nativ unterstützt - wie folgt aus:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Example {
@XmlSchemaType(name = "date")
public Date publishingDate;
}
Wenn Sie es benötigen, können @XmlJavaTypeAdapter arbeiten wie diese, vorausgesetzt, Ihre eigene Klasse:
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;
}
Sie müssen eine Klasse, die JAXB verstehen, und dann einen Adapter zwischen dieser Klasse und der benutzerdefinierten Klasse schreiben, wie folgt aus:
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);
}
}
Jetzt können Sie das in Ihren eigenen Klassen verwenden, wie folgt aus:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Example2 {
@XmlSchemaType(name = "date")
@XmlJavaTypeAdapter(type=XMLGregorianCalendar.class,value =SillyDateAdapter.class)
public SillyDate publishingDate;
}
Es gibt viele gute Beispiele für die @XmlJavaTypeAdapter auf dem Netz verwendet wird, wie this one und this one, und einige andere. Glückliche Anpassung!
Verwenden Sie Code, der aus einem Schema oder handgeschriebenen JAXB-Bindungen generiert wird? – skaffman
Vielen Dank für Ihre Antwort, Skaffman. Ich habe es handgeschrieben gemacht, und das Schema wird aus JavaBeans ohne Annotationen für die Ant-Aufgabe erstellt. – Take