gpt4 book ai didi

java - 在继续执行以下语句之前,如何等待 javax.xml.validation.Validator 完成验证?

转载 作者:行者123 更新时间:2023-12-02 07:00:07 25 4
gpt4 key购买 nike

嗯,标题说明了一切。

我知道这不是阻塞调用,但我需要等待它完成验证,然后再继续下一个语句。

我怎样才能做到这一点?

我的 ErrorHandler 类

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){

}


}

最佳答案

不确定“我知道这不是阻塞调用”是什么意思。是什么让你这么想?

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);

关于java - 在继续执行以下语句之前,如何等待 javax.xml.validation.Validator 完成验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com