You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ta...@jakarta.apache.org> on 2005/07/09 19:13:10 UTC

[jira] Closed: (TAPESTRY-391) Cannot inject the same bean twice

     [ http://issues.apache.org/jira/browse/TAPESTRY-391?page=all ]
     
Howard M. Lewis Ship closed TAPESTRY-391:
-----------------------------------------

    Fix Version: 4.0
     Resolution: Fixed

Explanation: when you inject an object, the InjectObjectWorker asks the EnhancementOperation to add a constructor parameter and a field.  When you inject the same object a second time, the EnhacementOperation doesn't add another constructor parameter ... it uses the same parameter and field, and returns the previous field name.  However the InjectObjectWorker code was ignoring the field name provided by the EnhancementOperation and ended up referencing what it thought the field should be ... which didn't exit.

> Cannot inject the same bean twice
> ---------------------------------
>
>          Key: TAPESTRY-391
>          URL: http://issues.apache.org/jira/browse/TAPESTRY-391
>      Project: Tapestry
>         Type: Bug
>     Versions: 4.0
>  Environment: Eclipse 3.1, Jetty 5.1.4-all, Jetty Launcher 1.3.0, Tapestry 4.0beta1, Hivemind 1.1beta2, Spring 1.2.2
>     Reporter: Adam Czysciak
>     Assignee: Howard M. Lewis Ship
>      Fix For: 4.0

>
> Tried to inject twice the same bean into one page, under different property keys and I got the exception. The beans are shared, therefore I think it should be possible to inject them twice.
> The exception (with part of my .page file) follows:
> org.apache.hivemind.ApplicationRuntimeException
>   Error at context:/WEB-INF/Home.page, line 10, column 68: Error adding
> property 'testBean2' to class pages.Home: Unable to add method
> java.lang.Object getTestBean2() to class $Home_0: [source error] no such
> field: _$testBean2
>   location:
> context:/WEB-INF/Home.page, line 10, column 68
> 5   "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
>   6
>   7  <page-specification class="pages.Home">
>   8
>   9   <inject property="testBean" object="spring:questionGroupDao" />
>   10   <inject property="testBean2" object="spring:questionGroupDao" />
>   11
>   12   </page-specification>
>      
>   org.apache.hivemind.ApplicationRuntimeException
>   Unable to add method java.lang.Object getTestBean2() to class $Home_0:
> [source error] no such field: _$testBean2
>      
>   javassist.CannotCompileException
>   [source error] no such field: _$testBean2
>   Stack Trace:
>   javassist.CtBehavior.setBody(CtBehavior.java:194) 
> javassist.CtBehavior.setBody(CtBehavior.java:163) 
> org.apache.hivemind.service.impl.ClassFabImpl.addMethod(ClassFabImpl.java:288) 
> org.apache.tapestry.enhance.EnhancementOperationImpl.addMethod(EnhancementOperationImpl.java:337) 
> org.apache.tapestry.enhance.InjectObjectWorker.injectObject(InjectObjectWorker.java:77) 
> org.apache.tapestry.enhance.InjectObjectWorker.performEnhancement(InjectObjectWorker.java:43) 
> $InjectEnhancementWorker_104f83b8b1f.performEnhancement($InjectEnhancementWorker_104f83b8b1f.java) 
> org.apache.tapestry.enhance.DispatchToInjectWorker.invokeWorker(DispatchToInjectWorker.java:63) 
> org.apache.tapestry.enhance.DispatchToInjectWorker.performEnhancement(DispatchToInjectWorker.java:45) 
> $EnhancementWorker_104f83b8b09.performEnhancement($EnhancementWorker_104f83b8b09.java) 
> $EnhancementWorker_104f83b8b08.performEnhancement($EnhancementWorker_104f83b8b08.java) 
> $EnhancementWorker_104f83b8b1e.performEnhancement($EnhancementWorker_104f83b8b1e.java) 
> $EnhancementWorker_104f83b8aff.performEnhancement($EnhancementWorker_104f83b8aff.java) 
> $EnhancementWorker_104f83b8afe.performEnhancement($EnhancementWorker_104f83b8afe.java) 
> org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl.getComponentConstructor(ComponentConstructorFactoryImpl.java:76) 
> $ComponentConstructorFactory_104f83b8ae8.getComponentConstructor($ComponentConstructorFactory_104f83b8ae8.java) 
> $ComponentConstructorFactory_104f83b8ae7.getComponentConstructor($ComponentConstructorFactory_104f83b8ae7.java) 
> org.apache.tapestry.pageload.PageLoader.instantiatePage(PageLoader.java:611) 
> org.apache.tapestry.pageload.PageLoader.loadPage(PageLoader.java:639) 
> $IPageLoader_104f83b8ae3.loadPage($IPageLoader_104f83b8ae3.java) 
> $IPageLoader_104f83b8ae4.loadPage($IPageLoader_104f83b8ae4.java) 
> org.apache.tapestry.pageload.PageSource.getPage(PageSource.java:118) 
> $IPageSource_104f83b8a54.getPage($IPageSource_104f83b8a54.java) 
> $IPageSource_104f83b8a53.getPage($IPageSource_104f83b8a53.java) 
> org.apache.tapestry.engine.RequestCycle.loadPage(RequestCycle.java:252) 
> org.apache.tapestry.engine.RequestCycle.getPage(RequestCycle.java:235) 
> org.apache.tapestry.engine.RequestCycle.activate(RequestCycle.java:596) 
> org.apache.tapestry.engine.HomeService.service(HomeService.java:63) 
> $IEngineService_104f83b8acf.service($IEngineService_104f83b8acf.java) 
> org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:74) 
> org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:65) 
> org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:241) 
> org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60) 
> $WebRequestServicer_104f83b8ab4.service($WebRequestServicer_104f83b8ab4.java) 
> $WebRequestServicer_104f83b8ab3.service($WebRequestServicer_104f83b8ab3.java) 
> $WebRequestServicer_104f83b8ab0.service($WebRequestServicer_104f83b8ab0.java) 
> $WebRequestServicer_104f83b8aaf.service($WebRequestServicer_104f83b8aaf.java) 
> org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56) 
> $ServletRequestServicer_104f83b8a94.service($ServletRequestServicer_104f83b8a94.java) 
> $ServletRequestServicer_104f83b8a93.service($ServletRequestServicer_104f83b8a93.java) 
> org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55) 
> $ServletRequestServicerFilter_104f83b8a90.service($ServletRequestServicerFilter_104f83b8a90.java) 
> $ServletRequestServicerFilter_104f83b8a8f.service($ServletRequestServicerFilter_104f83b8a8f.java) 
> $ServletRequestServicer_104f83b8a95.service($ServletRequestServicer_104f83b8a95.java) 
> org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52) 
> $ServletRequestServicerFilter_104f83b8a8e.service($ServletRequestServicerFilter_104f83b8a8e.java) 
> $ServletRequestServicerFilter_104f83b8a8d.service($ServletRequestServicerFilter_104f83b8a8d.java) 
> $ServletRequestServicer_104f83b8a95.service($ServletRequestServicer_104f83b8a95.java) 
> org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53) 
> $ServletRequestServicerFilter_104f83b8a92.service($ServletRequestServicerFilter_104f83b8a92.java) 
> $ServletRequestServicerFilter_104f83b8a91.service($ServletRequestServicerFilter_104f83b8a91.java) 
> $ServletRequestServicer_104f83b8a95.service($ServletRequestServicer_104f83b8a95.java) 
> $ServletRequestServicer_104f83b8a88.service($ServletRequestServicer_104f83b8a88.java) 
> $ServletRequestServicer_104f83b8a87.service($ServletRequestServicer_104f83b8a87.java) 
> org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:145) 
> org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:101) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:596) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:427) 
> org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:475) 
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567) 
> org.mortbay.http.HttpContext.handle(HttpContext.java:1565) 
> org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:635) 
> org.mortbay.http.HttpContext.handle(HttpContext.java:1517) 
> org.mortbay.http.HttpServer.service(HttpServer.java:954) 
> org.mortbay.http.HttpConnection.service(HttpConnection.java:814) 
> org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:981) 
> org.mortbay.http.HttpConnection.handle(HttpConnection.java:831) 
> org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244) 
> org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) 
> org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534) 
> Caused by: 
> compile error: no such field: _$testBean2 
> javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:744) 
> javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:702) 
> javassist.compiler.TypeChecker.atMember(TypeChecker.java:852) 
> javassist.compiler.JvstTypeChecker.atMember(JvstTypeChecker.java:65) 
> javassist.compiler.ast.Member.accept(Member.java:38) 
> javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:235) 
> javassist.compiler.CodeGen.compileExpr(CodeGen.java:222) 
> javassist.compiler.CodeGen.atReturnStmnt2(CodeGen.java:591) 
> javassist.compiler.JvstCodeGen.atReturnStmnt(JvstCodeGen.java:424) 
> javassist.compiler.CodeGen.atStmnt(CodeGen.java:356) 
> javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) 
> javassist.compiler.CodeGen.atMethodBody(CodeGen.java:285) 
> javassist.compiler.Javac.compileBody(Javac.java:208) 
> javassist.CtBehavior.setBody(CtBehavior.java:188) 
> javassist.CtBehavior.setBody(CtBehavior.java:163) 
> org.apache.hivemind.service.impl.ClassFabImpl.addMethod(ClassFabImpl.java:288) 
> org.apache.tapestry.enhance.EnhancementOperationImpl.addMethod(EnhancementOperationImpl.java:337) 
> org.apache.tapestry.enhance.InjectObjectWorker.injectObject(InjectObjectWorker.java:77) 
> org.apache.tapestry.enhance.InjectObjectWorker.performEnhancement(InjectObjectWorker.java:43) 
> $InjectEnhancementWorker_104f83b8b1f.performEnhancement($InjectEnhancementWorker_104f83b8b1f.java) 
> org.apache.tapestry.enhance.DispatchToInjectWorker.invokeWorker(DispatchToInjectWorker.java:63) 
> org.apache.tapestry.enhance.DispatchToInjectWorker.performEnhancement(DispatchToInjectWorker.java:45) 
> $EnhancementWorker_104f83b8b09.performEnhancement($EnhancementWorker_104f83b8b09.java) 
> $EnhancementWorker_104f83b8b08.performEnhancement($EnhancementWorker_104f83b8b08.java) 
> $EnhancementWorker_104f83b8b1e.performEnhancement($EnhancementWorker_104f83b8b1e.java) 
> $EnhancementWorker_104f83b8aff.performEnhancement($EnhancementWorker_104f83b8aff.java) 
> $EnhancementWorker_104f83b8afe.performEnhancement($EnhancementWorker_104f83b8afe.java) 
> org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl.getComponentConstructor(ComponentConstructorFactoryImpl.java:76) 
> $ComponentConstructorFactory_104f83b8ae8.getComponentConstructor($ComponentConstructorFactory_104f83b8ae8.java) 
> $ComponentConstructorFactory_104f83b8ae7.getComponentConstructor($ComponentConstructorFactory_104f83b8ae7.java) 
> org.apache.tapestry.pageload.PageLoader.instantiatePage(PageLoader.java:611) 
> org.apache.tapestry.pageload.PageLoader.loadPage(PageLoader.java:639) 
> $IPageLoader_104f83b8ae3.loadPage($IPageLoader_104f83b8ae3.java) 
> $IPageLoader_104f83b8ae4.loadPage($IPageLoader_104f83b8ae4.java) 
> org.apache.tapestry.pageload.PageSource.getPage(PageSource.java:118) 
> $IPageSource_104f83b8a54.getPage($IPageSource_104f83b8a54.java) 
> $IPageSource_104f83b8a53.getPage($IPageSource_104f83b8a53.java) 
> org.apache.tapestry.engine.RequestCycle.loadPage(RequestCycle.java:252) 
> org.apache.tapestry.engine.RequestCycle.getPage(RequestCycle.java:235) 
> org.apache.tapestry.engine.RequestCycle.activate(RequestCycle.java:596) 
> org.apache.tapestry.engine.HomeService.service(HomeService.java:63) 
> $IEngineService_104f83b8acf.service($IEngineService_104f83b8acf.java) 
> org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:74) 
> org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:65) 
> org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:241) 
> org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60) 
> $WebRequestServicer_104f83b8ab4.service($WebRequestServicer_104f83b8ab4.java) 
> $WebRequestServicer_104f83b8ab3.service($WebRequestServicer_104f83b8ab3.java) 
> $WebRequestServicer_104f83b8ab0.service($WebRequestServicer_104f83b8ab0.java) 
> $WebRequestServicer_104f83b8aaf.service($WebRequestServicer_104f83b8aaf.java) 
> org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56) 
> $ServletRequestServicer_104f83b8a94.service($ServletRequestServicer_104f83b8a94.java) 
> $ServletRequestServicer_104f83b8a93.service($ServletRequestServicer_104f83b8a93.java) 
> org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55) 
> $ServletRequestServicerFilter_104f83b8a90.service($ServletRequestServicerFilter_104f83b8a90.java) 
> $ServletRequestServicerFilter_104f83b8a8f.service($ServletRequestServicerFilter_104f83b8a8f.java) 
> $ServletRequestServicer_104f83b8a95.service($ServletRequestServicer_104f83b8a95.java) 
> org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52) 
> $ServletRequestServicerFilter_104f83b8a8e.service($ServletRequestServicerFilter_104f83b8a8e.java) 
> $ServletRequestServicerFilter_104f83b8a8d.service($ServletRequestServicerFilter_104f83b8a8d.java) 
> $ServletRequestServicer_104f83b8a95.service($ServletRequestServicer_104f83b8a95.java) 
> org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53) 
> $ServletRequestServicerFilter_104f83b8a92.service($ServletRequestServicerFilter_104f83b8a92.java) 
> $ServletRequestServicerFilter_104f83b8a91.service($ServletRequestServicerFilter_104f83b8a91.java) 
> $ServletRequestServicer_104f83b8a95.service($ServletRequestServicer_104f83b8a95.java) 
> $ServletRequestServicer_104f83b8a88.service($ServletRequestServicer_104f83b8a88.java) 
> $ServletRequestServicer_104f83b8a87.service($ServletRequestServicer_104f83b8a87.java) 
> org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:145) 
> org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:101) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:596) 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:689) 
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:427) 
> org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:475) 
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567) 
> org.mortbay.http.HttpContext.handle(HttpContext.java:1565) 
> org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:635) 
> org.mortbay.http.HttpContext.handle(HttpContext.java:1517) 
> org.mortbay.http.HttpServer.service(HttpServer.java:954) 
> org.mortbay.http.HttpConnection.service(HttpConnection.java:814) 
> org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:981) 
> org.mortbay.http.HttpConnection.handle(HttpConnection.java:831) 
> org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244) 
> org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) 
> org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org