in hawtio-util/src/main/java/io/hawt/util/introspect/support/ClassScanner.java [440:472]
protected void processJar(ClassResource classResource, Set<Class<?>> classes, String filter, Integer limit) {
URL resource = classResource.getResource();
String packageName = classResource.getPackageName();
String relativePath = getPackageRelativePath(packageName);
String jarPath = getJarPath(resource);
JarFile jarFile;
try {
jarFile = new JarFile(jarPath);
} catch (IOException e) {
LOG.debug("IOException reading JAR '" + jarPath + ". Reason: " + e, e);
return;
}
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements() && withinLimit(limit, classes)) {
JarEntry entry = entries.nextElement();
String entryName = entry.getName();
String className = null;
if (entryName.endsWith(".class") && entryName.startsWith(relativePath) && entryName.length() > (relativePath.length() + 1)) {
className = entryName.replace('/', '.').replace('\\', '.').replace(".class", "");
}
Class<?> aClass = tryFindClass(className, filter);
if (aClass != null) {
classes.add(aClass);
}
}
// let's not leak resources
try {
jarFile.close();
} catch (IOException e) {
LOG.debug("IOException closing JAR '" + jarPath + "'. Reason: " + e, e);
}
}