|
19 | 19 | import io.kubernetes.client.common.KubernetesObject; |
20 | 20 | import io.kubernetes.client.openapi.ApiException; |
21 | 21 | import java.io.File; |
| 22 | +import java.io.FileInputStream; |
22 | 23 | import java.io.IOException; |
23 | 24 | import java.net.URI; |
24 | 25 | import java.net.URL; |
|
34 | 35 | import java.util.concurrent.ConcurrentHashMap; |
35 | 36 | import java.util.jar.JarEntry; |
36 | 37 | import java.util.jar.JarFile; |
| 38 | +import java.util.jar.JarInputStream; |
| 39 | + |
37 | 40 | import org.apache.commons.lang3.tuple.MutablePair; |
38 | 41 | import org.apache.commons.lang3.tuple.Pair; |
39 | 42 | import org.slf4j.Logger; |
@@ -460,49 +463,55 @@ K getByV(V v) { |
460 | 463 | return vkMap.get(v); |
461 | 464 | } |
462 | 465 | } |
463 | | - |
464 | | - private static List<String> getClassNamesFromPackage(ClassLoader classLoader, String pkg) |
465 | | - throws IOException { |
466 | | - |
467 | | - URL packageURL; |
468 | | - ArrayList<String> names = new ArrayList<String>(); |
469 | | - |
| 466 | + private static List<String> getClassNamesFromPackage(ClassLoader classLoader, String pkg) throws IOException { |
| 467 | + ArrayList<String> names = new ArrayList<>(); |
470 | 468 | String packageName = pkg.replace(".", "/"); |
471 | | - packageURL = classLoader.getResource(packageName); |
| 469 | + URL packageURL = classLoader.getResource(packageName); |
472 | 470 |
|
473 | 471 | if (packageURL.getProtocol().equals("jar")) { |
474 | | - String jarFileName; |
475 | | - JarFile jf; |
476 | | - Enumeration<JarEntry> jarEntries; |
477 | | - String entryName; |
478 | | - jarFileName = URLDecoder.decode(packageURL.getFile(), "UTF-8"); |
479 | | - jarFileName = jarFileName.substring(5, jarFileName.indexOf("!")); |
480 | | - logger.info("Loading classes from jar {}", jarFileName); |
481 | | - jf = new JarFile(jarFileName); |
482 | | - jarEntries = jf.entries(); |
483 | | - while (jarEntries.hasMoreElements()) { |
484 | | - entryName = jarEntries.nextElement().getName(); |
485 | | - if (entryName.startsWith(packageName) && entryName.length() > packageName.length() + 5) { |
486 | | - entryName = entryName.substring(packageName.length() + 1, entryName.lastIndexOf('.')); |
487 | | - names.add(pkg + "." + entryName); |
488 | | - } |
489 | | - } |
490 | | - jf.close(); |
| 472 | + processJarPackage(packageURL, packageName, pkg, names); |
491 | 473 | } else { |
492 | | - URI uri = URI.create(packageURL.toString()); |
493 | | - File folder = new File(uri.getPath()); |
494 | | - File[] contenuti = folder.listFiles(); |
495 | | - if (contenuti == null) { |
496 | | - logger.warn("No files to load found in {}", folder.getPath()); |
497 | | - return names; |
498 | | - } |
499 | | - String entryName; |
500 | | - for (File actual : contenuti) { |
501 | | - entryName = actual.getName(); |
502 | | - entryName = entryName.substring(0, entryName.lastIndexOf('.')); |
503 | | - names.add(pkg + "." + entryName); |
504 | | - } |
| 474 | + processFilePackage(packageURL, pkg, names); |
505 | 475 | } |
506 | 476 | return names; |
507 | 477 | } |
| 478 | + |
| 479 | + private static void processJarPackage(URL packageURL, String packageName, String pkg, ArrayList<String> names) throws IOException { |
| 480 | + String jarFileName = URLDecoder.decode(packageURL.getFile(), "UTF-8"); |
| 481 | + jarFileName = jarFileName.substring(5, jarFileName.indexOf("!")); |
| 482 | + logger.info("Loading classes from jar {}", jarFileName); |
| 483 | + try (JarFile jf = new JarFile(jarFileName)) { |
| 484 | + Enumeration<JarEntry> jarEntries = jf.entries(); |
| 485 | + while (jarEntries.hasMoreElements()) { |
| 486 | + processJarEntry(jarEntries.nextElement(), packageName, pkg, names); |
| 487 | + } |
| 488 | + } |
| 489 | + } |
| 490 | + |
| 491 | + private static void processJarEntry(JarEntry jarEntry, String packageName, String pkg, ArrayList<String> names) { |
| 492 | + String entryName = jarEntry.getName(); |
| 493 | + if (entryName.startsWith(packageName) && entryName.length() > packageName.length() + 5) { |
| 494 | + entryName = entryName.substring(packageName.length() + 1, entryName.lastIndexOf('.')); |
| 495 | + names.add(pkg + "." + entryName); |
| 496 | + } |
| 497 | + } |
| 498 | + |
| 499 | + private static void processFilePackage(URL packageURL, String pkg, ArrayList<String> names) { |
| 500 | + URI uri = URI.create(packageURL.toString()); |
| 501 | + File folder = new File(uri.getPath()); |
| 502 | + File[] contenuti = folder.listFiles(); |
| 503 | + if (contenuti == null) { |
| 504 | + logger.warn("No files to load found in {}", folder.getPath()); |
| 505 | + return; |
| 506 | + } |
| 507 | + for (File actual : contenuti) { |
| 508 | + processFileEntry(actual, pkg, names); |
| 509 | + } |
| 510 | + } |
| 511 | + |
| 512 | + private static void processFileEntry(File actual, String pkg, ArrayList<String> names) { |
| 513 | + String entryName = actual.getName(); |
| 514 | + entryName = entryName.substring(0, entryName.lastIndexOf('.')); |
| 515 | + names.add(pkg + "." + entryName); |
| 516 | + } |
508 | 517 | } |
0 commit comments