Hi,
 
I wanted to create a simple rule which changes message which is printed by System.out.println. I found having trouble to put it together.
 
I took maven archetype program to get
 
package org.jboss.qa;
/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello world!" );
    }
}
 
Then I started with naive byteman script. I think it is wrong (is it?) as I expect it's not possible to change method parameter on stack this way.
 
RULE Simple byteman
CLASS org.jboss.qa.App
METHOD main
AT INVOKE PrintStream.println
IF TRUE
DO 
  $@[1] = "Hello Byteman!";
ENDRULE
 
ThenI take route that I was thinking must work but it dos not for me as I receive exceptions.
RULE Simple byteman
CLASS java.io.PrintStream
METHOD println(java.lang.String)
AT ENTRY
IF TRUE
DO 
  $1 = "Hello Byteman!";
ENDRULE
 
java -javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:../simple.btm -Dorg.jboss.byteman.verbose -cp target/byteman-simple-1.0-SNAPSHOT.jar org.jboss.qa.App
retransforming java.io.PrintStream
org.jboss.byteman.agent.Transformer : possible trigger for rule Simple byteman change in class java.io.PrintStream
RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into java.io.PrintStream.println(java.lang.String) void for rule Simple byteman change
org.jboss.byteman.agent.Transformer : inserted trigger for Simple byteman change in class java.io.PrintStream
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/byteman/rule/exception/EarlyReturnException
        at java.io.PrintStream.println(PrintStream.java)
        at org.jboss.qa.App.main(App.java:12)
 
Is there something that I should do differently? Or what different approach to solve the problem I can use?
 
Thank you for help
Ondra