簡體   English   中英

Java - 如何從 xml 驗證文件中捕獲所有異常/錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM