Skip to content

Commit 32bccf1

Browse files
authored
Merge pull request eugenp#9428 from SmartyAnsh/BAEL-View_Bytecode_of_a_Class_File_in_Java
BAEL-4049 View bytecode of a class file in java
2 parents beaf967 + aaae742 commit 32bccf1

2 files changed

Lines changed: 69 additions & 1 deletion

File tree

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,14 +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>${asm.version}</version>
58+
</dependency>
59+
<dependency>
60+
<groupId>org.ow2.asm</groupId>
61+
<artifactId>asm-util</artifactId>
62+
<version>${asm.version}</version>
63+
</dependency>
64+
<dependency>
65+
<groupId>org.apache.bcel</groupId>
66+
<artifactId>bcel</artifactId>
67+
<version>${bcel.version}</version>
68+
</dependency>
5469
</dependencies>
5570

5671
<properties>
5772
<assertj.version>3.6.1</assertj.version>
5873
<!-- instrumentation -->
59-
<javaassist.version>3.21.0-GA</javaassist.version>
74+
<javaassist.version>3.27.0-GA</javaassist.version>
6075
<esapi.version>2.1.0.1</esapi.version>
6176
<sun.tools.version>1.8.0</sun.tools.version>
77+
<asm.version>8.0.1</asm.version>
78+
<bcel.version>6.5.0</bcel.version>
6279
</properties>
6380

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

0 commit comments

Comments
 (0)