JBoss Community

Re: Constructor Execution Pointcut Causing ArrayOutOfBounds

created by Nicholas Whitehead in JBoss AOP - View the full discussion

Hello Kabir;

 

Thanks for the response.

 

I hope the fact that no one is working on JBoss AOP right now is because it is complete and stable. Not being deprecated is it ?

 

After some more investigation and some simplified test cases, I have determined that the issue arises in this specific set of conditions:

 

  1. An execution pointcut on private constructors.
  2. An advised class that has a private parameterless constructor and one or more parameterized private constructors.

 

If the constructors are not private, or there is only a single private parameterless constructor, the error does not occur.

 

There are probably a number of other combinations of conditions, but I believe my patch should work for all for them and not break anything.

 

The issue is on line 1870 of org.jboss.aop.Advisor in JBoss AOP 2.1.8 GA. The line of code is:

 

pointcutResolved(constructorInfos[i], binding, new ConstructorJoinpoint(constructor));

 

My patch, which is very simplistic, replaces this line with:

 

for(ConstructorInfo ci: constructorInfos) {
   if(constructor.equals(ci.getConstructor())) {
      pointcutResolved(ci, binding, new ConstructorJoinpoint(constructor));
      break;
   }
   throw new NotImplementedException(

        "Failed to match ConstructorInfo for Constructor [" + constructor.toGenericString() + "]");
}

 

The premise is that in this condition, the array of Constructors is not the same size as the array of ConstructorInfos, so we cannot use a simple index reference. Iterating through the available ConstructorInfos find the matching one and then executes the pointcutResolved normally. Not sure if the thrown exception is JBoss compliant, but I am also not sure if it will realistically ever reach that line anyways.

 

At any rate, let me know what I can do to submit this patch if you need something more formal.

 

Cheers.

 

//Nicholas

Reply to this message by going to Community

Start a new discussion in JBoss AOP at Community