dpineda / factura-electronica

Automatically exported from code.google.com/p/factura-electronica
Apache License 2.0
0 stars 0 forks source link

Como incluir addendas #32

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Hola, lo que no puedo hacer es incluir una addenda, estoy tratando de hacerlo 
de la siguiente forma:

ObjectFactory of = new ObjectFactory();
Comprobante comp = of.createComprobante();
...
String addenda = "<Disney><Transaction PurchaseOrder=4600364283/></Disney>";
//esta info la tomo de la BD, solo la muestro como ejemplo 
Addenda adde = of.createComprobanteAddenda();
adde.getAny().add(addenda);
comp.setAddenda(adde);

pero me manda el siguiente error:
[com.sun.istack.SAXException2: unable to marshal type "java.lang.String" as an 
element because it is missing an @XmlRootElement annotation]

obviamente algo estoy haciendo mal, si me pudieran asesorar se los agradeceria 
mucho

Original issue reported on code.google.com by cristima...@gmail.com on 2 Feb 2011 at 4:47

GoogleCodeExporter commented 9 years ago
Porfavor ayuda!!!

Original comment by cristima...@gmail.com on 3 Feb 2011 at 10:01

GoogleCodeExporter commented 9 years ago
Hola disculpa la demora en contestar, estaba fuera. 
Dejame revisar el sistema y mañana tienes una respuesta.

Saludos

Original comment by bigdata.mx on 4 Feb 2011 at 3:10

GoogleCodeExporter commented 9 years ago
Ok, espero tu respuesta y te comento que tambien la parte del schemaLocation me 
lo genera con http://www.sat.gob.mx/cfd y creo que deberia ser 
http://www.sat.gob.mx/cfd/2 , habria algunoa forma de cambiarlo? 
mil gracias!

Original comment by cristima...@gmail.com on 4 Feb 2011 at 10:41

GoogleCodeExporter commented 9 years ago

Original comment by bigdata.mx on 4 Feb 2011 at 11:10

GoogleCodeExporter commented 9 years ago

Original comment by bigdata.mx on 4 Feb 2011 at 11:13

GoogleCodeExporter commented 9 years ago
Hola ya están listos los cambios, puedes bajar la nueva versión 
http://code.google.com/p/factura-electronica/downloads/detail?name=cfdi-base-0.1
.6-SNAPSHOT-bin.zip y ver el ejemplo en la clase  
mx.bigdata.sat.cfdi.examples.Main y 
mx.bigdata.sat.cfdi.examples.ExampleCFDFactory

En resumen, para poder agregar las Addendas es necesario crear unas Clases, 
puedes incluso ser inner classes que describan la addenda que quieres agregar, 
en tu caso sería

  private static Addenda createAddenda(ObjectFactory of) {
    Addenda addenda = of.createComprobanteAddenda();
    Disney c = new Disney();
    c.transaction = new Transaction();
    c.transaction.purchaseOrder = "4600364283";
    addenda.getAny().add(c);
    return addenda;
  }

  @XmlRootElement(name="Disney")
  private final static class Disney {
    @XmlElement(name="Transaction")
    Transaction transaction;
  }

  @XmlRootElement
  private final static class Transaction {
    @XmlAttribute(name="PurchaseOrder")
    String purchaseOrder;
  }  

Es muy importante que agregues el nombre del package donde creaste estas clases 
en la línea donde creas el CFDv3,

    CFDv3 cfd = new CFDv3(ExampleCFDFactory.createComprobante(), 
                          "mx.bigdata.sat.cfdi.examples");

Y finalmente que tu programa pueda encontrar un archivo llamado jaxb.index en 
donde están las clases de ese package y que el archivo contenga el nombre de 
tus clases que quieres agregar a las Addendas una por renglón.

ExampleCFDFactory$Company

La verdad está un poco enredado pero así es como funciona JAXB, sigo aquí 
para cualquier duda que tengas.

Original comment by bigdata.mx on 4 Feb 2011 at 11:28

GoogleCodeExporter commented 9 years ago
Lo del schemaLocation también está corregido en esta versión.

Original comment by bigdata.mx on 4 Feb 2011 at 11:30

GoogleCodeExporter commented 9 years ago

Original comment by bigdata.mx on 4 Feb 2011 at 11:35

GoogleCodeExporter commented 9 years ago
Uff excelente, mil gracias de verdad, ya baje la nueva version!
una pregunta mas ;) para el CFDv2 tambien estaria funcionando?, porque estoy 
ocupando las dos versiones 
gracias gracias de verdad! :)

Original comment by cristima...@gmail.com on 4 Feb 2011 at 11:48

GoogleCodeExporter commented 9 years ago
Mañana te subo los cambios para CFDv2

Saludos

Original comment by bigdata.mx on 5 Feb 2011 at 2:19

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Listo los cambios para CFDv2. 

Saludos

Original comment by bigdata.mx on 8 Feb 2011 at 4:21

GoogleCodeExporter commented 9 years ago
MUCHAS GRACIAS!!!

Original comment by cristima...@gmail.com on 8 Feb 2011 at 4:19

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Hola de nuevo, estuve tratando de generar la addenda y no he podido, para el 
cfdv3, mira si pongo en mi clase tu sig codigo, todo sale OK:
     CFDv3 cfda = new CFDv3(ExampleCFDFactory.createComprobante(), "mx.bigdata.sat.cfdi.examples");
     mx.bigdata.sat.cfdi.schema.Comprobante selladoa = cfda.sellarComprobante(key, cert);
     System.err.println(selladoa.getSello());
     cfda.validar();
     cfda.verificar();
     cfda.guardar(System.out);

pero si pongo mi codigo asi:
     CFDv3 cfde = new CFDv3(comprobanteFEI.createComprobante(), "facturae");
     mx.bigdata.sat.cfdi.schema.Comprobante selladoe = cfde.sellarComprobante(key, cert);
     System.err.println(selladoe.getSello());
     cfde.validar();
     cfde.verificar();
     cfde.guardar(System.out);

y dentro de facturae.comprobanteFEI tengo la addenda como tu ejemplo asi:

public final class comprobanteFEI {

  public static Comprobante createComprobante() throws Exception {
    ObjectFactory of = new ObjectFactory();
    Comprobante comp = of.createComprobante();
    comp.setVersion("3.0");
    ...
    ...
    comp.setAddenda(createAddenda(of));
    return comp;  
  }

  private static Addenda createAddenda(ObjectFactory of) {
    Addenda addenda = of.createComprobanteAddenda();
    Company c = new Company();
    c.transaction = new Transaction();
    c.transaction.purchaseOrder = "4600364283";
    addenda.getAny().add(c);
    return addenda;
  }

  @XmlRootElement(name="Company")
  private final static class Company {
    @XmlElement(name="Transaction")
    Transaction transaction;
  }

  @XmlRootElement
  private final static class Transaction {
    @XmlAttribute(name="PurchaseOrder")
    String purchaseOrder;
  }

}

compila todo ok, pero al generar el cfdi me marca el sig error:

javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: unable to marshal type 
"facturae.comprobanteFEI$Company" as an element because it is missing an 
@XmlRootElement annotation]

Ya no se por donde verle, por eso te pido tu tan amable ayuda, ya estoy un 
poquito desesperada :( , no se si las librerias que estoy ocupando estan mal o 
si estoy compilando como no debe ser (utilizo JBuilder), en fin podrias 
asesorarme de nuevo porfavor?

gracias,
Cristina

Original comment by cristima...@gmail.com on 10 Feb 2011 at 3:43

GoogleCodeExporter commented 9 years ago
Ok creo que el problema es que no tienes el archivo jaxb.index en el mismo 
package que tu clase comprobanteFEI es decir en el directorio facturae.

El contenido del archivo debe ser el siguiente:
comprobanteFEI$Company

Asegurate de que el archivo también esté en el directorio donde están 
compiladas las clases con extensión .class

Cualquier duda avisame.

Saludos

Original comment by bigdata.mx on 12 Feb 2011 at 7:26

GoogleCodeExporter commented 9 years ago
Gracias, si tengo el archivo jaxb.index en el lugar que me dices, de hecho si 
se lo quito me marca un error diferente, que otra cosa crees que pueda ser?

Original comment by cristima...@gmail.com on 12 Feb 2011 at 9:28

GoogleCodeExporter commented 9 years ago
Prueba cambiar el nombre de la clase en el archivo jaxb.index por algo que no 
exista como:

comprobanteFEI$Campany

Y me avisas que sale porfa.

Original comment by bigdata.mx on 12 Feb 2011 at 9:38

GoogleCodeExporter commented 9 years ago
ok, mira me sale esto:
javax.xml.bind.JAXBException: error loading class "comprobanteFEI$Companya" 
listed in facturae/jaxb.index, make sure that entries are accessable on 
CLASSPATH and of the form "ClassName" or "OuterClass.InnerClass", not 
"ClassName.class" or "fully.qualified.ClassName"
 - with linked exception:
[java.lang.ClassNotFoundException: facturae.comprobanteFEI$Companya]

Original comment by cristima...@gmail.com on 13 Feb 2011 at 12:02

GoogleCodeExporter commented 9 years ago
Ok, entonces regrésalo a como estaba y si puedes mándame la clase completa 
como attachment y te ayudo a compilarla.

Saludos

Original comment by bigdata.mx on 13 Feb 2011 at 2:59

GoogleCodeExporter commented 9 years ago
Hola, te mando la clase, es realmente la misma que tu ocupas de ejemplo pero
me imagino que la compilas de otra forma, y bueno si ya te funciona a ti, a
ver si me puedes explicar como deberia compilarla, porque actualmente lo
hago desde el jbuilder

la llamada a esta clase la hago desde un servlet utilizando igual lo mismo
que tu ejemplo:

     CFDv3 cfde = new CFDv3(comprobanteFEI.createComprobante(), "facturae");
     mx.bigdata.sat.cfdi.schema.Comprobante selladoe =
cfde.sellarComprobante(key, cert);
     System.err.println(selladoe.getSello());
     cfde.validar();
     cfde.verificar();
     cfde.guardar(System.out);

muchas gracias de nuevo :) ,
Cristina

Original comment by cristima...@gmail.com on 13 Feb 2011 at 3:34

GoogleCodeExporter commented 9 years ago
No me llegó el attachment, lo puedes poner desde la página del issue.

http://code.google.com/p/factura-electronica/issues/detail?id=32

Abajo de donde escribes el mensaje dice Attach a file

Original comment by bigdata.mx on 13 Feb 2011 at 4:21

GoogleCodeExporter commented 9 years ago
ok, listo va

Original comment by cristima...@gmail.com on 13 Feb 2011 at 6:07

Attachments:

GoogleCodeExporter commented 9 years ago
Hola, ya revise las clases y no parece haber ningún problema. Te mando las 
clases y unas instrucciones de como probarlo desde la linea de comandos para 
que revises la estructura que debe de tener en tu jbuilder.

Abre una linea de comandos de MS-DOS y cambiate al directorio donde está el 
directorio cfdi-base-0.1.6-SNAPSHOT y copia ahí mismo el archivo 
comprobanteFEI.java.

Luego exporta las librerias al classpath usando:

set 
CLASSPATH=cfdi-base-0.1.6-SNAPSHOT\cfdi-base-0.1.6-SNAPSHOT.jar;cfdi-base-0.1.6-
SNAPSHOT\lib\guava-r06.jar;cfdi-base-0.1.6-SNAPSHOT\lib\jaxb-api-2.1.jar;cfdi-ba
se-0.1.6-SNAPSHOT\lib\jaxb-impl-2.1.12.jar;.

En el mismo directorio compila con 
javac -d . comprobanteFEI.java

Luego copia el archivo jaxb.index a el directorio facturae y ejecuta el comando
java facturae.comprobanteEFI

Esto me funcionó con las clases que te mando.

Avisame cualquier cosa.

Saludos

Original comment by bigdata.mx on 14 Feb 2011 at 2:55

Attachments:

GoogleCodeExporter commented 9 years ago
Hola,
   pues si me ayudaste mucho porque finalmente el error era el compilador
que esta usando el jbuilder :( , gracias de verdad, ahora el unico detallito
que veo es que me sale el cfdi con un namespace cfdi: en el xml y para el
cfd me pone ns2: esto estara bien? porque si valido los xml en el validador
del sat salen como correctos pero queria preguntar tu opinion de cualquier
forma sobre esto y si de casualidad sabras como puedo generar el xsd de mi
clase de Disney para poder validar la addenda :) abusando de tu experiencia

muchas gracias de nuevo,
Cristina

El 13 de febrero de 2011 20:56, <factura-electronica@googlecode.com>escribi�:

Original comment by cristima...@gmail.com on 14 Feb 2011 at 5:47

GoogleCodeExporter commented 9 years ago
Te mande un mesaje mas y ahora que crees, que tambien necesito poner unos datos 
complemento, funcionaria igual que la addenda el campo <complemento> ?
gracias Gracias gracias :)

Original comment by cristima...@gmail.com on 14 Feb 2011 at 8:14

GoogleCodeExporter commented 9 years ago
Hola, no creo que tengas problema con el namespace en la versión 2, de 
cualquier forma voy a trabajar en la solución para quitarlo.

Respecto a los comprobantes, estoy casi seguro que funciona igual. Te funcionó?

Saludos

Original comment by bigdata.mx on 21 Feb 2011 at 8:20

GoogleCodeExporter commented 9 years ago
Hola Cristina, para avisarte que ya modifiqué las librerías para que puedas 
cambiar el prefijo del namespace que te asigna por default. El procedimiento es 
el siguiente:

1. Crea una clase package-info.java en el mismo package que tus clases de la 
Addenda y agrega el siguiente contenido:

@XmlSchema( 
    namespace="http://www.bigdata.mx/cfdi/example", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package mx.bigdata.sat.cfdi.examples;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

Con el namespace que quieras utilizar en tu caso.

2. En el código donde creas el CFDv3 agrega la siguiente linea:
    CFDv3 cfd = new CFDv3(ExampleCFDFactory.createComprobante(), 
                          "mx.bigdata.sat.cfdi.examples");
    cfd.addNamespace("http://www.bigdata.mx/cfdi/example", "example");

Esto mapea tu nuevo namespace al prefijo "example" y te generará una Addenda 
como la siguiente:

    <cfdi:Addenda>
        <example:Company>
            <example:Transaction PurchaseOrder="4600364283"/>
        </example:Company>
    </cfdi:Addenda>

Si quieres que el namespace de la Addenda esté vacío utiliza addNamespace de 
la siguiente forma:
    cfd.addNamespace("http://www.bigdata.mx/cfdi/example", "");

Cualquier duda puedes revisar el ejemplo en 
http://code.google.com/p/factura-electronica/source/browse#svn%2Ftrunk%2Fcfdi-ba
se%2Fsrc%2Fmain%2Fjava%2Fmx%2Fbigdata%2Fsat%2Fcfdi%2Fexamples

Saludos

Original comment by bigdata.mx on 26 Feb 2011 at 8:52

GoogleCodeExporter commented 9 years ago
Hola,
Yo voy utilizar varias adendas diferentes para varios clientes por lo que esta 
forma me parece muy impractica ya que requiere de mucha programación y 
especializacion para cada adenda. Se me ocurre la siguiente idea y quería 
consultarla con ustedes que tienen más experiencia en el tema.
Por lo que entiendo el error viene en la validación así que esto es lo que se 
me ocurre:
1) Enviar la adenda como xml tal y como lo hace cristina al iniciar este thread.
2) Generar las clases e index en un paquete (proyecto independiente) compilarlo 
y agregarlo en vivo (a manera de plugin).

de esta manera no tendria que estar recompilando todo el proyecto ni agregando 
el código para cada adenda que necesito generar.

Agradesco de antemano su ayuda.

Original comment by arabearb...@gmail.com on 20 Sep 2011 at 8:38

GoogleCodeExporter commented 9 years ago
De acuerdo con tus comentarios.

Si quieres lo discutimos.

Original comment by elmer.garduno@gmail.com on 23 Sep 2011 at 6:04

GoogleCodeExporter commented 9 years ago
Issue 41 has been merged into this issue.

Original comment by bigdata.mx on 31 Dec 2011 at 12:27

GoogleCodeExporter commented 9 years ago
Hola, ¿alguien ha implementado varias addendas? ya que tengo varias addendas 
de acuerdo a cada cliente si tienen alguna idea de como hacer se lo agradezco 
de antemano. 

Saludos

Beto

Original comment by adura...@gmail.com on 12 Apr 2012 at 6:22

GoogleCodeExporter commented 9 years ago
BigData, espero estés bien me puedes ayudar tengo un problemita similar a la 
compañera me esta arrojando este mensaje al ejecutar:

javax.xml.bind.MarshalException
 - with linked exception:
[org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard 
is strict, but no declaration can be found for element 'Company'.]
    at javax.xml.bind.util.JAXBSource$1.parse(JAXBSource.java:225)
    at javax.xml.bind.util.JAXBSource$1.parse(JAXBSource.java:210)
    at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.validate(ValidatorHandlerImpl.java:698)
    at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:97)
    at javax.xml.validation.Validator.validate(Validator.java:127)
    at mx.bigdata.sat.cfd.CFDv2.validar(CFDv2.java:141)
    at mx.bigdata.sat.cfd.CFDv2.validar(CFDv2.java:130)
    at mx.com.linarand.cfdws.ws.util.FacturaParsing.facturaToCFD(FacturaParsing.java:164)
    at mx.com.linarand.cfdws.service.impl.CfdTratamientoServiceImpl.enviaFactura(CfdTratamientoServiceImpl.java:65)
    at mx.com.linarand.cfdws.EnviaFacturaTest.enviaFactura(EnviaFacturaTest.java:35)

te envio como adjuntos los archivos, para ver si eres tan amable en ayudarme, 
desde ya muchas gracias.

Original comment by adura...@gmail.com on 16 Apr 2012 at 11:34

Attachments:

GoogleCodeExporter commented 9 years ago
Puedes revisar el  Issue 23  e  Issue 50  ? 

Quizá esa información te sirva si no avísanos.

Saludos

Original comment by bigdata.mx on 17 Apr 2012 at 3:30

GoogleCodeExporter commented 9 years ago
BigData, gracias por tu pronta respuesta, revisando los issues 23 y 50 hacen 
mención a complementos, pero a mi me lo esta dando en la addenda que viene en 
el CFDv2.XSD, crees que lo tenga que volver a descargar del SAT?

Utilizo STS 2.8.1 RELEASE y ya probe con Eclipse Helios y me marca lo mismo, 
ojala y me puedas ayudar.. gracias

Original comment by adura...@gmail.com on 17 Apr 2012 at 6:05

GoogleCodeExporter commented 9 years ago
Hola, estoy configurando la CFDv3 y ya baje cfdi-base-0.1.6, pero me sigue 
marcando el mismo error que a varias personas. 
Mi error es:
Exception in thread "main" javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: class Facturacion.ExampleCFDFactory$Company nor 
any of its super class is known to this context.
javax.xml.bind.JAXBException: class Facturacion.ExampleCFDFactory$Company nor 
any of its super class is known to this context.]
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:318)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)
    at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:130)
    at mx.bigdata.sat.cfdi.CFDv3.copy(CFDv3.java:224)
    at mx.bigdata.sat.cfdi.CFDv3.<init>(CFDv3.java:98)
    at facturacion.facturaelectronica.main(facturaelectronica.java:22)
Caused by: com.sun.istack.SAXException2: class 
Facturacion.ExampleCFDFactory$Company nor any of its super class is known to 
this context.
javax.xml.bind.JAXBException: class Facturacion.ExampleCFDFactory$Company nor 
any of its super class is known to this context.
    at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:246)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:261)
    at com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:118)
    at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:152)
    at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:332)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:699)
    at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:152)
    at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:332)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:593)
    at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:320)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
    ... 5 more
Caused by: javax.xml.bind.JAXBException: class 
Facturacion.ExampleCFDFactory$Company nor any of its super class is known to 
this context.
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:590)
    at com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:108)
    ... 14 more
Java Result: 1

Original comment by ady.z...@gmail.com on 20 Jun 2012 at 6:53

GoogleCodeExporter commented 9 years ago
hola no he podido ageregar una adenda a mi xml

Exception in thread "main" javax.xml.bind.JAXBException: "project1" doesnt 
contain ObjectFactory.class or jaxb.index

ese es el error q me marca y checando los demas comentarios agregue esl 
archivo.indes a mi mismo directorio y ni asi puede

Original comment by jorgea.a...@gmail.com on 19 Sep 2012 at 12:23

GoogleCodeExporter commented 9 years ago
espero y me puedan ayudar gracias

Original comment by jorgea.a...@gmail.com on 19 Sep 2012 at 12:23

GoogleCodeExporter commented 9 years ago
La librería de factura-electronica ha sido migrada a GitHub para facilitar la 
colaboración.

Los temas han sido migrados a 

https://github.com/bigdata-mx/factura-electronica/issues/

Visítanos!

Original comment by bigdata.mx on 21 Oct 2012 at 5:51