{"record":{"id":"f987cbda15268f91","repo":"quarkusio/quarkus","slug":"ioexception-while-reading-message-files-wrapped","errorCode":null,"errorMessage":"IOException while reading message files (wrapped, no message)","messagePattern":"IOException while reading message files \\(wrapped, no message\\)","errorType":"exception","errorClass":"UncheckedIOException","httpStatus":null,"severity":"error","filePath":"extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/MessageBundleProcessor.java","lineNumber":1702,"sourceCode":"        archive.accept(tree -> {\n            final Path messagesPath = tree.getPath(MESSAGES);\n            if (messagesPath == null) {\n                return;\n            }\n            try (Stream<Path> files = Files.list(messagesPath)) {\n                Iterator<Path> iter = files.iterator();\n                while (iter.hasNext()) {\n                    Path filePath = iter.next();\n                    if (Files.isRegularFile(filePath)) {\n                        String messageFileName = messagesPath.relativize(filePath).toString();\n                        if (File.separatorChar != '/') {\n                            messageFileName = messageFileName.replace(File.separatorChar, '/');\n                        }\n                        messageFiles.add(new MessageFile(filePath, priority));\n                    }\n                }\n            } catch (IOException e) {\n                throw new UncheckedIOException(e);\n            }\n        });\n    }\n\n    private static class AppClassPredicate implements Predicate<String> {\n\n        private final Function<String, String> additionalClassNameSanitizer;\n\n        public AppClassPredicate() {\n            this(Function.identity());\n        }\n\n        public AppClassPredicate(Function<String, String> additionalClassNameSanitizer) {\n            this.additionalClassNameSanitizer = additionalClassNameSanitizer;\n        }\n\n        @Override\n        public boolean test(String name) {","sourceCodeStart":1684,"sourceCodeEnd":1720,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/MessageBundleProcessor.java#L1684-L1720","documentation":"While scanning the application classpath for message bundle files, an IOException occurs during directory walking; it is wrapped into UncheckedIOException and propagates as a build failure. The original IOException carries the underlying cause.","triggerScenarios":"Walking message template directories fails due to I/O errors: unreadable directories, stale file handles, filesystem errors, or files deleted/locked mid-scan (common in containers and CI).","commonSituations":"Docker/CI builds with permission problems on resource directories; network-mounted workspaces; antivirus or file sync (Dropbox/OneDrive) racing with the build.","solutions":["Fix filesystem permissions on the resource directories being scanned","Inspect the wrapped IOException cause (the UncheckedIOException message includes it) and address the underlying I/O problem","Exclude synced/remote directories from the build workspace; re-run the build"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// Pre-flight: ensure resource dirs readable\nFiles.walkFileTree(msgDir, new SimpleFileVisitor<>() {});","typeGuard":null,"tryCatchPattern":"try {\n    build();\n} catch (UncheckedIOException e) {\n    logger.error(\"IO failure reading message files\", e.getCause());\n    // fix permissions/sync then retry\n}","preventionTips":["Build from local filesystem, not network-synced folders","Check directory permissions in CI containers","Exclude volatile/synced dirs from resource scanning"],"tags":["io","filesystem","qute","message-bundle"],"backgroundTag":"ioexception-resource-read","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}