You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2006/12/01 19:23:29 UTC
svn commit: r481332 -
/geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/ClassFinder.java
Author: dblevins
Date: Fri Dec 1 10:23:28 2006
New Revision: 481332
URL: http://svn.apache.org/viewvc?view=rev&rev=481332
Log:
Fix the classfinder so that it doesn't need all urls to start with "jar" when they point to jars
Modified:
geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/ClassFinder.java
Modified: geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/ClassFinder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/ClassFinder.java?view=diff&rev=481332&r1=481331&r2=481332
==============================================================================
--- geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/ClassFinder.java (original)
+++ geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/ClassFinder.java Fri Dec 1 10:23:28 2006
@@ -31,6 +31,9 @@
import java.lang.reflect.Method;
import java.lang.reflect.AnnotatedElement;
import java.net.URL;
+import java.net.MalformedURLException;
+import java.net.URLConnection;
+import java.net.JarURLConnection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -119,7 +122,15 @@
if (location.getProtocol().equals("jar")) {
classNames.addAll(jar(location));
} else if (location.getProtocol().equals("file")) {
- classNames.addAll(file(location));
+ try {
+ // See if it's actually a jar
+ URL jarUrl = new URL("jar", "", location.toExternalForm() + "!/");
+ JarURLConnection juc = (JarURLConnection) jarUrl.openConnection();
+ juc.getJarFile();
+ classNames.addAll(jar(jarUrl));
+ } catch (IOException e) {
+ classNames.addAll(file(location));
+ }
}
} catch (Exception e) {
e.printStackTrace();
@@ -382,12 +393,22 @@
}
private List<String> jar(URL location) throws IOException {
- List<String> classNames = new ArrayList();
-
- String jarPath = location.getFile().replaceFirst("./META-INF", "");
+ String jarPath = location.getFile();
+ if (jarPath.indexOf("!") > -1){
+ jarPath = jarPath.substring(0, jarPath.indexOf("!"));
+ }
URL url = new URL(jarPath);
InputStream in = url.openStream();
- JarInputStream jarStream = new JarInputStream(in);
+ try {
+ JarInputStream jarStream = new JarInputStream(in);
+ return jar(jarStream);
+ } finally {
+ in.close();
+ }
+ }
+
+ private List<String> jar(JarInputStream jarStream) throws IOException {
+ List<String> classNames = new ArrayList();
JarEntry entry;
while ((entry = jarStream.getNextJarEntry()) != null) {