-
Bug
-
Resolution: Fixed
-
Low
-
8.0.0, 8.1.1
-
None
-
Severity 3 - Minor
-
Issue Summary
Byteman 3.x doesn't work on Java 11. We'll need to bump byteman to a 4.x release to get JDK9+ support.
Steps to Reproduce
- Create a byteman rule, e.g:
RULE print encryption details CLASS com.atlassian.bamboo.crypto.instance.SecretEncryptionServiceImpl METHOD decrypt(String) COMPILE AT ENTRY IF TRUE DO org.apache.log4j.Logger.getLogger($CLASS).info("TEST"); ENDRULE
- Run $BAMBOO_INSTALL/tools/byteman/list-rules.sh
Expected Results
Byteman rule is validated.
Actual Results
The below exception is thrown in the console:
[bamboo@server7 byteman]$ ./list-rules.sh
# File print-encryption.rule line 5
RULE print encryption details
CLASS com.atlassian.bamboo.crypto.instance.SecretEncryptionServiceImpl
METHOD decrypt(String)
COMPILE
AT ENTRY
IF TRUE
DO
org.apache.log4j.Logger.getLogger($CLASS).info("TEST");
ENDRULE
Transformed in:
loader: ParallelWebappClassLoader
context: ROOT
delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@1175e2db
trigger class: com.atlassian.bamboo.crypto.instance.SecretEncryptionServiceImpl
threw java.lang.IllegalArgumentException
java.lang.IllegalArgumentException
at org.jboss.byteman.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.jboss.byteman.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.jboss.byteman.agent.check.BytecodeChecker.<init>(BytecodeChecker.java:43)
at org.jboss.byteman.agent.Transformer.getClassChecker(Transformer.java:983)
at org.jboss.byteman.agent.TransformContext.findLeastCommonSuper(TransformContext.java:470)
at org.jboss.byteman.agent.TransformContext$1.getCommonSuperClass(TransformContext.java:447)
at org.jboss.byteman.objectweb.asm.ClassWriter.a(Unknown Source)
at org.jboss.byteman.objectweb.asm.Frame.a(Unknown Source)
at org.jboss.byteman.objectweb.asm.Frame.a(Unknown Source)
at org.jboss.byteman.objectweb.asm.MethodWriter.visitMaxs(Unknown Source)
at org.jboss.byteman.objectweb.asm.tree.MethodNode.accept(Unknown Source)
at org.jboss.byteman.objectweb.asm.commons.JSRInlinerAdapter.visitEnd(Unknown Source)
at org.jboss.byteman.objectweb.asm.ClassReader.b(Unknown Source)
at org.jboss.byteman.objectweb.asm.ClassReader.accept(Unknown Source)
at org.jboss.byteman.objectweb.asm.ClassReader.accept(Unknown Source)
at org.jboss.byteman.agent.TransformContext.transform(TransformContext.java:155)
at org.jboss.byteman.agent.Transformer.transform(Transformer.java:756)
at org.jboss.byteman.agent.Transformer.tryTransform(Transformer.java:823)
at org.jboss.byteman.agent.Transformer.tryTransform(Transformer.java:795)
at org.jboss.byteman.agent.Transformer.transform(Transformer.java:263)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:167)
at org.jboss.byteman.agent.Retransformer.installScript(Retransformer.java:151)
at org.jboss.byteman.agent.TransformListener.handleScripts(TransformListener.java:351)
at org.jboss.byteman.agent.TransformListener.loadScripts(TransformListener.java:274)
at org.jboss.byteman.agent.TransformListener.handleConnection(TransformListener.java:226)
at org.jboss.byteman.agent.TransformListener.run(TransformListener.java:156)
Workaround
Use Java 8.