BCELClassFileLoader1public class BCELClassFileLoader1 extends Object implements ClassFileLoaderYet another factory for {@link BCELClassFile}. This is not a public class, as
I expect users to use {@link ClassFileLoaderFactory} interface. It differs
from {@link BCELClassFileLoader} in the sense that it loads classfiles using
bcel ClassPath class. Known Issues: Currently it ignores any INDEX
information if available in a Jar file. This is because BCEL provided class
ClassPath does not understand INDEX info. We should add this feature in
future. |
Fields Summary |
---|
private static String | resourceBundleName | private static Logger | logger | private com.sun.org.apache.bcel.internal.util.ClassPath | cp |
Constructors Summary |
---|
public BCELClassFileLoader1(String classPath)Creates a new instance of BCELClassFileLoader User should use {link
ClassFileLoaderFactory} to create new instance of a loader.
logger.entering("BCELClassFileLoader1", "<init>(String)", classPath); // NOI18N
cp = new ClassPath(classPath);
|
Methods Summary |
---|
public ClassFile | load(java.lang.String externalClassName)
logger.entering("BCELClassFileLoader1", "load", externalClassName); // NOI18N
//BCEL library expects me to pass in internal form.
String internalClassName = externalClassName.replace('.", '/");
//don't call getInputStream as it first tries to load using the
// getClass().getClassLoader().getResourceAsStream()
//return cp.getInputStream(extClassName);
InputStream is = cp.getClassFile(internalClassName, ".class") // NOI18N
.getInputStream();
try {
ClassFile cf = new BCELClassFile(is, internalClassName + ".class"); // NOI18N
matchClassSignature(cf, externalClassName);
return cf;
} finally {
is.close();
}
| private void | matchClassSignature(ClassFile cf, java.lang.String externalClassName)
String nameOfLoadedClass = cf.getName();
if (!nameOfLoadedClass.equals(externalClassName)) {
throw new IOException(
externalClassName + ".class represents " +
cf.getName() +
". Perhaps your package name is incorrect or you passed the" +
" name using internal form instead of using external form.");
}
|
|