ObjectInput
slv Jan 22, 2009 6:48 AMHello,
I am currently playing around with JBoss AOP, but I can't seem to make my pointcuts work.
This is the xml file:
<aop> <aspect class="main.Aspect" /> <bind pointcut="execution(void $instanceof{java.io.ObjectOutput}->writeObject($instanceof{java.lang.Object}))"> <around aspect="main.Aspect" name="secureWrite" /> </bind> <bind pointcut="execution($instanceof{java.lang.Object} $instanceof{java.io.ObjectInput}->readObject())"> <around aspect="main.Aspect" name="secureRead" /> </bind> </aop>
My Aspect class is this:
package main; import org.jboss.aop.joinpoint.MethodInvocation; public class Aspect { private final SecureCommunication secure; public Aspect() { secure = new SecureCommunicationRSA(); } public Object secureWrite(MethodInvocation invocation) throws Throwable { System.out.println("Writing secure"); Object[] args = invocation.getArguments(); for (int i = 0; i < args.length; i++) { args = secure.encrypt(args); } return invocation.invokeNext(); } public Object secureRead(MethodInvocation invocation) throws Throwable { System.out.println("Reading secure"); return secure.decrypt(invocation.invokeNext()); } }
And the class I want to instrument is this:
package main; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; public class Main { /** * @param args */ public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectOutput out = new ObjectOutputStream(new FileOutputStream( new File("test"))); out.writeObject("this"); out.writeObject("is"); out.writeObject("a test"); out.close(); ObjectInput in = new ObjectInputStream(new FileInputStream(new File( "test"))); System.out.println(in.readObject()); System.out.println(in.readObject()); System.out.println(in.readObject()); } }
When I try to apply the aspects, I get the following message
[aop-debug] org.jboss.aop.instrument.Instrumentor trying to transform main.Main
[aop-debug] org.jboss.aop.instrument.CallerTransformer There are no caller pointcuts!
[aop-debug] org.jboss.aop.instrument.JoinpointSimpleClassifier javassist.CtMethod@44a4fe33[public static main ([Ljava/lang/String;)V] matches no pointcuts
[aop-debug] org.jboss.aop.instrument.JoinpointSimpleClassifier javassist.CtConstructor@176e552[public Main ()V] matches no pointcuts
[aop-debug] org.jboss.aop.instrument.Instrumentor was main.Main converted: false
[no comp needed] /home/slv/Desktop/EncryptionTest/classes/main/Main.class
Can you please help me? I tried so many things and I can't make it work.
Thank you,
Silviu