From 5e6de96131d84d681a3c7fa202bd0c7d673f964b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:26:41 +0000 Subject: [PATCH 1/2] Initial plan From 23bb7ee156465b4890cd01043ec5638e642782a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Apr 2026 20:32:47 +0000 Subject: [PATCH 2/2] Fix ModelMapper.processJarPackage breaking on paths containing '+' Agent-Logs-Url: https://github.com/kubernetes-client/java/sessions/251a25c1-d66c-4929-94c7-9fb3323acc89 Co-authored-by: brendandburns <5751682+brendandburns@users.noreply.github.com> --- .../io/kubernetes/client/util/ModelMapper.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/util/src/main/java/io/kubernetes/client/util/ModelMapper.java b/util/src/main/java/io/kubernetes/client/util/ModelMapper.java index cdc0edb197..6bb8294e4a 100644 --- a/util/src/main/java/io/kubernetes/client/util/ModelMapper.java +++ b/util/src/main/java/io/kubernetes/client/util/ModelMapper.java @@ -26,8 +26,6 @@ import java.net.JarURLConnection; import java.net.URI; import java.net.URL; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.ArrayList; import java.util.Enumeration; @@ -493,7 +491,7 @@ private static List getClassNamesFromPackage(ClassLoader classLoader, St } private static void processJarPackage(URL packageURL, String packageName, String pkg, ArrayList names) throws IOException { - String jarFileName = URLDecoder.decode(packageURL.getFile(), StandardCharsets.UTF_8); + String jarFileName = packageURL.getFile(); JarFile jf = null; // jar: client in repository; nested: client in a fat jar if (jarFileName.startsWith("jar:") || jarFileName.startsWith("nested:")) { @@ -501,8 +499,15 @@ private static void processJarPackage(URL packageURL, String packageName, String } // file: client is a file in target (unit test) if (jarFileName.startsWith("file:") ) { - jarFileName = jarFileName.substring(5, jarFileName.indexOf("!")); - jf = new JarFile(jarFileName); + int bangIndex = jarFileName.indexOf("!"); + if (bangIndex < 0) { + logger.error("Loading classes from jar with error packageURL: {}", jarFileName); + return; + } + // Use URI.create to properly decode percent-encoded characters without converting + to space + // (URLDecoder.decode incorrectly converts + to space, breaking paths that contain literal +) + String filePart = jarFileName.substring(0, bangIndex); + jf = new JarFile(URI.create(filePart).getPath()); } if (jf == null) { logger.error("Loading classes from jar with error packageURL: {}", jarFileName);