首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何填充XMLGregorianCalendar()

如何填充XMLGregorianCalendar()
EN

Stack Overflow用户
提问于 2012-06-25 22:41:15
回答 2查看 31K关注 0票数 8

我需要从XML填充一个JAX Bean,但是没有setter方法。我收到下面的消息

代码语言:javascript
复制
 Failed to invoke public javax.xml.datatype.XMLGregorianCalendar() with no args

我编写了以下方法来获取日期并将其转换为XMLGregorianCalendar,然后在包装器类中调用setter。然而,我仍然得到了异常。有没有标准的方法来处理我忽略的这种数据类型?也许我的包装类没有调用它,但由于某种原因,Netbeans不允许我将调试器附加到它。

代码语言:javascript
复制
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如下所示

代码语言:javascript
复制
public void setDeliveryDate(XMLGregorianCalendar value) {
    this.deliveryDate = value;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-26 00:27:48

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

代码语言:javascript
复制
XmlGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(yourXmlDateTimeString);
票数 12
EN

Stack Overflow用户

发布于 2012-06-25 22:45:45

我建议使用Joda Time -- Java Date Api让很多开发人员感到沮丧。如果您想继续使用核心库,可以尝试使用DataTypeFactory。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11191484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档