Results 1 to 5 of 5

Thread: ArrayIndexOutOfBoundsException in CGLIB generated proxy on advised bean.

  1. #1
    Join Date
    Jul 2007
    Posts
    2

    Default ArrayIndexOutOfBoundsException in CGLIB generated proxy on advised bean.

    Given this aspect

    Code:
    package com.sabre.liberty.greenbeans.pnr;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.beans.factory.annotation.Required;
    
    @Aspect
    public class PssBypassAspect {
       private PssBypassEngine bypassEngine;
    
       @Pointcut("execution (* *.invoke(String)) && this(com.sabre.liberty.greenbeans.pnr.PnrBaseController+)")
       protected void controllerInvocation() {
       }
    
       @Around("controllerInvocation() && args(command)")
       public Object bypass(ProceedingJoinPoint thisJointPoint, String command) throws Throwable {
          if (bypassEngine.isBypassing())
             return bypassEngine.bypass(command);
          else
             return thisJointPoint.proceed(new Object[]{command});
       }
    
       @Required
       public void setBypassEngine(PssBypassEngine bypassEngine) {
          this.bypassEngine = bypassEngine;
       }
    }
    weaved by spring through
    Code:
       <aop:aspectj-autoproxy proxy-target-class="true">
          <aop:include name="pssBypassAspect"/>
       </aop:aspectj-autoproxy>
    
       <bean name="pssBypassAspect" class="com.sabre.liberty.greenbeans.pnr.PssBypassAspect">
          <property name="bypassEngine" ref="bypassEngine"/>
       </bean>
    On this bean

    Code:
    package com.sabre.liberty.greenbeans.pnr;
    
    import com.sabre.liberty.greenbeans.*;
    
    public class PnrBaseController extends ActionController {
       @Override
       public ControllerResults invoke(String request) throws Exception {
          return super.invoke(request);
       }
    }
    
    package com.sabre.liberty.greenbeans;
    
    import org.springframework.context.*;
    
    public class ActionController extends GreenBeanController implements MessageSourceAware {
       public ControllerResults invoke(String request) throws Exception {
          return invoke(new InvocationContext(request));
       }
    
       public ControllerResults invoke(ControllerInput request) throws Exception {
          return invoke(new InvocationContext(request));
       }
    
       private ControllerResults invoke(InvocationContext context) throws Exception {
          // something
       }
    }
    I sometimes get this exception (not consistently. May be due to MT environment):
    Code:
    java.lang.ArrayIndexOutOfBoundsException: 0
            at com.sabre.liberty.greenbeans.GreenBeanController$$FastClassByCGLIB$$20773acc.invoke(<generated>)
            at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:163)
            at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:695)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
            at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
            at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
            at com.sabre.liberty.greenbeans.pnr.PnrRemarkController$$EnhancerByCGLIB$$960cc3fc.getParser(<generated>)
            at com.sabre.liberty.greenbeans.GreenBean.getParser(GreenBean.java:140)
            at com.sabre.liberty.greenbeans.GreenBean.validateParserSpecification(GreenBean.java:122)
            at com.sabre.liberty.greenbeans.GreenBean.initCommandParser(GreenBean.java:114)
            at com.sabre.liberty.greenbeans.GreenBean.getGreenBeanController(GreenBean.java:100)
            at com.sabre.liberty.greenbeans.GreenScreenMVCController.handleRequest(GreenScreenMVCController.java:87)
            at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:857)
            at com.sabre.liberty.greenbeans.GreenScreenDispatcherServlet.delegateDispatch(GreenScreenDispatcherServlet.java:132)
            at com.sabre.liberty.greenbeans.GreenScreenDispatcherServlet.doDispatch(GreenScreenDispatcherServlet.java:58)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:461)
            at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:416)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at com.sabre.liberty.clients.mom.MOMFilter.handleMOMRequest(MOMFilter.java:93)
            at com.sabre.liberty.clients.mom.MOMFilter.doFilter(MOMFilter.java:73)
            at com.sabre.liberty.clients.ServletFilter.doFilter(ServletFilter.java:31)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at com.sabre.liberty.greenbeans.util.DebugFilter.doFilter(DebugFilter.java:20)
            at com.sabre.liberty.clients.ServletFilter.doFilter(ServletFilter.java:31)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at com.sabre.liberty.clients.filters.EventLoggingFilter.doFilter(EventLoggingFilter.java:38)
            at com.sabre.liberty.clients.ServletFilter.doFilter(ServletFilter.java:31)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at com.sabre.liberty.greenbeans.session.SessionSetupFilter.doFilter(SessionSetupFilter.java:32)
            at com.sabre.liberty.clients.ServletFilter.doFilter(ServletFilter.java:31)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at com.sabre.liberty.clients.filters.ExceptionHandlingFilter.doFilter(ExceptionHandlingFilter.java:26)
            at com.sabre.liberty.clients.ServletFilter.doFilter(ServletFilter.java:31)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:63)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:204)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
            at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
            at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
            at java.lang.Thread.run(Thread.java:595)
    My environment is 4xdual core AMD64 running RH2.6, jdk1.5.0_07, spring 2.0.5, CGLIB2.2.beta1

    Any ideas?
    Is there a way to dump the bytecode of CGLIB generated classes into .class file?

    Thanks in advance

    Jacques

  2. #2

    Default

    Why are you using a CGLIB beta?

    I would swear I once knew how to obtain bytecode from a running Sun JVM - but I can't remember anymore. It might have involved using the JVM debug interfaces or processing SA JVM dumps.

  3. #3

    Default

    One obvious trick would be using bootclasspath to load a patched java.lang.ClassLoader. That has saved my day serveral times.

  4. #4
    Join Date
    May 2011
    Posts
    2

    Unhappy Same issue found in cglib-2.2_beta1.jar

    I'm also getting the same exception and I've noticed it is random as you said. Additionally it is mostly not occurring when I try to debug.

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
    at it.codegen.tbx.accommodationmanager.loadingclient. presentation.AccomManagerMainFrame$$EnhancerByCGLI B$$24358384$$FastClassByCGLIB$$8556c1e7.invoke(<ge nerated>)
    at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodP roxy.java:187)
    at dynaop.InvocationImpl.invokeTarget(InvocationImpl. java:47)
    at dynaop.ProxyInvocationHandler.invoke(ProxyInvocati onHandler.java:110)
    at dynaop.ClassProxyInvocationHandler.intercept(Class ProxyInvocationHandler.java:36)
    at it.codegen.tbx.accommodationmanager.loadingclient. presentation.AccomManagerMainFrame$$EnhancerByCGLI B$$24358384.validate(<generated>)
    at java.awt.Window.dispatchEventImpl(Window.java:2438 )
    at java.awt.Component.dispatchEvent(Component.java:42 43)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java: 599)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:121)



    I'm using jdk1.6.0_06 and cglib-2.2_beta1.jar (as you did). Please do post if you find a solution to this.

    Thanks,
    Dishan

  5. #5
    Join Date
    May 2011
    Posts
    2

    Default Solution Found

    There is a new update for cglib-2.2_beta1.jar in following location.

    http://sourceforge.net/projects/cgli.../cglib2/2.2.2/

    I used cglib-2.2.2.jar and it worked. If you have any question please do let me know.

    Cheers,
    Dishan

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •