Update; The problem seems to reside in CompositeMethodsModel, or more likely the code that determine that its invoke() method should be called. The CompositeMethodModel compositeMethod = methods.get( method );
will retrieve a SomeLogic.getNumbers() method, which on compositeMethod.invoke() in turn will come all the way back to the same place... -- Niclas On Fri, Oct 2, 2009 at 12:07 PM, Niclas Hedhman <[email protected]> wrote: > Rickard, > > The 'actual' recursion of the stack trace is; > > at > org.qi4j.cornercase.covariantReturn.SomeLogicMixin.numbers(SomeLogicMixin.java:15) > at > org.qi4j.cornercase.covariantReturn.SomeLogicMixin$$EnhancerByCGLIB$$6443530a.CGLIB$numbers$1(<generated>) > at > org.qi4j.cornercase.covariantReturn.SomeLogicMixin$$EnhancerByCGLIB$$6443530a$$FastClassByCGLIB$$5e0d1c63.invoke(<generated>) > at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:167) > at > org.qi4j.runtime.composite.TypedMixinInvocationHandler.invoke(TypedMixinInvocationHandler.java:40) > at > org.qi4j.runtime.composite.CompositeMethodInstance.invoke(CompositeMethodInstance.java:59) > at > org.qi4j.runtime.composite.TransientInstance.invoke(TransientInstance.java:127) > at > org.qi4j.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:148) > at > org.qi4j.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:113) > at > org.qi4j.runtime.composite.AbstractCompositeModel.invoke(AbstractCompositeModel.java:110) > at > org.qi4j.runtime.composite.TransientInstance.invokeProxy(TransientInstance.java:73) > at > org.qi4j.runtime.composite.ThisCompositeInvoker.intercept(ThisCompositeInvoker.java:37) > at > org.qi4j.cornercase.covariantReturn.SomeLogicMixin$$EnhancerByCGLIB$$6443530a.numbers(<generated>) > at > org.qi4j.cornercase.covariantReturn.SomeLogicMixin.numbers(SomeLogicMixin.java:15) > > This is in case you can spot the problem "just like that". Meanwhile, > I'll keep digging. > > > 2009/10/2 Łukasz Zieliński <[email protected]>: >> Hello, >> I've been reading the list for some time now and decided to give Qi4j a >> try. While playing around with services I found following issue: >> service interface is defined as: >> interface SomeLogic { >> Collection<Integer> getNumbers(); >> } >> and mixin is implemented as: >> class SomeLogicMixin implements SomeLogic { >> public List<Integer> getNumbers() { >> .... >> } >> } >> When I obtain service from ServiceFinder a call to getNumbers() causes >> stackoverflow. When implementation signature matches interface everything is >> working fine. >> Using IDEA Debug run configuration (exception from normal Run is not really >> usable) I narrowed down culprits to following lines: >> Exception in thread "main" java.lang.StackOverflowError >> at >> org.qi4j.runtime.composite.TypedMixinInvocationHandler.invoke(TypedMixinInvocationHandler.java:52) >> at >> org.qi4j.runtime.composite.CompositeMethodInstance.invoke(CompositeMethodInstance.java:59) >> I looks like invocation handler gets called over and over. >> Attached is a simple test application. >> Cheers, >> Lukasz >> _______________________________________________ >> qi4j-dev mailing list >> [email protected] >> http://lists.ops4j.org/mailman/listinfo/qi4j-dev >> >> > > > > -- > Niclas Hedhman, Software Developer > http://www.qi4j.org - New Energy for Java > > I live here; http://tinyurl.com/2qq9er > I work here; http://tinyurl.com/2ymelc > I relax here; http://tinyurl.com/2cgsug > -- Niclas Hedhman, Software Developer http://www.qi4j.org - New Energy for Java I live here; http://tinyurl.com/2qq9er I work here; http://tinyurl.com/2ymelc I relax here; http://tinyurl.com/2cgsug _______________________________________________ qi4j-dev mailing list [email protected] http://lists.ops4j.org/mailman/listinfo/qi4j-dev

