Мы проверяем XML-файлы, и в зависимости от результата проверки мы должны переместить файл в другую папку.
Когда XML действителен, валидатор возвращает значение, и мы можем без проблем переместить файл. То же самое происходит, когда XML недействителен в соответствии со схемой.
Однако, если XML сформирован неправильно, валидатор выдает исключение, и когда мы пытаемся переместить файл, происходит сбой. Мы полагаем, что где-то в памяти все еще есть дескриптор, который удерживает файл. Мы попытались поместить System.gc() перед перемещением файла, и это решило проблему, но мы не можем использовать System.gc()
в качестве решения.
Код выглядит так. У нас есть объект File, из которого мы создаем StreamSource. Затем StreamSource передается валидатору. Когда XML неправильно сформирован, он генерирует исключение SAXException. При обработке исключений мы используем метод .renameTo() для перемещения файла.
sc = new StreamSource(xmlFile);
validator.validate(sc);
В улове мы пытались
validator.reset();
validator=null;
sc=null;
но все же .renameTo()
не может переместить файл. Если мы поставим System.gc()
в ловушку, то ход будет успешным.
Может кто-нибудь просветить меня, как отсортировать это без System.gc()?
Мы используем JAXP и saxon-9.1.0.8 в качестве парсера.
Большое спасибо