我需要从XML填充JAX Bean,但是没有setter方法。我在下面得到以下消息
Failed to invoke public javax.xml.datatype.XMLGregorianCalendar() with no args
我编写了以下方法来获取日期并将其转换为XMLGregorianCalendar,然后在我的包装器类中调用setter。但是我仍然得到例外。是否有一种标准的方法来处理我忽略的数据类型?也许我的包装类没有调用它,但Netbeans不允许我出于某种原因附加调试器。
public XMLGregorianCalendar asXMLGregorianCalendar(java.util.Date date) throws DatatypeConfigurationException {
DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
if (date == null) {
return null;
} else {
GregorianCalendar gc = new GregorianCalendar();
gc.setTimeInMillis(date.getTime());
return datatypeFactory.newXMLGregorianCalendar(gc);
}
}
Bean中的setter位于
之下public void setDeliveryDate(XMLGregorianCalendar value) {
this.deliveryDate = value;
}
答案 0 :(得分:9)
您的示例代码显示您尝试使用Date对象填充它,而问题本身表示您正在尝试从XML填充。因此,除非我误解,否则从XML填充只需使用:
XmlGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(yourXmlDateTimeString);
答案 1 :(得分:0)
我建议使用Joda Time - Java Date Api让很多开发人员感到沮丧。如果您想坚持使用核心库,请尝试使用DataTypeFactory。
public static XMLGregorianCalendar asXMLGregorianCalendar(Date date) {
java.util.GregorianCalendar calDate = new java.util.GregorianCalendar();
calDate.setTime(date);
javax.xml.datatype.XMLGregorianCalendar calendar = null;
try {
javax.xml.datatype.DatatypeFactory factory = javax.xml.datatype.DatatypeFactory.newInstance();
calendar = factory.newXMLGregorianCalendar(
calDate.get(java.util.GregorianCalendar.YEAR),
calDate.get(java.util.GregorianCalendar.MONTH) + 1,
calDate.get(java.util.GregorianCalendar.DAY_OF_MONTH),
calDate.get(java.util.GregorianCalendar.HOUR_OF_DAY),
calDate.get(java.util.GregorianCalendar.MINUTE),
calDate.get(java.util.GregorianCalendar.SECOND),
calDate.get(java.util.GregorianCalendar.MILLISECOND), 0);
} catch (DatatypeConfigurationException dce) {
//handle or throw
}
return calendar;
}