You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-user@jakarta.apache.org by "Koduru, Rajendra Kumar Reddy" <ra...@sap.com> on 2004/12/20 20:09:52 UTC
Hi! adding a method to already existing class
Hi
i am trying to add a method to already existing class and update the
class file with the method.
My code is follows
import java.io.*;
import org.apache.bcel.*;
import org.apache.bcel.classfile.*;
import org.apache.bcel.generic.*;
public class addMethodBCEL{
public static void main( String args[] ) throws IOException {
ClassParser cparse = new
ClassParser("HelloBCEL.class");
JavaClass clazz = cparse.parse();
ClassGen cg = new ClassGen(clazz);
ConstantPool cp1 = clazz.getConstantPool();
ConstantPoolGen cp = new ConstantPoolGen(cp1);
InstructionFactory factory = new
InstructionFactory(cp);
Method addmeth = addMethod(clazz,cp,factory);
cg.addMethod(addmeth);
try {
cg.getJavaClass().setConstantPool(cg.getConstantPool().getFinalConstantP
ool()); // i think it is wrong here..
cg.getJavaClass().dump(clazz.getClassName() +
".class");
}catch(Exception e){System.out.println(e);}
}
public static Method addMethod(JavaClass clazz, ConstantPoolGen
cp, InstructionFactory factory){
InstructionList il1 = new InstructionList();
MethodGen mg = new
MethodGen(Constants.ACC_STATIC | Constants.ACC_PUBLIC, Type.INT,
Type.NO_ARGS, new String[]{},"getMarks",clazz.getClassName(), il1, cp) ;
il1.append(new PUSH(cp,10));
il1.append(factory.createReturn(Type.INT));
mg.setMaxStack();
return mg.getMethod();
}
}
and when i am trying to execute HelloBCEL.class, the class that is
updated i the above code, it gives me an exception stating
Exception in thread "main" java.lang.ClassFormatError: HelloBCEL
(Illegal consta
nt pool index)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
could you please let me know, where i am wrong.
Hope that you can help me in this regard.
Thank you
Reddy
---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-user-help@jakarta.apache.org