我无法使用 JAXB 编组/解组泛型类型。一切正常,但是当我的通用字段是日期(java.util.Date)时,解组将产生 XMLGregorianCalendar
这是我正在谈论的一段代码:
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)
你能帮我解决一下吗?我正在考虑一些只有当字段是日期时才会“活动”的适配器,但我认为这是不可能的
谢谢