[英]Java - How to catch all exceptions/errors from xml validating file
我想從我的驗證 xml 中獲取所有錯誤。 實際上我的方法在捕獲第一個錯誤后停止:
public List<String> validation(File file) {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
List<String> statut = new ArrayList<>();
try {
assert xsd != null;
Schema schema = schemaFactory.newSchema(xsd);
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File(file.getPath() + file.getname())));
statut.add(file.getname() + " is valid");
} catch (SAXException | IOException e) {
statut.add(file.getname() + " not valid :\n");
statut.add(e.getMessage());
}
return statut;
}
如何檢測到所有異常?
您可以使用Validator.setErrorHandler(ErrorHandler)
來注冊您自己的錯誤處理程序。
public abstract void setErrorHandler(ErrorHandler errorHandler)
設置
ErrorHandler
以接收在validate
方法調用期間遇到的錯誤。 錯誤處理程序可用於在驗證期間自定義錯誤處理過程。 當設置了ErrorHandler
時,驗證過程中發現的錯誤將首先發送到 ErrorHandler。錯誤處理程序可以通過從處理程序中拋出
SAXException
來立即中止進一步的驗證。 或者例如它可以在屏幕上打印錯誤並嘗試通過從ErrorHandler
正常返回來繼續驗證如果從
ErrorHandler
拋出任何Throwable
,則驗證方法的調用者將被拋出相同的Throwable
對象。不允許驗證器在未首先將其報告給
ErrorHandler
情況下拋出SAXException
。
在您自己的錯誤處理程序中,您可以聚合異常,然后在驗證后根據需要/想要的進行處理。
具體來說,它允許您在遇到錯誤時繼續驗證,使您能夠在處理程序中捕獲所有錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.