1
resposta

Problema xmlns

Estou tentando desserializar uma nota fiscal, só que estou tendo um pequeno problema:

Nas tags "nfeProc" e "NFe", tem o atributo xmlns, quando eu apago esse atributo no xml, o código funciona perfeitamente, mas quando o xml tem esse atributo conforme abaixo, acontece uma JAXBException.

<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
    <NFe xmlns="http://www.portalfiscal.inf.br/nfe">
        <infNFe versao="4.00" Id="NFe...">
            <ide>
                <cUF>43</cUF>
                    <cNF>92601422</cNF>
...

Os atributos "versao" e "Id" eu consegui obtê-los através da anotação @XmlAttribute, mas não funciona com esse "xmlns".

Alguém me explica por que isso acontece e como resolver.

1 resposta

Olá Leonardo, tudo bem?

Quando você remove esse atributo do XML, o código funciona corretamente só porque não há conflito de namespaces. Mas quando o atributo está presente, ocorre uma JAXBException. Isso acontece porque a biblioteca JAXB, responsável pela desserialização, precisa saber qual namespace está sendo utilizado para mapear corretamente os elementos do XML para as classes Java correspondentes.

Você precisa informar à biblioteca JAXB sobre o namespace utilizado no XML. Isso pode ser feito utilizando a anotação @XmlRootElement(namespace = "http://www.portalfiscal.inf.br/nfe") na classe correspondente à tag "NFe". Dessa forma, a biblioteca saberá como mapear corretamente os elementos do XML:

@XmlRootElement(namespace = "http://www.portalfiscal.inf.br/nfe")
public class NFe {
    // atributos e métodos da classe
}

Com essa anotação, a biblioteca JAXB saberá que a classe "NFe" está associada ao namespace "http://www.portalfiscal.inf.br/nfe" e poderá realizar a desserialização corretamente.

Espero ter ajudado e bons estudos!