0

Well, the title says it all.

I know that it is not a blocking call but I need to wait for it to finish validating before moving on to the next statement.

How can I do that ?

My ErrorHandler class

private class ErrorHandler extends DefaultHandler{
        public SAXParseException ex = null;
        public boolean errorOccured = false;

        @Override
        public void error(SAXParseException ex) {
            this.ex = ex;
            errorOccured = true;
        }

        @Override 
        public void fatalError(SAXParseException ex){
            this.ex = ex;
            errorOccured = true;
        }

        @Override
        public void warning(SAXParseException ex){

        }


}
4

1 に答える 1

2

「ブロッキングコールではないことはわかっています」の意味がわかりません。何があなたをそう思わせたのですか?

Validator.validateブロッキングコールです。

ドキュメントを検証してからエラーをチェックする場合は、独自のドキュメントを作成できますErrorHandler

final Validator validator = schema.newValidator();
final List<SAXParseException> errors = new ArrayList<SAXParseException>();
validator.setErrorHandler(new ErrorHandler() {

    public void warning(SAXParseException saxpe) throws SAXException {
        //ignore, log or whatever
    }

    public void error(SAXParseException saxpe) throws SAXException {
        errors.add(saxpe);
    }

    public void fatalError(SAXParseException saxpe) throws SAXException {
        //parsing cannot continue
        throw saxpe;
    }
});
final Source source = new StreamSource(new File("my.xml"));
validator.validate(source);
if(!errors.isEmpty()) {
    //there are errors.
}

または、エラーをスローして、最初のエラーで検証を中止することができます

final Validator validator = schema.newValidator();
validator.setErrorHandler(new ErrorHandler() {

    public void warning(SAXParseException saxpe) throws SAXException {
        //ignore, log or whatever
    }

    public void error(SAXParseException saxpe) throws SAXException {
        throw saxpe;
    }

    public void fatalError(SAXParseException saxpe) throws SAXException {
        //parsing cannot continue
        throw saxpe;
    }
});
final Source source = new StreamSource(new File("my.xml"));
validator.validate(source);
于 2013-05-26T16:43:55.663 に答える