【问题标题】:How To Populate XMLGregorianCalendar()如何填充 XMLGregorianCalendar()
【发布时间】:2012-06-26 20:02:56
【问题描述】:

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

【问题讨论】:

  • 您是按照问题所述尝试从 XML 填充它,还是按照示例代码所示从 Date 对象填充它?

标签: java binding jaxb


【解决方案1】:

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

XmlGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(yourXmlDateTimeString);

【讨论】:

    【解决方案2】:

    我建议使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-30
      • 2012-02-15
      • 2013-04-16
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多