BAEL-4049 - view bytecode of a class file in java
This commit is contained in:
parent
4c1af8f004
commit
6d1ecdd735
@ -51,6 +51,31 @@
|
||||
<scope>system</scope>
|
||||
<systemPath>${java.home}/../lib/tools.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ow2.asm</groupId>
|
||||
<artifactId>asm</artifactId>
|
||||
<version>8.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.ow2.asm</groupId>
|
||||
<artifactId>asm-util</artifactId>
|
||||
<version>8.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.bcel</groupId>
|
||||
<artifactId>bcel</artifactId>
|
||||
<version>6.4.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cglib</groupId>
|
||||
<artifactId>cglib</artifactId>
|
||||
<version>3.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.javassist</groupId>
|
||||
<artifactId>javassist</artifactId>
|
||||
<version>3.27.0-GA</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
|
@ -0,0 +1,58 @@
|
||||
package com.baeldung.bytecode;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import org.apache.bcel.Repository;
|
||||
import org.apache.bcel.classfile.JavaClass;
|
||||
import org.junit.Test;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.util.TraceClassVisitor;
|
||||
import javassist.ClassPool;
|
||||
import javassist.NotFoundException;
|
||||
import javassist.bytecode.ClassFile;
|
||||
import net.sf.cglib.reflect.FastClass;
|
||||
|
||||
public class ViewBytecodeUnitTest {
|
||||
|
||||
@Test
|
||||
public void whenUsingASM_thenReadBytecode() throws IOException {
|
||||
ClassReader reader = new ClassReader("java.lang.Object");
|
||||
StringWriter sw = new StringWriter();
|
||||
TraceClassVisitor tcv = new TraceClassVisitor(new PrintWriter(sw));
|
||||
reader.accept(tcv, 0);
|
||||
|
||||
assertTrue(sw.toString().contains("public class java/lang/Object"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUsingBCEL_thenReadBytecode() throws ClassNotFoundException {
|
||||
JavaClass objectClazz = Repository.lookupClass("java.lang.Object");
|
||||
|
||||
assertEquals(objectClazz.getClassName(), "java.lang.Object");
|
||||
assertEquals(objectClazz.getMethods().length, 14);
|
||||
assertTrue(objectClazz.toString().contains("public class java.lang.Object"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUsingCglib_thenReadBytecode() {
|
||||
FastClass fastClass = FastClass.create(java.lang.Object.class);
|
||||
Class<?> clazz = fastClass.getJavaClass();
|
||||
|
||||
assertEquals(clazz.toString(), "class java.lang.Object");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUsingJavassist_thenReadBytecode() throws NotFoundException {
|
||||
ClassPool cp = ClassPool.getDefault();
|
||||
ClassFile cf = cp.get("java.lang.Object").getClassFile();
|
||||
|
||||
assertEquals(cf.getName(), "java.lang.Object");
|
||||
assertEquals(cf.getMethods().size(), 14);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user