У нас есть приложение, использующее update4j, и мы получили сообщение об ошибке от пользователя Windows со следующей трассировкой стека:
INFO [main] (OurMain.java:70) - Fatal error details: A problem occurred during the update
com.example.updater.RuntimeFatalError: A problem occured during the update
at com.example.updater.Updater.update(Updater.java:72)
...
Caused by: com.example.updater.RuntimeFatalError: A problem occurred during the update
at com.example.updater.UpdateHandler.failed(UpdateHandler.java:78)
at org.update4j.Configuration.updateImpl(Configuration.java:1048)
at org.update4j.Configuration.update(Configuration.java:861)
at org.update4j.Configuration.update(Configuration.java:845)
at com.example.updater.Updater.update(Updater.java:70)
... 1 common frames omitted
Caused by: java.io.IOException: Adathiba (CRC)
at java.base/sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at java.base/sun.nio.ch.FileDispatcherImpl.read(FileDispatcherImpl.java:54)
at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:245)
at java.base/sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:223)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
at org.update4j.util.FileUtils.getChecksum(FileUtils.java:57)
at org.update4j.FileMetadata.requiresUpdate(FileMetadata.java:371)
at org.update4j.Configuration.updateImpl(Configuration.java:934)
... 4 common frames omitted
(я думаю, что сообщение "Adathiba (CR C)" будет «Ошибка данных (CR C)» с языком Engli sh.)
Если я прав, update4j пытается прочитать файл jar с диска здесь.
Пользователь удалил наше приложение и полностью переустановил его (что решило проблему), но было бы здорово воспроизвести ошибку и исправить ее, так как мы получили еще несколько похожих сообщений об ошибках (к сожалению, с еще меньшей детализацией).
Я попытался создать неверный входной файл zip / jar, но update4j обнаружил, что его контрольная сумма не совпадает с контрольной суммой в его файле XML, и загрузил и заменил файл (как и ожидалось).
Любая ссылка на соответствующий источник OpenJDK (13, 14) можно только приветствовать. Я проверил FileDispatcherImpl.java
и FileDispatcherImpl.c
, но я не нашел ничего, связанного с проверками или ошибками CR C.
Итак, вот мои вопросы:
- В каком случае может ли JVM генерировать этот тип
IOException
? - Указывает ли это на поврежденный файл ZIP / JAR? Если да, то как создать файл, вызывающий аналогичное исключение (для тестирования)?
- Указывает ли это на неисправный жесткий диск (и ошибка произошла от ОС)?