如何在使用 javax.xml.validation.Validator 验证 xml 时传播 SAXExcetion

问题描述 投票:0回答:1
  public boolean validateXML() throws Exception {
        sepaRTLogger.info("Entered validateXML()");
        Schema schema = listOfXSDs.get(xmlVersion);
        sepaRTLogger.debug("matched schema:::" + schema);
        System.out.println("matched schema:::" + schema);
        
        try {
            Validator validator = schema.newValidator();
            validator.validate((Source) (new StreamSource(XMLStreamForValidation)));
        } catch (Exception e){
            if(e instanceof IOException) {
                sepaRTLogger.error("IOException error:",e);
            }
            if(e instanceof SAXException){
                sepaRTLogger.error("SAXException error:",e);
                retriggerException.reThrow(msgTagID, null, new SAXException(), e.getMessage(), "TFLT101");
            }
            throw new Exception( e);
        }finally{
            XMLStreamForValidation.close();
        }

        return true;
    }
  1. sepaRTLogger.error("SAXException 错误:",e);
  2. retriggerException.reThrow(msgTagID, null, new SAXException(), e.getMessage(), "TFLT101");

第 1 行打印错误,但异常在第 2 行变为空。因此无法传播此异常。

xml validation exception propagation rt.jar
1个回答
0
投票
catch (Throwable e) {
    throw (RuntimeException) e;
}

实际上,catch(Throwable)会捕获所有内容,包括错误和检查异常(SAXException)。另外,检查异常可以放在 try...catch 块中,其中 RuntimeException 有一个 Exception 超类,以便它可以传播。

© www.soinside.com 2019 - 2024. All rights reserved.