bigdata-mx / factura-electronica

Librería de componentes Java para el desarrollo de aplicaciones de Factura Electrónica (CFDI)
Apache License 2.0
94 stars 107 forks source link

¿Como se agrega información de pedimento? #157

Closed azaeldevel closed 7 years ago

azaeldevel commented 7 years ago

Aprovecho para felicitarlos por este proyecto es muy bueno me esta ayudando mucho ami, ya le he usado en varios componte con excelentes resulto.

Mi duda es respecto al proceso correcto para agregar un pedimiento no entiendo como funcian agrege el siguiente codigo

. . . TInformacionAduanera ia = new TInformacionAduanera(); ia.setNumero("OFIDUDKGKDHJ"); ia.setAduana("123654"); GregorianCalendar gc = new GregorianCalendar(); gc.setTime(new Date()); DatatypeFactory dtf = null; try { dtf = DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException ex) { Logger.getLogger(InvoiceTest.class.getName()).log(Level.SEVERE, null, ex); } XMLGregorianCalendar fechaPed = dtf.newXMLGregorianCalendar(gc); ia.setFecha(fechaPed); c1.getInformacionAduanera().add(ia); . . .

me da el soguiente error:

org.xml.sax.SAXParseException at javax.xml.bind.util.JAXBSource$1.parse(JAXBSource.java:246) at javax.xml.bind.util.JAXBSource$1.parse(JAXBSource.java:231) ...... Caused by: javax.xml.bind.MarshalException

Alguien me puede dar una pista del error?

Saludos y gracias de antemano.

hortegag91 commented 7 years ago

Hola @reyesazael12, Gracias, la idea es entre todos poder utilizar de manera eficiente esta librería. CREO saber como solucionarlo, el problema es que al validarlo te dice que el valor generado por el código ( '2017-04-03T10:27:46.796-07:00') no es válido, según tengo entendido porque le estas agregando la zona horario y ciertos valores que NO deben ir en estos CFDi. Te comparto una pequeña parte del código que yo en lo personal manejo para generar las fechas en XMLGregorianCalendar, obviamente no es el código completo, tu deberas adaptarlo a tu proceso, pero creo que el concepto quedará claro. DatatypeFactory.newInstance().newXMLGregorianCalendar(*AÑO*, *MES*, *DÍA*, *HORA*, *MINUTOS*, *SEGUNDOS*, DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED) Básicamente estamos declarando como DatatypeConstants.FIELD_UNDEFINED los parámetros que no queremos definir que lo serían milisegundos y zona horaria. Si esto te ayudo te encargo me notifiques para cerrar este issue. Saludos.

azaeldevel commented 7 years ago

Si asi es queda de esta forma:

TInformacionAduanera ia = new TInformacionAduanera();
ia.setNumero("OFIDUDKGKDHJ");
ia.setAduana("123654");
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(new Date());
DatatypeFactory dtf = null;
try 
{
    dtf = DatatypeFactory.newInstance();
} 
catch (DatatypeConfigurationException ex) 
{
    Logger.getLogger(InvoiceTest.class.getName()).log(Level.SEVERE, null, ex);
}   
XMLGregorianCalendar fechaPed = dtf.newXMLGregorianCalendar(gc);
fechaPed.setHour(DatatypeConstants.FIELD_UNDEFINED);
fechaPed.setMinute(DatatypeConstants.FIELD_UNDEFINED); fechaPed.setSecond(DatatypeConstants.FIELD_UNDEFINED);
fechaPed.setMillisecond(DatatypeConstants.FIELD_UNDEFINED);
fechaPed.setTimezone(DatatypeConstants.FIELD_UNDEFINED);
ia.setFecha(fechaPed);
c1.getInformacionAduanera().add(ia);
azaeldevel commented 7 years ago

Gracias