Ajuda com NF-e + JDom + Namespace

3 respostas
J

Gostaria de pedir uma ajuda a quem já trabalho com isso.

Estou gerando o XML para envio da nota fiscal eletrônica (em lote) mas realmente ainda não estou entendendo muito bem como tudo isso funciona.

Gerei o XML (usando o manual de v400) e fui validar no site da SEFAZ RS (eles tem esse validar de de XML de NF-e), porém está dando erro, sem que é em relação ao Namespace mas não sei como solucionar isso.

Segue parte do código que gera o XML
String versaoEnviNFe = "1.10";
String nameSpace = "http://www.portalfiscal.inf.br/nfe";
Namespace par = Namespace.getNamespace(nameSpace);
Document documento = new Document();
Element enviNFe = new Element("enviNFe", par);
enviNFe.setAttribute("versao", versaoEnviNFe);

Element idLote = new Element("idLote", par);
idLote.setText(numeroLote);
enviNFe.addContent(idLote);

documento.setRootElement(enviNFe);

for (NotaFiscal nota : lista) {

    Element NFe = new Element("NFe", par); // PARECE QUE O PROBLEMA ESTÁ AQUI

    Namespace par1 = par; // apenas atribui o Namespace já declarado

    enviNFe.addContent(NFe);

    Endereco enderecoEmitente = nota.getEmitente().getEndereco();
    String codigoMunicipioIBGE = enderecoEmitente.getCodigoMunicipio();
    String chaveAcesso = Lib.getChaveAcessoNota(nota);
    Date dataEmissaoNota = nota.getDataEmissao();
    String codigoUnico = new SimpleDateFormat("dHHmmS").format(dataEmissaoNota);
    String modeloNota = nota.getModeloDocumento(); // geralmente: 55
    String serieNota = nota.getSerie();
    String numeroNota = new DecimalFormat("000000000").format(nota.getNumero());
    String codigoUF = Lib.getListaEstadoIBGE().get(enderecoEmitente.getUF()).getCodigo().toString();
    String cnpjEmitente = nota.getEmitente().getIdentificador().replaceAll("[./-]", "");
    
    String dv = Lib.getDigitosChaveAcessoNFe(chaveAcesso);
    chaveAcesso = "NFe" + chaveAcesso + dv;

    Element InfNfe = new Element("infNfe", par1);
    InfNfe.setAttribute("versao", versaoEnviNFe);
    InfNfe.setAttribute("id", chaveAcesso);

    Element ide = new Element("ide", par1);
...
}

O erro apresentado no validador do SEFAZ RS:

PARSER XML: OK
TIPO DE MENSAGEM: Lote NF-e
SCHEMA: The element 'NFe' in namespace 'http://www.portalfiscal.inf.br/nfe' has invalid child element 'infNfe' in namespace 'http://www.portalfiscal.inf.br/nfe'. List of possible elements expected: 'http://www.portalfiscal.inf.br/nfe:infNFe'.
The element 'NFe' in namespace 'http://www.portalfiscal.inf.br/nfe' has invalid child element 'infNfe' in namespace 'http://www.portalfiscal.inf.br/nfe'. List of possible elements expected: 'http://www.portalfiscal.inf.br/nfe:infNFe'.
The element 'NFe' in namespace 'http://www.portalfiscal.inf.br/nfe' has invalid child element 'infNfe' in namespace 'http://www.portalfiscal.inf.br/nfe'. List of possible elements expected: 'http://www.portalfiscal.inf.br/nfe:infNFe'.
The element 'NFe' in namespace 'http://www.portalfiscal.inf.br/nfe' has invalid child element 'infNfe' in namespace 'http://www.portalfiscal.inf.br/nfe'. List of possible elements expected: 'http://www.portalfiscal.inf.br/nfe:infNFe'.

Alguém poderia dar um help?

3 Respostas

J

Alguém poderia ao menos dar uma dica de como validar o XML (tecnicamente) depois dele pronto? (tenho os esquemas 1.10).

Gostaria de saber como validar um XML contendo um lote de NF-e.

Nadinha?

J

Estou tentando validar conforme o código abaixo, mas como é um lote não estou sabendo qual esquema passar para o parser.

Qualquer ajudar seria bem vinda.

Passando o XML para tentar validar.
ValidarXML validar = new ValidarXML(arquivo, ValidarXML.ENVIO_XSD);
validar.setValidar();
Código para validar.
public class ValidarXML {

    Document document;
    String arquivo;
    String esquema;
    static String versao = "1.10";
    static String local = "C:/Projetos/Desktop/KNFe/src/knfe/schemas/";
    public static final String ENVIO_XSD = local + "enviNFe_v" + versao + ".xsd";
    public static final String LEIAUTE_XSD = local + "leiauteNFe_v" + versao + ".xsd";

    public ValidarXML(String arquivo, String esquema) {
        this.arquivo = arquivo;
        this.esquema = esquema;
    }

    public void setValidar() {
        System.out.println("Tentando validar: " + arquivo);
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        factory.setValidating(true);
        factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
        factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", esquema);

        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            builder.setErrorHandler(new ManipuladorDeErros());
            document = builder.parse(new File(arquivo));
        } catch (SAXException ex) {
            ex.printStackTrace();
        } catch (ParserConfigurationException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
Exception lançada:
Tentando validar: C:/Projetos/Desktop/KNFe/10-env-lot.xml
Erro encontrado na validação 
org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'infNfe'. One of '{"http://www.portalfiscal.inf.br/nfe":infNFe}' is expected.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
	at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
	at knfe.lib.ValidarXML.setValidar(ValidarXML.java:46)
	at knfe.gerador.Gerador.exemplo(Gerador.java:592)
	at knfe.ui.KNFeUI.iniciar(KNFeUI.java:99)
	at knfe.ui.KNFeUI.<init>(KNFeUI.java:57)
	at knfe.ui.KNFeUI.getMainUI(KNFeUI.java:65)
	at knfe.Main$1.run(Main.java:44)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Se tivesse como mandar o XML eu mandaria.

Obrigado

J

Segue o XML gerado, o qual não estou conseguindo validar, nem no site da SEFAZ RS nem pelo meu código java.

Se agluém que já tem experiência puder me ajudar eu agradeço, trata-se de um XML de um lote contendo apenas 1 nota fiscal.
<?xml version="1.0" encoding="UTF-8"?>
<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.10">
<idLote>10</idLote>
<NFe>
	<infNfe versao="1.10" id="NFe3509100276711600018655100002156422000006">
		<ide>
			<cUF>35</cUF>
			<cNF>2200000</cNF>
			<natOP>RET P/ BENEFICIAMENTO</natOP>
			<indPag>0</indPag>
			<mod>55</mod>
			<serie>1</serie>
			<nNF>000021564</nNF>
			<dEmi>2009-10-22</dEmi>
			<dSaiEnt>2009-10-22</dSaiEnt>
			<tpNF>1</tpNF>
			<cMunFG>3550308</cMunFG>
			<tpImp>1</tpImp>
			<tpEmis>1</tpEmis>
			<cDV>6</cDV>
			<tpAmb>2</tpAmb>
			<finNFe>1</finNFe>
			<procEmi>0</procEmi>
			<verProc>1.0</verProc>
		</ide>
		
		<emit>
			<CNPJ>07467116000186</CNPJ>
			<xNome>LAMIFLEX SERVICOS GRAFICOS LTDA. EPP</xNome>
			<xFant>LAMIFLEX</xFant>
			<enderEmit>
				<xLgr>RUA JOSE DA SILVA</xLgr>
				<nro>554</nro>
				<xBairro>MOOCA</xBairro>
				<cMun>3550308</cMun>
				<xMun>SAO PAULO</xMun>
				<UF>SP</UF>
				<CEP>03054010</CEP>
				<cPais>1058</cPais>
				<xPais>BRASIL</xPais>
				<fone>111111111</fone>
			</enderEmit>
			<IE>113510991356</IE>
			<CRT>3</CRT>
		</emit>
		
		<dest>
			<CNPJ>01167819000123</CNPJ>
			<xNome>ASA ARTES GRAFICAS LTDA.</xNome>
			<enderDest>
				<xLgr>RUA JOSE DA SILVA ROCHA</xLgr>
				<nro>1433</nro>
				<xBairro>VILA FORMOSA</xBairro>
				<cMun>3550308</cMun>
				<xMun>SAO PAULO</xMun>
				<UF>SP</UF>
				<CEP>03356040</CEP>
				<cPais>1058</cPais>
				<xPais>BRASIL</xPais>
				<fone>34734086</fone>
			</enderDest>
			<IE>ISENTO</IE>
			<email>[email removido]</email>
		</dest>
		
		<det nItem="1">
			<prod>
				<cProd>25</cProd>
				<cEAN></cEAN>
				<xProd>PLASTIFICACAO  FOSCA</xProd>
				<NCM></NCM>
				<CFOP>5124</CFOP>
				<uTrib>FL</uTrib>
				<uCom>FL</uCom>
				<qTrib>2500.00</qTrib>
				<qCom>2500.00</qCom>
				<vProd>218.00</vProd>
				<infAdProd>teste para PLASTIFICACAO  FOSCA</infAdProd>
			</prod>
			<imposto>
				<ICMS>
					<ICMS00>
						<orig>0</orig>
						<CST>00</CST>
						<modBC>0</modBC>
						<vBC>218.00</vBC>
						<pICMS>18.00</pICMS>
						<vICMS>39.24</vICMS>
					</ICMS00>
				</ICMS>
				<PIS>
					<PISAliq>
						<CST>01</CST>
						<vBC>218.00</vBC>
						<pPIS>3.00</pPIS>
						<vPIS>6.54</vPIS>
					</PISAliq>
				</PIS>
				<COFINS>
					<COFINSAliq>
						<CST>01</CST>
						<vBC>218.00</vBC>
						<pCOFINS>0.65</pCOFINS>
						<vCOFINS>1.42</vCOFINS>
					</COFINSAliq>
				</COFINS>
			</imposto>
		</det>
		<det nItem="2">
			<prod>
				<cProd>30</cProd>
				<cEAN></cEAN>
				<xProd>U.V. TOTAL</xProd>
				<NCM></NCM>
				<CFOP>5124</CFOP>
				<uTrib>FL</uTrib>
				<uCom>FL</uCom>
				<qTrib>2500.00</qTrib>
				<qCom>2500.00</qCom>
				<vProd>120.00</vProd>
				<infAdProd>teste para U.V. TOTAL</infAdProd>
			</prod>
			<imposto>
				<ICMS>
					<ICMS00>
						<orig>0</orig>
						<CST>00</CST>
						<modBC>0</modBC>
						<vBC>120.00</vBC>
						<pICMS>18.00</pICMS>
						<vICMS>21.60</vICMS>
					</ICMS00>
				</ICMS>
				<PIS>
					<PISAliq>
						<CST>01</CST>
						<vBC>120.00</vBC>
						<pPIS>3.00</pPIS>
						<vPIS>3.60</vPIS>
					</PISAliq>
				</PIS>
				<COFINS>
					<COFINSAliq>
						<CST>01</CST>
						<vBC>120.00</vBC>
						<pCOFINS>0.65</pCOFINS>
						<vCOFINS>0.78</vCOFINS>
					</COFINSAliq>
				</COFINS>
			</imposto>
		</det>
		<det nItem="3">
			<prod>
				<cProd>33</cProd>
				<cEAN></cEAN>
				<xProd>LAMINACAO FOSCA COM RESERVA PARA COLAGEM</xProd>
				<NCM></NCM>
				<CFOP>5124</CFOP>
				<uTrib>FL</uTrib>
				<uCom>FL</uCom>
				<qTrib>2500.00</qTrib>
				<qCom>2500.00</qCom>
				<vProd>3630.00</vProd>
				<infAdProd>teste para LAMINACAO FOSCA COM RESERVA PARA COLAGEM</infAdProd>
			</prod>
			<imposto>
			<ICMS>
				<ICMS00>
					<orig>0</orig>
					<CST>00</CST>
					<modBC>0</modBC>
					<vBC>3630.00</vBC>
					<pICMS>18.00</pICMS>
					<vICMS>653.40</vICMS>
				</ICMS00>
			</ICMS>
			<PIS>
				<PISAliq>
					<CST>01</CST>
					<vBC>3630.00</vBC>
					<pPIS>3.00</pPIS>
					<vPIS>108.90</vPIS>
				</PISAliq>
			</PIS>
			<COFINS>
				<COFINSAliq>
					<CST>01</CST>
					<vBC>3630.00</vBC>
					<pCOFINS>0.65</pCOFINS>
					<vCOFINS>23.60</vCOFINS>
				</COFINSAliq>
			</COFINS>
		</imposto>
	</det>
	<total>
		<ICMSTot>
			<vBC>3968.00</vBC>
			<vICMS>714.24</vICMS>
			<vBCST>0.00</vBCST>
			<vST>0.00</vST>
			<vProd>3968.00</vProd>
			<vFrete>0.00</vFrete>
			<vSeg>0.00</vSeg>
			<vDesc>0.00</vDesc>
			<vIPI>0.00</vIPI>
			<vPIS>119.04</vPIS>
			<vCOFINS>25.79</vCOFINS>
			<vOutro>0.00</vOutro>
			<vNF>3968.00</vNF>
		</ICMSTot>
	</total>
	<transp>
		<modFrete>0</modFrete>
	</transp>
</infNfe>
</NFe>
</enviNFe>
Criado 6 de novembro de 2009
Ultima resposta 6 de nov. de 2009
Respostas 3
Participantes 1