2012-06-25 10 views
8

Ho bisogno di compilare un bean JAX da XML, tuttavia non esiste un metodo setter. Ottengo il seguente messaggio di seguitoCome compilare XMLGregorianCalendar()

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

ho scritto i seguenti metodi per prendere una data e trasformarlo a XMLGregorianCalendar, e quindi chiamare un setter nella mia classe wrapper. Tuttavia ho ancora l'eccezione. C'è un modo standard di gestire questo tipo di dati che sto trascurando? Forse la mia classe wrapper non la chiama, ma Netbeans non mi permetterà di collegare un debugger ad esso per qualche motivo.

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); 
    } 
} 

Il setter nel Bean è inferiore

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

stai cercando di popolarlo da XML, come ha detto la questione, o stai cercando di popolarlo da un oggetto Date come i tuoi programmi di codice di esempio? –

risposta

8

Il codice di esempio mostra che si cerca di popolarlo con un oggetto Date, mentre la domanda stessa dice che si sta tentando di popolare da XML. Quindi a meno che non fraintendere, per popolare da XML basta usare:

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

Io suggerirei di usare Joda Time - La Data Api Java frustra un sacco di sviluppatori. Se si desidera mantenere le librerie di base, provare a utilizzare 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; 
}