XML Nfe

Bom Dia estou desenvolvendo a integração com NFE, mas quando valido os xmls pelos xsds me retorna esta msg

Cannot find the declaration of element ‘nfeProc’.

Assim gostaria se alguem pudesse disponibilizar um xml, sem dado algum apenas o esqueleto de como deve ficar, para que eu possa verificar co m o meu por favor, pois mesmo pegando o xml de uma NFe ja enviada não sei se todos os campos devem realmente estar lá quando valido ou se algum deles aparece depois de autoriada a NFE.
Estou validando pelo enviNFe_v2.00.xsd, talvez seja outro tbm e não sei, mas como testei por outros e sempre encontrei o msm erro… se alguem puder disponibilizar agradeço.

Em anexo uma pilha de NFes validas, espero que ajudem.

Voce usou a Vinculacao JAXB para criar as classes a partir dos xsd???

ainda não criei as classes estou criando o xml primeiro, para que quando ele estiver certinho, validando e tals, dai vou criar as classes, mas é bem provavel que eu crie elas manualmente
, até sei criar as classes a partir do xsd, mas não quero fazer nada automatico nesta parte.

aqueles xmls que vc me passou, eu posso validar eles pelo enviNFe_v2.00.xsd direto ou tenho que alterar alguma coisa antes?

Desde já agradeço mto^^

Tá, vc quer fazer manualmente e está reclamando que o sistema está reclamando a falta de uma parte!!!

Faz sentido, o uso das coisas automaticas é justamente para evitar erros manuais. Ou você está brincando de fazer isso para estudar?

Você pode usar os xml sem alteracao, diretamente.

Entao é +/- isso mesmo, a questão é que eu peguei um xml já emitido corretamente, e fui validar para ver como seria o comportamento, e deu este erro. Mas como já foi emitido e tudo teoricamente não tem erro, estou achando que o erro é na classe de validação pois mesmo com seus xmls os erros continuaram os mesmos…

eu estou usando para validar a classe Schema, não sei se pode ser alguma coisa com ela.

mas quanto a parte de geração dos xmls ainda não tem nada definitivo no sistema.

É que esse erro:

Cannot find the declaration of element ‘nfeProc’

Que vc menciona, é justamente por que um elemento exigido pelos xsd, esse elemento nfeProc não está
definido nas classes.

O que o processo de validacao faz é correr o xml verificando se a forma de cada elemento está de acordo
com os schemas. E estes esquemas exigem um elemento chamado nfeProc que está lá definido e não
está nas suas classes.

Ou seja, ao ler o xml que você está apresentando há aparece um elemento nfeProc, mas ele não acha
a declaração desse elemento em suas classes, então não sabe como interpretar esse elemento.

Bem, isso quer dizer que você precisa passar os xsd, procurar pelo formato desse elemento (e de outros que tiverem lá)
e definir as classes dele.

Não entendi bem…

então para validar o xml com o Schema eu vou precisar das classes já prontas?

por que ele não consegue encontrar elas para valdiar o NFeProc?

Tá, por estas ultimas perguntas devo entender que voce
só vai validar, não vai criar NFes novas.

Então não precisa das classes, mas vai precisar dos schemas

Você tem os schemas? Todos?

Nesses esquemas mostra essa tal de nfeProc?

Se não mostra, então teus schemas estão incompletos.

Trate de achar todos os schemas, inclusive aquele que define esse tal de nfeProc.

ou teu xml tem esse elemento nfeProc e ele não consta dos schemas e portanto está dando inválido.

Tem sim a tag estava olhando agora, eu peguei eles no site da fazenda

http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=/fwLvLUSmU8=

sim peguei todos os schemas e estou validando pelo enviNFe_v2.00.xsd.

E agradeço muito a ajuda que você está me dando^^

Dá para você postar aqui o teu código que faz a validação?

Claro que sim, eu estou usando três codigos diferente para testar e todos retornam o mesmo erro, eu tambem estou desenvolvendo no linux, não sei se afeta alguma coisa, tenho tambem um xml e schema de teste e eles passam pelas validações normalmente.

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class Validador {

	private static Validator validador;
	private static Document document; 
	
	public static void obterXmlSchema() throws SAXException {
		SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
		Schema schema = factory.newSchema(new File("/home/daniel/Downloads/PL_006j/enviNFe_v2.00.xsd"));
		validador = schema.newValidator();
	}
	
	public static void obterXml() throws ParserConfigurationException, SAXException, IOException{
		DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        document = parser.parse(new File("xsds/teste.xml"));
	}

	public static void validar() throws SAXException, IOException, ParserConfigurationException{
		obterXmlSchema();
		obterXml();
		validador.validate(new DOMSource(document));
		System.out.println("Validou!!!");
	}
	
	public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
		validar();
	}
}

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

public class Validando {

	public Validando(){
		validar();
	}

	private void validar() {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
	    //System.out.println("DocumentBuilderFactory: "+ factory.getClass().getName());  
	      
	    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", "/home/daniel/Downloads/PL_006j/enviNFe_v2.00.xsd");  
	    DocumentBuilder builder = null;  
	    try   
	    {  
	        builder = factory.newDocumentBuilder();  
	        builder.setErrorHandler( new SimpleErrorHandler());  
	    } catch (ParserConfigurationException ex)   
	    {  
	        ex.printStackTrace();  
	    }  
	    org.w3c.dom.Document document;  
	    try   
	    {  
	        document = builder.parse("xsds/teste.xml");  
	        org.w3c.dom.Node rootNode  = document.getFirstChild();  
	        System.out.println("Root node: "+ rootNode.getNodeName()  );  
	    } catch (IOException ex) {  
	        ex.printStackTrace();  
	    } catch (SAXException ex) {  
	        ex.printStackTrace();  
	    }  
		
	}
	
	public static void main(String args[]){
		
		new Validando();
		
	}
	
}

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;

import org.xml.sax.SAXException;

public class Validar {
	
	public static void main(String args[]) {
		new Validar();

	}
	
	public Validar(){
		
		String xml = "xsds/teste.xml";
		File xsd = new File("/home/daniel/Downloads/PL_006j/enviNFe_v2.00.xsd");
		
	Schema schema;
	try {
		schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(xsd);
		
		Source source = new StreamSource(xml);
		
		schema.newValidator().validate(source);
		System.out.println("Carregou!!!");
		//schema.newValidator().validate(new StreamSource(xml)); 
	} catch (SAXException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} 
	
	}

}

No topo do leiauteNfe.xsd tem um comentario dizendo que essa versao :

teve a eliminação da key nfeProc. Que é justamente o que o teu validador está reclamando a falta.

Me parece que você está usando um modelo com esse nfeProc e um validador que já não o usa. Dá uma olhada nas versoes.

Eu nem sei mais o que faço, tipo…

Eu peguei os xmls e os Schemas de uma empresa que eu trabalhava antes… e validam normais lá, mas o sistema é em Delphi
e quando passo aqui, ocorre aquele mesmo problema, tambem tentei retirar a tag do nfeProc, mas dai ele acusa sempre erro na proxima tag, fui tirando mas quando chegou na tag ide e continuou acusando erro parei…

e os Schemas que pedem a validação daquela tag são de antes de Março do ano passado, acho que pode ter problemas eu seu utiliza-los não?

Qual a versão dos Schemas que você está utilizando? a validação deve ser feita com a assinatura mesmo não é?

Sim, a validação é feita com a assinatura sim, mas antes são passados todos os elementos, e no teu
caso parece que já falha muito antes da assinatura.

Eu uso sempre a última versão disponivel no site da receita. E quando surge uma nova já trato de
ver as mudanças e implementar.

É complicado ajudar, há muitos fatores nesse processo, dificil saber se você está usando a versão certa.

Existe um tópico aqui no GUJ só sobre NFe e tem muitas participações de tão complexo que é.

http://www.guj.com.br/java/52035-nfe

E tem até um projeto open source uma API chamada jNFe só para isso em http://jnfe.com.br/wp/

Então eu tenho procurado bastante nestes tópicos, o engraçado é que todas as notas que eu estou testando nos Schemas, são validadas por este site

http://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx

a questão é com os Schemas que eu estou usando mesmo, acho, apesar que eles realmente são a ultima versão do site, peguei a do dia 21/10/2011 que saiu no site, e fui testando umas mais antigas e todas continuam acontecendo isso…

Bem, entao tuas notas estao corretas é apenas o teu validador que não está usando o xsd certo.

Voce tentou chamar os outros xsds do zip baixado???

Sei que vai dar trabalho, mas a sugestao é tentar substituir cada um dos xsds até encontrar
aquele que valide o seu xml sem problemas.

VLW msm cara^^

descobri o que era, realmente fui correndo todas as xsds e era uma outra. Funfou legal^^

agora vou começar a gerar as classes!!!

QQ coisa que precisar é só dar um toque^^
VLW msm^^