FileDocCategorySizeDatePackage
BCELClassFileLoader1.javaAPI DocGlassfish v2 API5466Fri May 04 22:33:24 BST 2007com.sun.enterprise.tools.verifier.apiscan.classfile

BCELClassFileLoader1

public class BCELClassFileLoader1 extends Object implements ClassFileLoader
Yet 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.
author
Sanjeeb.Sahoo@Sun.COM

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.

param
classPath represents the search path that is used by this loader. Please note that, it does not read the manifest entries for any jar file specified in the classpath, so if the jar files have optional package dependency, that must be taken care of in the classpath by ther caller.


                                                                                                                                                  
       
        logger.entering("BCELClassFileLoader1", "<init>(String)", classPath); // NOI18N
        cp = new ClassPath(classPath);
    
Methods Summary
public ClassFileload(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 voidmatchClassSignature(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.");
        }