2012-06-25 43 views
8

我需要從XML填充JAX Bean,但是沒有setter方法。我得到以下如何填充XMLGregorianCalendar()

Failed to invoke public javax.xml.datatype.XMLGregorianCalendar() with no args 

以下消息我寫了下面的方法來拍攝日期和把它轉換爲的XMLGregorianCalendar,然後調用我的包裝類二傳手。但我仍然得到例外。有沒有處理這種數據類型的標準方式,我忽略了?也許我的包裝類沒有調用它,但由於某種原因,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中二傳手低於

public void setDeliveryDate(XMLGregorianCalendar value) { 
    this.deliveryDate = value; 
} 
+0

是你想作爲提問時表示,從XML填充它,或者你想從一個Date對象作爲示例代碼顯示填充它? –

回答

8

您的示例代碼顯示您嘗試使用Date對象填充它,而問題本身說明您嘗試從XML填充。所以,除非我誤解,從XML填充只使用:

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

我會建議使用約達時間 - Java的日期阿比挫敗了大量的開發者。如果您想堅持使用核心庫,請嘗試使用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; 
}