From 30757b8b3a2c65030ed24898fa6eb7fb5c04761e Mon Sep 17 00:00:00 2001 From: Sylwester Lachiewicz Date: Fri, 10 Oct 2025 21:29:51 +0200 Subject: [PATCH 1/2] Fix MalformedInputException on Windows with Java 8 due to charset mismatch in stale data cache Changed StaleHelper to always save in UTF-8 instead of platform-dependent default charset. This ensures consistency with AbstractJavadocMojo.isUpToDate() which reads the stale data file using UTF-8. Previously on Windows with Java 8: - First run: file written with Cp1252 (default charset) - Second run: file read with UTF-8, causing MalformedInputException --- .../maven/plugins/javadoc/StaleHelper.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java b/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java index 6658a7e20..ae5ef2b2e 100644 --- a/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java +++ b/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java @@ -20,8 +20,6 @@ import java.io.File; import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; @@ -31,29 +29,15 @@ import java.util.List; import org.apache.maven.reporting.MavenReportException; -import org.codehaus.plexus.languages.java.version.JavaVersion; import org.codehaus.plexus.util.cli.Commandline; +import static java.nio.charset.StandardCharsets.UTF_8; + /** * Helper class to compute and write data used to detect a * stale javadoc. */ public class StaleHelper { - - /** - * Compute the encoding of the stale javadoc - * - * @return the encoding of the stale data - */ - private static Charset getDataCharset() { - if (JavaVersion.JAVA_SPECIFICATION_VERSION.isAtLeast("9") - && JavaVersion.JAVA_SPECIFICATION_VERSION.isBefore("12")) { - return StandardCharsets.UTF_8; - } else { - return Charset.defaultCharset(); - } - } - /** * Compute the data used to detect a stale javadoc * @@ -72,7 +56,7 @@ public static List getStaleData(Commandline cmd) throws MavenReportExcep for (String arg : args) { if (arg.startsWith("@")) { String name = arg.substring(1); - options.addAll(Files.readAllLines(dir.resolve(name), getDataCharset())); + options.addAll(Files.readAllLines(dir.resolve(name), UTF_8)); ignored.add(name); } } @@ -123,7 +107,7 @@ public static void writeStaleData(Commandline cmd, Path path) throws MavenReport try { List curdata = getStaleData(cmd); Files.createDirectories(path.getParent()); - Files.write(path, curdata, getDataCharset()); + Files.write(path, curdata, UTF_8); } catch (IOException e) { throw new MavenReportException("Error checking stale data", e); } From 42fe29987126a8628d46b69a0bfbcbc396e1f810 Mon Sep 17 00:00:00 2001 From: Sylwester Lachiewicz Date: Fri, 10 Oct 2025 23:38:20 +0200 Subject: [PATCH 2/2] wip --- .../org/apache/maven/plugins/javadoc/StaleHelper.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java b/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java index ae5ef2b2e..4cf8187c9 100644 --- a/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java +++ b/src/main/java/org/apache/maven/plugins/javadoc/StaleHelper.java @@ -20,6 +20,8 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.CharacterCodingException; +import java.nio.charset.Charset; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; @@ -56,8 +58,12 @@ public static List getStaleData(Commandline cmd) throws MavenReportExcep for (String arg : args) { if (arg.startsWith("@")) { String name = arg.substring(1); - options.addAll(Files.readAllLines(dir.resolve(name), UTF_8)); ignored.add(name); + try { + options.addAll(Files.readAllLines(dir.resolve(name), UTF_8)); + } catch (CharacterCodingException e) { + options.addAll(Files.readAllLines(dir.resolve(name), Charset.defaultCharset())); + } } } List state = new ArrayList<>(options);