Файл заблокирован после ошибки демаршалирования JAXB

У меня есть процесс JAXB marshall/unmarshall, который работает нормально, за исключением этого: иногда файлы, которые я должен развернуть, пусты или плохо отформатированы, поэтому unmarshall выдает исключение. Это нормально, но после этого исключения файл, который я не сортирую (исходный объект xml File java), блокируется. Я не могу его использовать.

Я заметил, что это пытается удалить или переименовать файл сразу после исключения unmarshall. Если никаких исключений не происходит, файлы можно использовать без проблем, как и должно быть.

Есть ли способ «разблокировать» эти файлы? Я думаю, что должен быть какой-то способ освободить, закрыть или освободить ресурсы контекста JAXB или объекта unmarshaller, которые заблокировали мой файл.

Заранее спасибо,

Дани


person Dani P.    schedule 12.09.2012    source источник
comment
Публикация вашего кода поможет нам лучше понять вашу проблему. Мне было бы интересно посмотреть, что вы делаете после того, как поймаете исключение   -  person Sujay    schedule 13.09.2012


Ответы (2)


Вы можете создать FileInputStream из своего файла, а затем разобрать его. Тогда у вас будет больший контроль над тем, что происходит при возникновении ошибки.

FileInputStream inputStram = new FileInputStream(file);
Foo foo = (Foo) Unmarshaller unmarshal(inputStream);
person bdoughan    schedule 12.09.2012

Мне не хватало освобождения ресурсов (закрытие потоков и т. д.) в блоке finally. Нубская ошибка многолетней давности! Спасибо!

person Dani P.    schedule 22.05.2018