2012-06-25 30 views
8

Necesito llenar un JAX Bean desde XML, sin embargo, no hay un método setter. Me sale el siguiente mensaje abajoCómo rellenar XMLGregorianCalendar()

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

escribí los siguientes métodos para tomar una fecha y transformarlo a XMLGregorianCalendar, y luego llamar a un colocador en mi clase de contenedor. Sin embargo, todavía tengo la excepción. ¿Hay una forma estándar de manejar este tipo de datos que estoy pasando por alto? Tal vez mi clase contenedora no lo está llamando, pero Netbeans no me permitirá adjuntar un depurador por alguna razón.

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

El colocador en el grano está por debajo

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

¿Estás tratando de poblarlo de XML como la cuestión, dijo, o está tratando de poblarlo de un objeto Date como su muestra muestra en el código? –

Respuesta

8

Su código de ejemplo muestra que tratar de llenarla con un objeto Date, mientras que la pregunta misma dice que está tratando de llenar desde XML. Así que a menos que entienda mal, para poblar desde XML sólo tiene que utilizar:

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

se recomienda usar Joda Time - The Java Api Fecha frustra a muchos de los desarrolladores. Si quiere quedarse con las bibliotecas principales, intente usar un 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; 
}