You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ch...@apache.org on 2013/03/29 21:34:30 UTC
svn commit: r1462635 -
/commons/sandbox/classscan/trunk/api/src/main/java/org/apache/commons/classscan/builtin/JarClassPathElement.java
Author: chas
Date: Fri Mar 29 20:34:30 2013
New Revision: 1462635
URL: http://svn.apache.org/r1462635
Log:
Fix NullPointerException occuring after encountering non-jar file in classpath
Modified:
commons/sandbox/classscan/trunk/api/src/main/java/org/apache/commons/classscan/builtin/JarClassPathElement.java
Modified: commons/sandbox/classscan/trunk/api/src/main/java/org/apache/commons/classscan/builtin/JarClassPathElement.java
URL: http://svn.apache.org/viewvc/commons/sandbox/classscan/trunk/api/src/main/java/org/apache/commons/classscan/builtin/JarClassPathElement.java?rev=1462635&r1=1462634&r2=1462635&view=diff
==============================================================================
--- commons/sandbox/classscan/trunk/api/src/main/java/org/apache/commons/classscan/builtin/JarClassPathElement.java (original)
+++ commons/sandbox/classscan/trunk/api/src/main/java/org/apache/commons/classscan/builtin/JarClassPathElement.java Fri Mar 29 20:34:30 2013
@@ -21,6 +21,7 @@ import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
@@ -43,18 +44,24 @@ public class JarClassPathElement impleme
final private URL location;
private URL[] classPathLocations;
-
+
public JarClassPathElement(URL location) {
this.location = location;
}
@Override
- public Iterator<ClassFile> iterator() {
- final JarFile jarFile= getJarFile();
+ public Iterator<ClassFile> iterator() {
+ final JarFile jarFile= getJarFile();
+ if(jarFile == null) {
+ List<ClassFile> emptyList= Collections.emptyList();
+ return emptyList.iterator();
+ }
+
final Enumeration<JarEntry> jarEntries = jarFile.entries();
-
- return new ClassFileIterator() {
- ClassFile getNext() {
+
+ return new ClassFileIterator() {
+ @Override
+ ClassFile getNext() {
while(jarEntries.hasMoreElements()) {
JarClassFile jcf= new JarClassFile(jarFile, jarEntries.nextElement());
if(jcf.getClassName()!=null) {
@@ -71,7 +78,7 @@ public class JarClassPathElement impleme
};
}
- private JarFile getJarFile() {
+ private JarFile getJarFile() {
try {
JarURLConnection conn = (JarURLConnection) location.openConnection();
JarFile jf= conn.getJarFile();
@@ -89,7 +96,7 @@ public class JarClassPathElement impleme
if(manifest == null) {
return;
}
-
+
URI resolveLocation;
try {
resolveLocation = location.toURI();
@@ -97,13 +104,13 @@ public class JarClassPathElement impleme
logger.warn("Could not create URI out of {}", location);
return;
}
-
+
Attributes attributes = manifest.getMainAttributes();
String classPath = attributes.getValue(Attributes.Name.CLASS_PATH);
if (classPath == null) {
return;
}
-
+
List<URL> newLocations = new ArrayList<URL>();
for (String pathElement : PATH_SPLITTER.split(classPath)) {
URI resolvedLocation = resolveLocation.resolve(pathElement);
@@ -118,7 +125,7 @@ public class JarClassPathElement impleme
}
private static Pattern PATH_SPLITTER = Pattern.compile("\\s+");
-
+
@Override
public String getLocation() {
return location.toExternalForm();