Skip to content

Commit 04ff2f2

Browse files
authored
Merge pull request #3814 from ryanjbaxter/cherry-pick-fat-jar-fix-to-release-19
Cherry Pick #2952 To Release 19
2 parents 9c885b7 + b832a27 commit 04ff2f2

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

util/src/main/java/io/kubernetes/client/util/ModelMapper.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.io.File;
2323

2424
import java.io.IOException;
25+
import java.net.JarURLConnection;
2526
import java.net.URI;
2627
import java.net.URL;
2728
import java.net.URLDecoder;
@@ -485,14 +486,26 @@ private static List<String> getClassNamesFromPackage(ClassLoader classLoader, St
485486

486487
private static void processJarPackage(URL packageURL, String packageName, String pkg, ArrayList<String> names) throws IOException {
487488
String jarFileName = URLDecoder.decode(packageURL.getFile(), "UTF-8");
488-
jarFileName = jarFileName.substring(5, jarFileName.indexOf("!"));
489+
JarFile jf = null;
490+
// jar: client in repository; nested: client in a fat jar
491+
if (jarFileName.startsWith("jar:") || jarFileName.startsWith("nested:")) {
492+
jf = ((JarURLConnection) packageURL.openConnection()).getJarFile();
493+
}
494+
// file: client is a file in target (unit test)
495+
if (jarFileName.startsWith("file:") ) {
496+
jarFileName = jarFileName.substring(5, jarFileName.indexOf("!"));
497+
jf = new JarFile(jarFileName);
498+
}
499+
if (jf == null) {
500+
logger.error("Loading classes from jar with error packageURL: {}", jarFileName);
501+
return;
502+
}
489503
logger.info("Loading classes from jar {}", jarFileName);
490-
try (JarFile jf = new JarFile(jarFileName)) {
491-
Enumeration<JarEntry> jarEntries = jf.entries();
492-
while (jarEntries.hasMoreElements()) {
493-
processJarEntry(jarEntries.nextElement(), packageName, pkg, names);
494-
}
504+
Enumeration<JarEntry> jarEntries = jf.entries();
505+
while (jarEntries.hasMoreElements()) {
506+
processJarEntry(jarEntries.nextElement(), packageName, pkg, names);
495507
}
508+
jf.close();
496509
}
497510

498511
private static void processJarEntry(JarEntry jarEntry, String packageName, String pkg, ArrayList<String> names) {

0 commit comments

Comments
 (0)