From 6d1ecdd735456d58c32fb67b5d0a88454c4fc616 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Tue, 2 Jun 2020 10:07:54 +0300 Subject: [PATCH 1/6] BAEL-4049 - view bytecode of a class file in java --- core-java-modules/core-java-jvm/pom.xml | 25 ++++++++ .../bytecode/ViewBytecodeUnitTest.java | 58 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index f3e5470a61..f35efaa26b 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -51,6 +51,31 @@ system ${java.home}/../lib/tools.jar + + org.ow2.asm + asm + 8.0.1 + + + org.ow2.asm + asm-util + 8.0.1 + + + org.apache.bcel + bcel + 6.4.1 + + + cglib + cglib + 3.3.0 + + + org.javassist + javassist + 3.27.0-GA + diff --git a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java new file mode 100644 index 0000000000..37ea6894c6 --- /dev/null +++ b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java @@ -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); + } + +} + + From 8623df615bd3b3cc9e660297d5f2018318aaedaf Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Wed, 3 Jun 2020 12:36:24 +0300 Subject: [PATCH 2/6] BAEL-4049 - removed cglib --- core-java-modules/core-java-jvm/pom.xml | 5 ----- .../com/baeldung/bytecode/ViewBytecodeUnitTest.java | 11 ++--------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index f35efaa26b..0d6cc5c454 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -66,11 +66,6 @@ bcel 6.4.1 - - cglib - cglib - 3.3.0 - org.javassist javassist diff --git a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java index 37ea6894c6..5b0fdf26d4 100644 --- a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java +++ b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java @@ -2,9 +2,11 @@ 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; @@ -13,7 +15,6 @@ 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 { @@ -36,14 +37,6 @@ public class ViewBytecodeUnitTest { 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(); From a2b1be69fea729630b42fe77a329db1f87e39ca6 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Wed, 3 Jun 2020 12:40:32 +0300 Subject: [PATCH 3/6] BAEL-4049 - indentation fix --- core-java-modules/core-java-jvm/pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index 0d6cc5c454..6663671579 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -52,9 +52,9 @@ ${java.home}/../lib/tools.jar - org.ow2.asm - asm - 8.0.1 + org.ow2.asm + asm + 8.0.1 org.ow2.asm @@ -67,9 +67,9 @@ 6.4.1 - org.javassist - javassist - 3.27.0-GA + org.javassist + javassist + 3.27.0-GA From b9105d78911c9bf1a8c308d12e994b42a5f3e703 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Wed, 3 Jun 2020 12:44:22 +0300 Subject: [PATCH 4/6] BAEL-4049 - indentation fix --- core-java-modules/core-java-jvm/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index 6663671579..55290bd292 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -55,9 +55,9 @@ org.ow2.asm asm 8.0.1 - - - org.ow2.asm + + + org.ow2.asm asm-util 8.0.1 From bc40ab12d750c967060001e8a35302940209a3e8 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Wed, 3 Jun 2020 12:46:28 +0300 Subject: [PATCH 5/6] BAEL-4049 - indentation --- core-java-modules/core-java-jvm/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index 55290bd292..a2c35c154c 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -58,9 +58,9 @@ org.ow2.asm - asm-util - 8.0.1 - + asm-util + 8.0.1 + org.apache.bcel bcel From 5d9b41411d0682f3e5dff0f7667fdeebd3b76fbb Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Thu, 11 Jun 2020 07:34:34 +0300 Subject: [PATCH 6/6] bcel version updated --- core-java-modules/core-java-jvm/pom.xml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml index a2c35c154c..5e731363ae 100644 --- a/core-java-modules/core-java-jvm/pom.xml +++ b/core-java-modules/core-java-jvm/pom.xml @@ -54,31 +54,28 @@ org.ow2.asm asm - 8.0.1 + ${asm.version} org.ow2.asm asm-util - 8.0.1 + ${asm.version} org.apache.bcel bcel - 6.4.1 - - - org.javassist - javassist - 3.27.0-GA - + ${bcel.version} + 3.6.1 - 3.21.0-GA + 3.27.0-GA 2.1.0.1 1.8.0 + 8.0.1 + 6.5.0