Rod*_*igo 6 java xml schema xsd jaxb
我有一些带有JAXB注释的类,我创建了一些实例,我需要根据我的XSD文件验证它们.当对象无效时,我应该能够获得有关错误的详细信息.
到目前为止,我还没有运气,我知道这个类ValidationEventHandler,但显然我可以将它与Unmarshaller类一起使用,问题是我必须验证对象而不是原始XML.
我有这个代码:
MyClass myObject = new MyClass();
JAXBContext jaxbContext = JAXBContext.newInstance("x.y.z");
JAXBSource jaxbSource = new JAXBSource(jaxbContext, myObject);
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaFile = new StreamSource(getClass().getClassLoader()
.getResourceAsStream("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(jaxbSource);
Run Code Online (Sandbox Code Playgroud)
这段代码可以工作,它将验证对象并在消息中引发异常,如下所示:
cvc-pattern-valid:对于类型为'id'的模式'\ d {10}',值'12345678901'不是facet-valid.
问题是我需要特定的细节,使用类似于我必须解析所有消息的字符串.
您可以设置一个实例ErrorHandler
来Validator
捕获单个错误:
Validator validator = schema.newValidator();
validator.setErrorHandler(new MyErrorHandler());
validator.validate(source);
Run Code Online (Sandbox Code Playgroud)
我的错误处理程序
下面是该接口的示例实现ErrorHandler
。如果您不重新抛出异常,验证将继续。
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class MyErrorHandler implements ErrorHandler {
public void warning(SAXParseException exception) throws SAXException {
System.out.println("\nWARNING");
exception.printStackTrace();
}
public void error(SAXParseException exception) throws SAXException {
System.out.println("\nERROR");
exception.printStackTrace();
}
public void fatalError(SAXParseException exception) throws SAXException {
System.out.println("\nFATAL ERROR");
exception.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
了解更多信息
归档时间: |
|
查看次数: |
4905 次 |
最近记录: |