[jboss-dev-forums] [Design of AOP on JBoss (Aspects/JBoss)] - Can I create class using reflection?

bornmw do-not-reply at jboss.com
Fri Dec 21 12:01:00 EST 2007


Hi!
I assume my question is about design of JBossAOP since users couldn't help me.
My question is simple.
I have a class that is post processed by aopc.
Does JBossAOP design let me I instantiate it using reflection?

When I try doing it I get this:


  | java -cp .:/projects/lib/jboss-aop_1.5.5.GA/lib-50/jboss-aop-jdk50.jar:/usr/local/pluto-1.1.4/shared
  | /lib/portlet-api-1.0.jar:/usr/local/pluto-1.1.4/webapps/AOPPortlet/WEB-INF/lib/concurrent.jar:/usr/l
  | ocal/pluto-1.1.4/webapps/AOPPortlet/WEB-INF/lib/javassist-snapshot.jar:/usr/local/pluto-1.1.4/webapp
  | s/AOPPortlet/WEB-INF/lib/jboss-common.jar:/usr/local/pluto-1.1.4/webapps/AOPPortlet/WEB-INF/lib/trov
  | e.jar ConstrTest
  | constructor = public Test()
  | Exception in thread "main" java.lang.VerifyError: (class: org/jboss/aop/advice/ViewAspect0, method: invoke signature: (Lorg/jb
  | oss/aop/joinpoint/Invocation;)Ljava/lang/Object;) Unable to pop operand off an empty stack
  |         at java.lang.Class.getDeclaredConstructors0(Native Method)
  |         at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
  |         at java.lang.Class.getConstructor0(Class.java:2699)
  |         at java.lang.Class.newInstance0(Class.java:326)
  |         at java.lang.Class.newInstance(Class.java:308)
  |         at org.jboss.aop.advice.PerVmAdvice.generateInterceptor(PerVmAdvice.java:132)
  |         at org.jboss.aop.advice.PerVmAdvice.generateOptimized(PerVmAdvice.java:56)
  |         at org.jboss.aop.advice.AdviceFactory.create(AdviceFactory.java:68)
  |         at org.jboss.aop.Advisor.createInterceptorChain(Advisor.java:618)
  |         at org.jboss.aop.Advisor.pointcutResolved(Advisor.java:888)
  |         at org.jboss.aop.Advisor.resolveMethodPointcut(Advisor.java:650)
  |         at org.jboss.aop.ClassAdvisor.createInterceptorChains(ClassAdvisor.java:607)
  |         at org.jboss.aop.ClassAdvisor.access$300(ClassAdvisor.java:82)
  |         at org.jboss.aop.ClassAdvisor$1.run(ClassAdvisor.java:299)
  |         at java.security.AccessController.doPrivileged(Native Method)
  |         at org.jboss.aop.ClassAdvisor.attachClass(ClassAdvisor.java:271)
  |         at org.jboss.aop.AspectManager.initialiseClassAdvisor(AspectManager.java:591)
  |         at org.jboss.aop.AspectManager.getAdvisor(AspectManager.java:579)
  |         at Test.<clinit>(Test.java)
  |         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  |         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
  | 39)
  |         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorIm
  | pl.java:27)
  |         at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  |         at java.lang.Class.newInstance0(Class.java:355)
  |         at java.lang.Class.newInstance(Class.java:308)
  |         at ConstrTest.main(ConstrTest.java:16)
  | 
	



My code is:

  | ClassLoader loader = Thread.currentThread().getContextClassLoader();
  | Class clazz = loader.loadClass("Test");
  | for (int j = 0; j < clazz.getConstructors().length; j++) {
  | 	Constructor constructor = clazz.getConstructors()[j];
  | 	System.out.println("constructor = " + constructor);
  | }
  | Test t = (Test) clazz.newInstance();
  | System.out.println("t = " + t);
  | 


Test is a simple class with default constructor and one method that has aspect attached to it.
What am I doing wrong? Or is it not possible to construct aspectized classes using reflection at all?

Many thanks.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4115044#4115044

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4115044



More information about the jboss-dev-forums mailing list