8

我需要从 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;
}
4

2 回答 2

12

您的示例代码显示您尝试使用 Date 对象填充它,而问题本身表明您正在尝试从 XML 填充。因此,除非我误解,否则从 XML 填充只需使用:

XmlGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(yourXmlDateTimeString);
于 2012-06-25T16:27:48.237 回答
1

我建议使用 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;
}
于 2012-06-25T14:45:44.570 回答