Validation 在进行解组时,如何使用格式不好的XML进行验证?
我有一个解组器和一个MySchema.xsd文件Validation 在进行解组时,如何使用格式不好的XML进行验证?,validation,jaxb,saxparser,well-formed,Validation,Jaxb,Saxparser,Well Formed,我有一个解组器和一个MySchema.xsd文件 StreamSource sources = new StreamSource(getClass().getClassLoader().getResourceAsStream("/xmlValidation.xsd")); SchemaFactory sf = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI ); unmarshaller.setS
StreamSource sources = new StreamSource(getClass().getClassLoader().getResourceAsStream("/xmlValidation.xsd"));
SchemaFactory sf = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
unmarshaller.setSchema(sf.newSchema(sources));
并调用unmarshaller.setEventHandler()函数,通过以下方式指定自定义验证事件处理程序(基本上格式化错误提示字符串):
final String errorString = new String();
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent validationevent) {
if(validationevent.getSeverity()!= ValidationEvent.WARNING){
errorString.format( "Line:Col[" + validationevent.getLocator().getLineNumber()
+ ":" + validationevent.getLocator().getColumnNumber()
+ "]:" + validationevent.getMessage());
return false;
}
return true;
}
});
上面的代码似乎工作正常(当输入字符串被验证时,我可以得到java对象,并且错误提示字符串被格式化为例外)
问题是,当输入xml的格式不好时,它还会抛出SaxParseException
提前谢谢。
安德鲁K,我把事情搞砸了,然后遇到了这个问题。 现在我明白了。如果我错了,请指出我。下面是我在javadoc中找到的内容,并对我的项目进行了测试: 当解组器正在解组时,javax.xml.bind.ValidationEventHandler可以使用给定的模式约束处理约束错误
unmarshaller.unmarshal(xmlInputStream);
如果发生错误,则在解组过程中将调用ValidationEventHandler。
如果xmlInputStream格式不正确,将抛出SAXEception。
我也找不到捕获sax解析器抛出的SAXException的方法,所以我猜在解组期间使用验证不能与格式不正确的xml字符串一起使用
我使用javax.xml.validation.Validator来验证xml字符串的格式是否良好,是否受约束
jaxbValidator.validate(xmlSource);
上述代码将引发SAXException。
如果没有抛出异常,则将xml字符串解组到对象中。K,我搞糟了一些事情,并遇到了这个问题。 现在我明白了。如果我错了,请指出我。下面是我在javadoc中找到的内容,并对我的项目进行了测试: 当解组器正在解组时,javax.xml.bind.ValidationEventHandler可以使用给定的模式约束处理约束错误
unmarshaller.unmarshal(xmlInputStream);
如果发生错误,则在解组过程中将调用ValidationEventHandler。
如果xmlInputStream格式不正确,将抛出SAXEception。
我也找不到捕获sax解析器抛出的SAXException的方法,所以我猜在解组期间使用验证不能与格式不正确的xml字符串一起使用
我使用javax.xml.validation.Validator来验证xml字符串的格式是否良好,是否受约束
jaxbValidator.validate(xmlSource);
上述代码将引发SAXException。
如果没有引发异常,则将xml字符串解组到对象中。格式良好与xml语法本身有关,而不是有效地写入xml架构: