Skip to content

Commit aceb778

Browse files
committed
BAEL-4049 - view bytecode of a class file in java
1 parent c854f0d commit aceb778

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

core-java-modules/core-java-jvm/pom.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,31 @@
5151
<scope>system</scope>
5252
<systemPath>${java.home}/../lib/tools.jar</systemPath>
5353
</dependency>
54+
<dependency>
55+
<groupId>org.ow2.asm</groupId>
56+
<artifactId>asm</artifactId>
57+
<version>8.0.1</version>
58+
</dependency>
59+
<dependency>
60+
<groupId>org.ow2.asm</groupId>
61+
<artifactId>asm-util</artifactId>
62+
<version>8.0.1</version>
63+
</dependency>
64+
<dependency>
65+
<groupId>org.apache.bcel</groupId>
66+
<artifactId>bcel</artifactId>
67+
<version>6.4.1</version>
68+
</dependency>
69+
<dependency>
70+
<groupId>cglib</groupId>
71+
<artifactId>cglib</artifactId>
72+
<version>3.3.0</version>
73+
</dependency>
74+
<dependency>
75+
<groupId>org.javassist</groupId>
76+
<artifactId>javassist</artifactId>
77+
<version>3.27.0-GA</version>
78+
</dependency>
5479
</dependencies>
5580

5681
<properties>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.baeldung.bytecode;
2+
3+
import static org.junit.Assert.assertTrue;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import java.io.IOException;
6+
import java.io.PrintWriter;
7+
import java.io.StringWriter;
8+
import org.apache.bcel.Repository;
9+
import org.apache.bcel.classfile.JavaClass;
10+
import org.junit.Test;
11+
import org.objectweb.asm.ClassReader;
12+
import org.objectweb.asm.util.TraceClassVisitor;
13+
import javassist.ClassPool;
14+
import javassist.NotFoundException;
15+
import javassist.bytecode.ClassFile;
16+
import net.sf.cglib.reflect.FastClass;
17+
18+
public class ViewBytecodeUnitTest {
19+
20+
@Test
21+
public void whenUsingASM_thenReadBytecode() throws IOException {
22+
ClassReader reader = new ClassReader("java.lang.Object");
23+
StringWriter sw = new StringWriter();
24+
TraceClassVisitor tcv = new TraceClassVisitor(new PrintWriter(sw));
25+
reader.accept(tcv, 0);
26+
27+
assertTrue(sw.toString().contains("public class java/lang/Object"));
28+
}
29+
30+
@Test
31+
public void whenUsingBCEL_thenReadBytecode() throws ClassNotFoundException {
32+
JavaClass objectClazz = Repository.lookupClass("java.lang.Object");
33+
34+
assertEquals(objectClazz.getClassName(), "java.lang.Object");
35+
assertEquals(objectClazz.getMethods().length, 14);
36+
assertTrue(objectClazz.toString().contains("public class java.lang.Object"));
37+
}
38+
39+
@Test
40+
public void whenUsingCglib_thenReadBytecode() {
41+
FastClass fastClass = FastClass.create(java.lang.Object.class);
42+
Class<?> clazz = fastClass.getJavaClass();
43+
44+
assertEquals(clazz.toString(), "class java.lang.Object");
45+
}
46+
47+
@Test
48+
public void whenUsingJavassist_thenReadBytecode() throws NotFoundException {
49+
ClassPool cp = ClassPool.getDefault();
50+
ClassFile cf = cp.get("java.lang.Object").getClassFile();
51+
52+
assertEquals(cf.getName(), "java.lang.Object");
53+
assertEquals(cf.getMethods().size(), 14);
54+
}
55+
56+
}
57+
58+

0 commit comments

Comments
 (0)