COMO LEER XML CFDI EN JAVA

En la publicación anterior vimos como generar una clase en Java a partir del XSD que en este caso fue un XSD del SAT, ahora veremos como jalar la información de un XML CFDI con esas clases, primero vamos a poner esas clases al proyecto en NETBEANS, tal y como se ve en la Imagen.


Y ahora en el .java principal tenemos hacer uso de las clases, para ello usaremos un xml de una factura ejemplo y jalaremos sus datos "Conceptos de la siguiente forma y con el siguiente codigo".
 
package leerxml;

import ClasesComprobante.Comprobante;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

/**
 *
 * @author julioleyva
 */
public class LeerXML {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException {
        JAXBContext factura;
        try {
            factura= JAXBContext.newInstance(Comprobante.class);
             Unmarshaller u = factura.createUnmarshaller();
    
        Comprobante root = (Comprobante) u.unmarshal(new FileInputStream("D:/cfdi.xml"));
        
        for(int x=0; x<root.getConceptos().getConcepto().size(); x++){
            System.out.println(root.getConceptos().getConcepto().get(x).getCantidad());
            System.out.println(root.getConceptos().getConcepto().get(x).getDescripcion());
            System.out.println(root.getConceptos().getConcepto().get(x).getImporte());
            System.out.println(root.getConceptos().getConcepto().get(x).getUnidad());
            System.out.println(root.getConceptos().getConcepto().get(x).getValorUnitario()); 
        }
        } catch (JAXBException ex) {
            Logger.getLogger(LeerXML.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}
 
Y nos arrojara los siguientes datos
 
1
SE AGREGO AL CATALOGO EL METODO DE PAGO A LOS CLIENTES Y SE ACTUALIZO 
2700
ser
2700 




0