protected transient boolean scanFieldAnnotations = true;
protected transient String[] ignoredPackages = {"javax", "java", "sun", "com.sun", "javassist"};
protected transient String[] scanPackages = null;
+ protected transient boolean ignoreBadURLs = false;
public class CrossReferenceException extends Exception
{
* This method will cross reference annotations in the annotation index with any meta-annotations that they have
* and create additional entries as needed. For example:
*
- * @HttpMethod("GET") public @interface GET {}
+ * <pre>
+ * @ HttpMethod("GET") public @interface GET {}
+ * </pre>
* <p/>
* The HttpMethod index will have additional classes added to it for any classes annotated with annotations that
* have the HttpMethod meta-annotation.
* a class's implemented interfaces. The cross references will be added to the annotationIndex and
* classIndex indexes
*
- * @param ignoredPackages var arg list of packages to ignore
* @throws CrossReferenceException an Exception thrown if referenced interfaces haven't been scanned
*/
public void crossReferenceImplementedInterfaces() throws CrossReferenceException
this.scanFieldAnnotations = scanFieldAnnotations;
}
-
- /**
+ /**
+ * Whether or not you want AnnotationDB to ignore bad URLs passed to scanArchives.
+ * Default is to throw an IOException.
+ *
+ * @param ignoreBadURLs
+ */
+ public void setIgnoreBadURLs(boolean ignoreBadURLs)
+ {
+ this.ignoreBadURLs = ignoreBadURLs;
+ }
+
+ /**
* Scan a url that represents an "archive" this is a classpath directory or jar file
*
* @param urls variable list of URLs to scan as archives
}
};
- StreamIterator it = IteratorFactory.create(url, filter);
-
- InputStream stream;
- while ((stream = it.next()) != null) scanClass(stream);
+ try
+ {
+ StreamIterator it = IteratorFactory.create(url, filter);
+
+ InputStream stream;
+ while ((stream = it.next()) != null) scanClass(stream);
+ }
+ catch (IOException e)
+ {
+ if (ignoreBadURLs)
+ continue;
+ else
+ throw e;
+ }
}
}
import java.io.File;
import java.io.IOException;
+import java.net.URISyntaxException;
import java.net.URL;
/**
public StreamIterator create(URL url, Filter filter) throws IOException
{
- File f = new File(url.getPath());
- if (f.isDirectory())
+ // See http://weblogs.java.net/blog/2007/04/25/how-convert-javaneturl-javaiofile
+ File f;
+ try
+ {
+ f = new File(url.toURI());
+ }
+ catch (URISyntaxException e)
+ {
+ f = new File(url.getPath());
+ }
+
+ if (f.isDirectory())
{
return new FileIterator(f, filter);
}