Erros em validação XML com XSD

2 respostas
cs.santos0

Boa tarde,

desenvolvi uma validação de XML atraves de um arquivo xsd com a seguinte estrutura:
public String validate(String xml) {

        String saida = "";
        InputStream xsd = XmlValidator.class.getResourceAsStream("shiporder.xsd");        

        try {
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            docBuilderFactory.setNamespaceAware(true);

            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            ByteArrayInputStream is = new ByteArrayInputStream(xml.getBytes());
            Document doc = docBuilder.parse(is);

            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Source schemaFile = new StreamSource(xsd);

            Schema newSchema = (Schema) factory.newSchema(schemaFile);
            Validator validator = newSchema.newValidator();
            validator.validate(new DOMSource(doc));            
            saida = "SUCESSO";
            
        } catch (DOMException ex) {            
            ex.printStackTrace();
            saida =  "DOM";
        } catch (SAXException ex) {            
            saida = ex.getMessage();
        } catch (IOException ex) {            
            ex.printStackTrace();
            saida =  "IO";
        } catch (ParserConfigurationException ex) {            
            ex.printStackTrace();
            saida = "PARSER_CONFIGURATION";
        }
        return saida;
    }

funciona perfeitamente...mas eu preciso fazer uma alteração.
Quando é encontrado um erro no xml, o metodo lança uma exceção e finaliza, porem eu preciso que ele mostre todos os erros de uma vez ao executar. pois agora ele acha um erro e para, ai eu tenho q arrumar e executar de novo e arrumar o proximo, e assim até não ter mais erros.

Alguem ai pode me ajudar, estou pesquisando mas ainda não encontrei nda util?
Obrigado

2 Respostas

T

Pelo que imagino, você precisa criar uma classe que implemente ErrorHandler, e a seguir, antes de chamar validate, usar setErrorHandler.

Assim você poderia ir acumulando as exceções obtidas em uma lista, e pegar essa lista depois.

Na prática, normalmente os validadores se “embananam” bastante depois do primeiro erro, então talvez seja melhor você testar isso e ver se realmente vale a pena.

cs.santos0

essa solução com ErrorHandler eu ja tinha feito…mas tinha achado meio estranha…mas acabei estudando mais o funcionamento e adaptei para as minhas necessidades.

Problema resolvido

Criado 29 de abril de 2009
Ultima resposta 4 de mai. de 2009
Respostas 2
Participantes 2