Validar XML com SCHEMA usando SaxBuilder

XML utilizando JDOM, mais na hora de validar o XML utilizando um schema xsd da erro logo na primeira linha do xml.
mas o xml q eu to usando pra teste eh um xml valido q eu peguei direto no site.

vou postar o codigo da validação se puder me ajudar ficaria muito grato

        SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
        builder.setFeature("http://apache.org/xml/features/validation/schema",true);
        builder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", "http://localhost:8084/ServletNFe/schemas/nfe_v1.10.xsd");
        URL url = new URL("http://localhost:8084/ServletNFe/xmls/43060992665611012850550070000000011375309286-nfe.xml");
        boolean a = builder.getValidation();
        Document doc = builder.build(url);

o erro q ocorre eh o seguinte

org.jdom.input.JDOMParseException: Error on line 1 of document http://localhost:8084/ServletNFe/xmls/43060992665611012850550070000000011375309286-nfe.xml: cvc-elt.1: Cannot find the declaration of element ‘NFe’.

aki as primeiras linhas do xml

  • - - 43

Patrick,

Vc está tendo problemas com validação de XML com vários registros ? Aqui tá dando stackoverflow… tenta aí… Faço aqui com 165 NFes.

falow

O elemento NFE deve ser o seu namespace vc inclui ele ? no seu XSD?
Tipo:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:nfe=http://www.portalfiscal.inf.br/nfe" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">

</xs:schema>

Veja onde declarei o nfe
Mas isso no cabeçalho do XSD

eu ja havia resolvido esse problema

vou postar o codigo q eu fiz caso alguem tenha esteja com msm problema

    [code]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", "http://localhost:8084/ServletNFe/schemas/nfe_v1.10.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("http://localhost:8084/ServletNFe/xmls/testeNFe.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();
    }[/code]

Classe errorHalnder

[code]public class SimpleErrorHandler implements ErrorHandler
{
public void error(SAXParseException exception) {
System.out.println("error: "+ exception.getMessage());
}

 public void fatalError(SAXParseException exception) {
     System.out.println("fatalError: "+ exception.getMessage());
 }
      
 public void warning(SAXParseException exception) {
     System.out.println("warning: "+ exception.getMessage());
 }

}[/code]

vlw ai

PatricMaffi, obrigado por compartilhar a sua classe.
Fiz pequenos ajustes e funcionou corretamente.

Todavia, ainda vou fazer uma classe helper, pois terei os XSDs armazenados em dentro da classe empacotada, e aqui só funcionou com a recursão de imports de dentro dos XSDs passando os mesmos como URIs String na propriedade.
Neste caso, vou criar uma classe para extraí-los do JAR, e deixar no diretorio temporario do container, para que possam ser lidos em caso de includes ( que acontecem com todos os XSDs da Sefaz ).

Valeu mesmo!

Grande abraço!

[quote=rafaelbarata]Patrick,

Vc está tendo problemas com validação de XML com vários registros ? Aqui tá dando stackoverflow… tenta aí… Faço aqui com 165 NFes.

falow[/quote]
cara vc consegue tratar os stackoverflow ? eu valido normal, mas volte e meia me da um erro desse…
tem que alterar alguma coisa na validação?

Revivendo topico o/

Sobre a validação da NF-e , tem como pegar esses erros capturados
em PT-BR ? Digo isso porque, esses erros deve ser apresentados para o Usuário…

Então fica complicado deixar mensagem em English para o Usuario ;x

E o software do governo traz os erros em Portugues =/

Atualmente meu retorno é o seguinte

DocumentBuilderFactory: com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
error: cvc-enumeration-valid: Value 'A4' is not facet-valid with respect to enumeration '[11, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 35, 41, 42, 43, 50, 51, 52, 53]'. It must be a value from the enumeration.
error: cvc-type.3.1.3: The value 'A4' of element 'cUF' is not valid.
Root node: NFe

oi

vc coloca o caminho do xsd em um servlet?
http://localhost:8084/ServletNFe/schemas/nfe_v1.10.xsd
estou tendo dificuldades com isso
pode me explicar melhor por favor

abraço

Acredito que que não. Nem o validador de Rio Grande do Sul apresenta as mensagens em português. Se você souber como sem ter que fazer o parse, me fala que eu preciso disso em vários lugares :slight_smile:

Fala pessoal, to precisando fazer em java um validador de assinaturas e schemas XML

quem puder me ajudar, eu retorno uma grana ok?

Abraços,