|
|
|
[
Permlink
| « Hide
]
Kalle Korhonen - [13/Aug/07 12:09 AM ]
Oh.. and forgot to mention that despite getting the stack traces, it still seems to work - maybe suggesting that the priority should be lowered.
Despite the fact I remember seeing at least one other person on tapestry users mailing that had experienced the same exact behavior, I now believe this bug report is invalid. I *do* see the issue when using Tapestry 4.1.2 with OGNL 2.7.1, but *not* with Tapestry 4.1.3. Obviously the newer Tapestry is doing something different - maybe just swallowing the exception trace? - but probably not worth your or my time to investigate further. Jesse, if you have a hunch on the cause, please provide closing comments.
I'm assuming this problem has hopefully just "gone away". We'll see...
I'm still seeing this issue with Tapestry 4.1.3 and OGNL 2.7.
ERROR [btpool0-3] HiveMindExpressionCompiler.compileExpression(224) | Error generating OGNL statements for expression username with root org.appfuse.model.User@99c678[username=admin,enabled=false,accountExpired=false,credentialsExpired=false,accountLocked=false,Granted Authorities: ] org.apache.hivemind.ApplicationRuntimeException: Unable to add method void set(ognl.OgnlContext, java.lang.Object, java.lang.Object) to class $ASTProperty_117f4fc96d1: [source error] setUsername(java.lang.String) not found in org.acegisecurity.userdetails.UserDetails at org.apache.tapestry.enhance.ClassFabImpl.addMethod(ClassFabImpl.java:278) at org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression(HiveMindExpressionCompiler.java:214) at ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:498) at ognl.Ognl.compileExpression(Ognl.java:141) at org.apache.tapestry.services.impl.ExpressionCacheImpl.parse(ExpressionCacheImpl.java:152) at org.apache.tapestry.services.impl.ExpressionCacheImpl.getCompiledExpression(ExpressionCacheImpl.java:115) at $ExpressionCache_117f4fc9666.getCompiledExpression($ExpressionCache_117f4fc9666.java) at org.apache.tapestry.services.impl.ExpressionEvaluatorImpl.read(ExpressionEvaluatorImpl.java:108) at $ExpressionEvaluator_117f4fc9664.read($ExpressionEvaluator_117f4fc9664.java) at org.apache.tapestry.contrib.table.model.ognl.OgnlTableColumnEvaluator.getColumnValue(OgnlTableColumnEvaluator.java:59) at org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn.getColumnValue(SimpleTableColumn.java:213) at org.apache.tapestry.contrib.table.model.simple.SimpleTableValueRendererSource.getRenderer(SimpleTableValueRendererSource.java:56) at org.apache.tapestry.contrib.table.model.common.AbstractTableColumn.getValueRenderer(AbstractTableColumn.java:177) Here's my page template: <table jwcid="table@contrib:Table" class="table contribTable" id="user" rowsClass="ognl:beans.rowsClass.next" row="ognl:row" columns="user.username:username, activeUsers.fullName:fullName" source="ognl:getServletContext().getAttribute('userNames')" initialSortColumn="username" arrowUpAsset="asset:upArrow" arrowDownAsset="asset:downArrow"> </table> Hmm....The root object being compiled against being "org.appfuse.model.User" and the error of not being able to call a setter on "org.acegisecurity.userdetails.UserDetails" sounds suspicious.
I don't know if you have the time / patience but it might help to have a sanity check and try ognl 2.7.2 and Tapestry 4.1.5-SNAPSHOT to be sure everything has the latest fixes. OGNL 2.7.2 is relased and the released Tapestry 4.1.5 should show up in ibiblio Saturday. (vote ends tomorrow at which point I can do the actual release) I tried using Tapestry 4.1.3 and OGNL 2.7.2, but no dice. Where can I download a snapshot of Tapestry 4.1.5?
I get the same error If I use Tapestry 4.1.5-SNAPSHOT and OGNL 2.7. If I upgrade to OGNL 2.7.2, I get the following error. My page still renders find, it's just errors from OGNL that show up in my log.
[INFO] Starting scanner at interval of 3 seconds. ERROR [btpool0-1] HiveMindExpressionCompiler.compileExpression(224) | Error generating OGNL statements for expression dojoSource with root $Shell_1@d5bc3c1d[mainMenu/$Shell] org.apache.hivemind.ApplicationRuntimeException: Unable to add method void set(ognl.OgnlContext, java.lang.Object, java.lang.Object) to class $ASTProperty_117f574eacf: [source error] ref1(ognl.OgnlContext,java.lang.Object,java.lang.Object) not found in $ASTProperty_117f574eacf at org.apache.tapestry.enhance.ClassFabImpl.addMethod(ClassFabImpl.java:278) at org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression(HiveMindExpressionCompiler.java:214) at ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:414) at ognl.Ognl.compileExpression(Ognl.java:141) at org.apache.tapestry.services.impl.ExpressionCacheImpl.parse(ExpressionCacheImpl.java:152) at org.apache.tapestry.services.impl.ExpressionCacheImpl.getCompiledExpression(ExpressionCacheImpl.java:115) at $ExpressionCache_117f574eab2.getCompiledExpression($ExpressionCache_117f574eab2.java) at org.apache.tapestry.binding.ExpressionBinding.resolveExpression(ExpressionBinding.java:134) at org.apache.tapestry.binding.ExpressionBinding.getObject(ExpressionBinding.java:125) at org.apache.tapestry.binding.AbstractBinding.getObject(AbstractBinding.java:84) at org.apache.tapestry.bean.BindingBeanInitializer.setBeanProperty(BindingBeanInitializer.java:76) at org.apache.tapestry.bean.BeanProvider.instantiateBean(BeanProvider.java:241) at org.apache.tapestry.bean.BeanProvider.getBean(BeanProvider.java:158) at org.apache.tapestry.binding.BeanBinding.getObject(BeanBinding.java:64) at org.apache.tapestry.binding.AbstractBinding.getObject(AbstractBinding.java:84) at $Shell_1.getAjaxDelegate($Shell_1.java) at org.apache.tapestry.html.Shell.renderComponent(Shell.java:100) at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180) at org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107) at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:178) at org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:249) at org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:397) at org.apache.tapestry.services.impl.DefaultResponseBuilder.renderResponse(DefaultResponseBuilder.java:152) at org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(ResponseRendererImpl.java:33) at $ResponseRenderer_117f574e988.renderResponse($ResponseRenderer_117f574e988.java) at $ResponseRenderer_117f574e987.renderResponse($ResponseRenderer_117f574e987.java) at org.apache.tapestry.engine.PageService.service(PageService.java:68) at $IEngineService_117f574e9f5.service($IEngineService_117f574e9f5.java) at org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:77) at org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:72) at org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:237) at org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54) at $WebRequestServicer_117f574e9d2.service($WebRequestServicer_117f574e9d2.java) at $WebRequestServicer_117f574e9d1.service($WebRequestServicer_117f574e9d1.java) at $WebRequestServicer_117f574e9ce.service($WebRequestServicer_117f574e9ce.java) at $WebRequestServicer_117f574e9cd.service($WebRequestServicer_117f574e9cd.java) at org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:61) at $ServletRequestServicer_117f574e9b4.service($ServletRequestServicer_117f574e9b4.java) at $ServletRequestServicer_117f574e9b3.service($ServletRequestServicer_117f574e9b3.java) at org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55) at $ServletRequestServicerFilter_117f574e9b0.service($ServletRequestServicerFilter_117f574e9b0.java) at $ServletRequestServicerFilter_117f574e9af.service($ServletRequestServicerFilter_117f574e9af.java) at $ServletRequestServicer_117f574e9b5.service($ServletRequestServicer_117f574e9b5.java) at org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52) at $ServletRequestServicerFilter_117f574e9ae.service($ServletRequestServicerFilter_117f574e9ae.java) at $ServletRequestServicerFilter_117f574e9ad.service($ServletRequestServicerFilter_117f574e9ad.java) at $ServletRequestServicer_117f574e9b5.service($ServletRequestServicer_117f574e9b5.java) at org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53) at $ServletRequestServicerFilter_117f574e9b2.service($ServletRequestServicerFilter_117f574e9b2.java) at $ServletRequestServicerFilter_117f574e9b1.service($ServletRequestServicerFilter_117f574e9b1.java) at $ServletRequestServicer_117f574e9b5.service($ServletRequestServicer_117f574e9b5.java) at $ServletRequestServicer_117f574e9a8.service($ServletRequestServicer_117f574e9a8.java) at $ServletRequestServicer_117f574e9a7.service($ServletRequestServicer_117f574e9a7.java) at org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:126) at org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:103) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:722) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:404) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:224) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) at org.appfuse.webapp.filter.StaticFilter.doFilterInternal(StaticFilter.java:102) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:406) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.appfuse.webapp.filter.LocaleFilter.doFilterInternal(LocaleFilter.java:74) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at com.opensymphony.clickstream.ClickstreamFilter.doFilter(ClickstreamFilter.java:42) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:722) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:404) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450) Caused by: javassist.CannotCompileException: [source error] ref1(ognl.OgnlContext,java.lang.Object,java.lang.Object) not found in $ASTProperty_117f574eacf at javassist.CtBehavior.setBody(CtBehavior.java:367) at javassist.CtBehavior.setBody(CtBehavior.java:334) at org.apache.tapestry.enhance.ClassFabImpl.addMethod(ClassFabImpl.java:272) ... 120 more Caused by: compile error: ref1(ognl.OgnlContext,java.lang.Object,java.lang.Object) not found in $ASTProperty_117f574eacf at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:716) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) at javassist.compiler.TypeChecker.atCastExpr(TypeChecker.java:546) at javassist.compiler.JvstTypeChecker.atCastExpr(JvstTypeChecker.java:103) at javassist.compiler.ast.CastExpr.accept(CastExpr.java:54) at javassist.compiler.JvstTypeChecker.atMethodArgs(JvstTypeChecker.java:220) at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:702) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:329) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:350) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:291) at javassist.compiler.Javac.compileBody(Javac.java:222) at javassist.CtBehavior.setBody(CtBehavior.java:360) ... 122 more ERROR [btpool0-1] HiveMindExpressionCompiler.compileExpression(224) | Error generating OGNL statements for expression dojoFormSource with root $Shell_1@d5bc3c1d[mainMenu/$Shell] org.apache.hivemind.ApplicationRuntimeException: Unable to add method void set(ognl.OgnlContext, java.lang.Object, java.lang.Object) to class $ASTProperty_117f574ead0: [source error] ref1(ognl.OgnlContext,java.lang.Object,java.lang.Object) not found in $ASTProperty_117f574ead0 at org.apache.tapestry.enhance.ClassFabImpl.addMethod(ClassFabImpl.java:278) Is this happening in an app I can download and run myself ?
Yeah I can confirm I see the same exceptions as Matt using the same versions. I suppose it tries a compiled expression, fails and then runs it interpreted. I tried to create a unit test for it (created an interface with only a getter, implemented a setter in an implementing class), and I fully expected the compiled expression to fail, but it actually succeeds. I'll try tweaking the test to reproduce it, maybe Matt has a webapp available to demonstrate it.
Hmm ok. I should be able to re-produce it with a test case then. I'll dig in further.
Ok, managed to create a test case that demonstrates the problem. Note that the result is different depending on the root object and that the same test succeeds if the "TestObject" doesn't implement "TestInterface".
From the svn commit: " ASTConst needed to cause unsupported compilation exceptions to be thrown when the first stack member is a constant during setter generations as constants aren't obviously CONSTANT and not changeable. "
Deployed as OGNL 2.7.3-SNAPSHOT on http://opencomponentry.com/repository/m2-snapshot-repo/ . | ||||||||||||||||||||||||||||||||||||||||||||||||||||