Ajuda com NF-e + JDom + Namespace

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

[code]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);


}
[/code]

O erro apresentado no validador do SEFAZ RS:

[quote]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’.[/quote]
Alguém poderia dar um help?

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?

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.

[code]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();
    }
}

}[/code]

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

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.

[code]<?xml version="1.0" encoding="UTF-8"?>

10



35
2200000
RET P/ BENEFICIAMENTO
0
55
1
000021564
2009-10-22
2009-10-22
1
3550308
1
1
6
2
1
0
1.0

	<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>raquel@uol.com.br</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>
[/code]