Saturday 15 May 2010

ASM to create java class -



ASM to create java class -

i trying utilize asm create simple class file

i have tried follows:

classprinter c = new classprinter(); classreader cr = new classreader(new fileinputstream("path/to/class")); classwriter cw = new classwriter(classwriter.compute_maxs|classwriter.compute_frames); cw.newclass("myclass"); cw.newfield("owner", "value", "i"); cr.accept(c, 0); for(string s : c.values){ system.out.println(s); } classreader writerreader = new classreader(new fileinputstream("c:\\generated.class")); writerreader.accept(cw,0);

however there arrayindexoutofboundsexception when creating classreader.

c:\generated.class of empty file.

classprinter visitor traverses entities , prints them using system.out.println

how can done?

i need able create classes scratch not append existing ones.

dependencies:

<dependency> <groupid>org.ow2.asm</groupid> <artifactid>asm</artifactid> <version>5.0.3</version> </dependency>

you seem never write file "c:\generated.class"

what cr , c in code fragment?

looks missing before open reader:

string filename = "c:\\generated.class"; // generate class system.out.println("generating myclass"); classwriter cw = new classwriter(classwriter.compute_maxs|classwriter.compute_frames); cw.newclass("myclass"); cw.newfield("owner", "value", "i"); // print generated class stdio see generated expected system.out.println("generated:"); classprinter cp = new classprinter(); cp.accept(cw, 0); // write generated class file system.out.println("writing " + filename); fileoutputstream os = new fileoutputstream(filename); os.write(cw.tobytearray()); os.close(); // read file system.out.println("reading " + filename); classreader cr = new classreader(new fileinputstream("c:\\generated.class")); // print class system.out.println("read"); cr.accept(c, 0); cr.accept(cw,0);

java

No comments:

Post a Comment