Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Letra mayuscula al crear XML con JAXBContext

Estas en el tema de Letra mayuscula al crear XML con JAXBContext en el foro de Java en Foros del Web. Buen día todos miren que llevo días queriendo hacer unas validaciones para unos archivos xml del SAT de manera que opte por crear mi propia ...
  #1 (permalink)  
Antiguo 23/04/2018, 09:22
 
Fecha de Ingreso: mayo-2011
Ubicación: Aguascalientes, México
Mensajes: 32
Antigüedad: 12 años, 11 meses
Puntos: 5
Pregunta Letra mayuscula al crear XML con JAXBContext

Buen día todos miren que llevo días queriendo hacer unas validaciones para unos archivos xml del SAT de manera que opte por crear mi propia estructura en clases sin embargo tengo un pequeño detalle al momento de crear el xml yo necesito crear un nodo de la siguiente manera:

Código:
<cfdi:Receptor/>
pero por más que intento solo consigo el siguiente nodo:

Código:
<cfdi:receptor/>
ya le he dado vueltas por muchos lados y no lo consigo mi bean principal es el siguiente:

Código:
public void createXmlSchema() throws JAXBException{
        try{
            ServletContext servletContext= (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
            File file = new File(servletContext.getRealPath("files/test.xml"));

			ComprobanteMine comprobante = new ComprobanteMine();
			comprobante.setVersion("3.2");
			comprobante.setSerie("HDS");
			comprobante.setFolio("3");
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");

			comprobante.setFormaDePago("PAGO EN UNA SOLA EXHIBICIÓN");
			comprobante.setCondicionesDePago("CONTADO");
			comprobante.setMetodoDePago("Efectivo");
			comprobante.setNoCertificado("20001000000200001745");
			comprobante.setMotivoDescuento("Deducciones nómina");
			comprobante.setTipoCambio("1.00");
			comprobante.setMoneda("MXP");
			comprobante.setLugarExpedicion("Aguascalientes, Ags");
			
			//Adición clase receptor
			ReceptorMine rec = new ReceptorMine();
                        rec.setRfc("RRRFFFCCC");
                        rec.setNombre("NOm NOm NOm");
                        rec.setUsoCfdi("test");
			comprobante.setReceptor(rec);

	   
			
			
		   JAXBContext context = JAXBContext.newInstance(ComprobanteMine.class);
			Marshaller m = context.createMarshaller();
			
			m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
			m.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd");
			
			m.marshal(comprobante, System.out);

			m.marshal(comprobante, file);
			
			}catch(Exception ex){
				System.out.println(ex.getMessage());
			}
    }
mi clase receptor la tengo así:

Código:
package Controlador;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name = "Receptor",namespace = "cfdi")
@XmlType(name ="Receptor",propOrder = {"rfc", "nombre", "usoCfdi"})
public class ReceptorMine {

    @XmlAttribute(name = "UsoCFDI")
    public String getUsoCfdi() {
        return usoCfdi;
    }
    public void setUsoCfdi(String usoCfdi) {
        this.usoCfdi = usoCfdi;
    }

    @XmlAttribute(name = "Rfc")
    public String getRfc() {
        return rfc;
    }
    public void setRfc(String rfc) {
        this.rfc = rfc;
    }

    @XmlAttribute(name = "Nombre")
    public String getNombre() {
        return Nombre;
    }
    public void setNombre(String Nombre) {
        this.Nombre = Nombre;
    }
	
    private String rfc;
    private String Nombre;
    private String usoCfdi;
}
Y mi clase Comprobante la tengo algo así:

Código:
package Controlador;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(namespace = "http://www.sat.gob.mx/cfd/3", name="Comprobante")
public class ComprobanteMine {
    public ComprobanteMine(){
        
    }
    private ReceptorMine Receptor;
    
    private String version;
    private String Serie;
    private String Folio;
    private String fecha;
    private String tipoDeComprobante;
    private String formaDePago;
    private String condicionesDePago;
    private String metodoDePago;
    private String noCertificado;
    private String subTotal;
    private String descuento;
    private String motivoDescuento;
    private String TipoCambio;
    private String Moneda;
    private String total;
    private String LugarExpedicion;
    private String sello;

    public ReceptorMine getReceptor(){
        return Receptor;
    }
    
    public void setReceptor(ReceptorMine Receptor){
        this.Receptor=Receptor;
    }

    @XmlAttribute(name = "Version")
    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
    @XmlAttribute(name = "Serie")
     public String getSerie() {
        return Serie;
    }

    public void setSerie(String Serie) {
        this.Serie = Serie;
    }
    @XmlAttribute(name = "Folio")
    public String getFolio() {
        return Folio;
    }

    public void setFolio(String Folio) {
        this.Folio = Folio;
    }
    @XmlAttribute(name = "Fecha")
    public String getFecha() {
        return fecha;
    }
    
    public void setFecha(String fecha) {
        this.fecha = fecha;
    }
    @XmlAttribute(name = "TipoDeComprobante")
    public String getTipoDeComprobante() {
        return tipoDeComprobante;
    }

    public void setTipoDeComprobante(String tipoDeComprobante) {
        this.tipoDeComprobante = tipoDeComprobante;
    }
    @XmlAttribute
    public String getFormaDePago() {
        return formaDePago;
    }

    public void setFormaDePago(String formaDePago) {
        this.formaDePago = formaDePago;
    }
    @XmlAttribute
    public String getCondicionesDePago() {
        return condicionesDePago;
    }

    public void setCondicionesDePago(String condicionesDePago) {
        this.condicionesDePago = condicionesDePago;
    }
    @XmlAttribute
    public String getMetodoDePago() {
        return metodoDePago;
    }

    public void setMetodoDePago(String metodoDePago) {
        this.metodoDePago = metodoDePago;
    }
    @XmlAttribute
    public String getNoCertificado() {
        return noCertificado;
    }

    public void setNoCertificado(String noCertificado) {
        this.noCertificado = noCertificado;
    }
    @XmlAttribute
    public String getSubTotal() {
        return subTotal;
    }

    public void setSubTotal(String subTotal) {
        this.subTotal = subTotal;
    }
    @XmlAttribute
    public String getDescuento() {
        return descuento;
    }

    public void setDescuento(String descuento) {
        this.descuento = descuento;
    }
    @XmlAttribute
    public String getMotivoDescuento() {
        return motivoDescuento;
    }

    public void setMotivoDescuento(String motivoDescuento) {
        this.motivoDescuento = motivoDescuento;
    }
    @XmlAttribute
    public String getTipoCambio() {
        return TipoCambio;
    }

    public void setTipoCambio(String TipoCambio) {
        this.TipoCambio = TipoCambio;
    }
    @XmlAttribute
    public String getMoneda() {
        return Moneda;
    }

    public void setMoneda(String Moneda) {
        this.Moneda = Moneda;
    }
    @XmlAttribute
    public String getTotal() {
        return total;
    }

    public void setTotal(String total) {
        this.total = total;
    }
    @XmlAttribute
    public String getLugarExpedicion() {
        return LugarExpedicion;
    }

    public void setLugarExpedicion(String LugarExpedicion) {
        this.LugarExpedicion = LugarExpedicion;
    }
    @XmlAttribute
    public String getSello() {
        return sello;
    }

    public void setSello(String sello) {
        this.sello = sello;
    } 
}
Como comentario adicional cree un package para controlar los names spaces que está definido de la siguiente manera:

Código:
@XmlSchema(namespace = "http://www.sat.gob.mx/cfd/3",  
        xmlns = {               
            @XmlNs(namespaceURI = "http://www.sat.gob.mx/cfd/3", prefix = "cfdi"),  
            @XmlNs(namespaceURI = "http://www.w3.org/2001/XMLSchema-instance", prefix = "xsi")
        },  
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
      
    package Controlador;
      
    import javax.xml.bind.annotation.XmlNs;  
    import javax.xml.bind.annotation.XmlSchema;
Les mando saludos y agradecimientos por adelantado.
  #2 (permalink)  
Antiguo 23/04/2018, 16:38
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Letra mayuscula al crear XML con JAXBContext

Parece que por defecto se parsea como camelcase.

échale un ojo a esto

http://blog.bdoughan.com/2011/05/ove...-mangling.html

o a esto otro

http://www.eclipse.org/eclipselink/d...oncepts002.htm
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Última edición por Fuzzylog; 24/04/2018 a las 08:46
  #3 (permalink)  
Antiguo 24/04/2018, 09:30
 
Fecha de Ingreso: mayo-2011
Ubicación: Aguascalientes, México
Mensajes: 32
Antigüedad: 12 años, 11 meses
Puntos: 5
Respuesta: Letra mayuscula al crear XML con JAXBContext

Ya pude, lo que me faltaba era lo siguiente en la clase "Comprobante"

Código:
  
@XmlElement( name = "Receptor" )
public ReceptorMine getReceptor(){
        return Receptor;
    }
    
    public void setReceptor(ReceptorMine Receptor){
        this.Receptor=Receptor;
    }
Sobrecargar el nombre en el setter y listo.
Gracias por su atención y ayuda

Etiquetas: sat, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:37.