我有麻煩/使用JAXB的泛型類型unmarshall。 一切工作正常,但是當我的通用字段是日期(java.util.Date),解組將產生的XMLGregorianCalendar代替JAXB - 馬歇爾泛型(日期)
這裏的一段代碼我說的是:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Entity<T> {
private T field;
public Entity() {
}
public T getField() {
return field;
}
public void setField(T field) {
this.field = field;
}
}
import java.io.*;
import java.util.Date;
import javax.xml.bind.*;
public class JaxbTest {
public JaxbTest() {
Entity<Date> ent = new Entity<Date>();
ent.setField(new Date());
StringWriter sw = new StringWriter();
try {
// marshall
JAXBContext jaxbContext = JAXBContext.newInstance(Entity.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(ent, sw);
// unmarshall
JAXBContext jc = JAXBContext.newInstance(Entity.class);
Unmarshaller u = jc.createUnmarshaller();
Entity<Date> ent2 = (Entity<Date>) u.unmarshal(new StringReader(sw
.toString()));// exception is thrown here
System.out.println(ent2.getField());
} catch (JAXBException e11) {
e11.printStackTrace();
}
}
public static void main(String[] args) {
new JaxbTest();
}
}
上面的代碼拋出異常:
java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl cannot be cast to java.util.Date
at JaxbTest.<init>(JaxbTest.java:31)
at JaxbTest.main(JaxbTest.java:38)
你能幫助我如何解決?我曾想過一些適配器,這將是「積極的」,只在字段是日期,但我不認爲這是可能
感謝
我猜你犯了一個錯誤,而錯誤與'ent2.getField()'是否一致? –