小编典典

XML验证不会释放xml文件

java

我正在尝试针对JAVA中的XSD文件验证XML文件。我的问题不是验证本身,因为这可以正常工作。我的问题是,验证后没有释放XMLfile。如果以后尝试访问该文件,则会收到错误“该文件已被其他资源使用”。

仅当验证失败时才会发生此错误(validator.validate(xmlSource)抛出了一个异常;)如果对文件进行了验证而没有问题,则该文件将被释放并且可以被其他人访问。

有想法吗?

public void validateXMLAgainstXSD(String xmlPath, String xsdPath) throws ParserException, IOException
  {
    Source xmlSource = null;
    File schemaFile = null;
    SchemaFactory schemaFactory = null;
    Schema schema = null;
    Validator validator = null;
    try 
    {
      schemaFile = new File(xsdPath);
      xmlSource = new StreamSource(new File(xmlPath));
      schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
      schema = schemaFactory.newSchema(schemaFile);
      validator = schema.newValidator();
      validator.validate(xmlSource);
    }
    catch (SAXException e)
    {
      //_log.error("ParsingDataFile: XML file could not be validated against XSD file: XML File=<", xmlFile.getAbsolutePath(), "> XSD file=<", xsdFile.getAbsolutePath(), ">. Exception=<", e, ">");
      xmlSource = null;
      schemaFile = null;
      schemaFactory = null;
      schema = null;
      validator.reset();
      validator = null;      
      //throw new ParserException(-1, ParserException.ERROR_CODE_XML_NOT_VALID, e);
    }
  }

阅读 257

收藏
2020-11-26

共1个答案

小编典典

我的建议是使用带有inputstream的构造函数创建StreamSource。

像那样

 InputStream inputStream = new FileInputStream(new File(xmlPath));
    source = new StreamSource(inputStream);

然后在您的方法中使用finally语句

finally{
inputStream.close();
}

但是请记住要确保在初始化流之前,先进行最终阻塞或通过关闭未初始化或打开的inputStream来捕获异常。

2020-11-26