Sorry for the wording,
Under artificial property I ment a property that is not appearing in
the component/page class as normal or abstract getter/setter.
Artificial property - property declared in the .jwc or .page files.
For example you might have a component called Basket
You will have a Basket.java -
public abstract class BasketComponent extends BaseComponent {
public abstract boolean isProperty();
}
Then you will have a component descriptor
Basket.jwc
<component .... ... ... class="... ... BasketComponent">
<property name="property"/>
<property name="artificialProperty" initial-value="false"/>
</component>
As you can see component has two properties "property" and
"artificial". One of them appears in the java class as abstract
getter, another one do not appear anywhere except component
specification, however component specification may contain a OGNL
expression with all it's properties:
In this case "property || artificialProperty" which brings the error.
Links to the source code:
Java class:
http://bookie.googlecode.com/svn/trunk/bookie-web/src/main/java/org/bookie/web/components/TabPanel.java
JWC descriptor:
http://bookie.googlecode.com/svn/trunk/bookie-web/src/main/webapp/WEB-INF/TabPanel.jwc
Error appearing in:
<component id="link" type="DirectLink">
<binding name="listener" value="listener:doClick"/>
<binding name="parameters" value="blockId"/>
<binding name="disabled" value="ognl: tabSelected || readonly"/>
<binding name="async" value="ognl: !(tabSelected || readonly)"/>
</component>
When evaluating
"ognl: tabSelected || readonly"
An exception has occurred.
You may continue by restarting the session.
[ +/- ] Exception: Unable to parse OGNL expression 'container.messages.getMessage(blockId)': Error compiling expression on object $TabPanel_13@6c67381[Home/betSlip.tabs] with expression node container.messages.getMessage(blockId) getter body: { return ((org.apache.hivemind.impl.AbstractMessages)(($TabPanel_13)$2).getContainer()).getMessages()).getMessage(((org.apache.tapestry.AbstractComponent)(($TabPanel_13)$2).getBlockId());} setter body: null
org.apache.tapestry.BindingException
Unable to parse OGNL expression 'container.messages.getMessage(blockId)': Error compiling expression on object $TabPanel_13@6c67381[Home/betSlip.tabs] with expression node container.messages.getMessage(blockId) getter body: { return ((org.apache.hivemind.impl.AbstractMessages)(($TabPanel_13)$2).getContainer()).getMessages()).getMessage(((org.apache.tapestry.AbstractComponent)(($TabPanel_13)$2).getBlockId());} setter body: null
binding: ExpressionBinding[Home/betSlip.tabs container.messages.getMessage(blockId)]
location: context:/WEB-INF/TabPanel.html, line 6
1 <div jwcid="@Any" id="ognl:id">
2 <div class="dynamic-tab-pane-control tab-pane">
3 <div class="tab-row">
4 <span jwcid="loop">
5 <span jwcid="activeTab">
6 <h2 class="tab selected" id="selectedTabHeader"><a jwcid="link"><span jwcid="@Insert" value="ognl:container.messages.getMessage(blockId)">Active</span></a></h2>
7 </span>
8 <span jwcid="passiveTab">
9 <h2 class="tab hover"><a jwcid="link2"><span jwcid="@Insert" value="ognl:container.messages.getMessage(blockId)">Passive</span></a></h2>
10 </span>
11 </span>
[ +/- ] Exception: Unable to parse OGNL expression 'container.messages.getMessage(blockId)': Error compiling expression on object $TabPanel_13@6c67381[Home/betSlip.tabs] with expression node container.messages.getMessage(blockId) getter body: { return ((org.apache.hivemind.impl.AbstractMessages)(($TabPanel_13)$2).getContainer()).getMessages()).getMessage(((org.apache.tapestry.AbstractComponent)(($TabPanel_13)$2).getBlockId());} setter body: null
org.apache.hivemind.ApplicationRuntimeException
Unable to parse OGNL expression 'container.messages.getMessage(blockId)': Error compiling expression on object $TabPanel_13@6c67381[Home/betSlip.tabs] with expression node container.messages.getMessage(blockId) getter body: { return ((org.apache.hivemind.impl.AbstractMessages)(($TabPanel_13)$2).getContainer()).getMessages()).getMessage(((org.apache.tapestry.AbstractComponent)(($TabPanel_13)$2).getBlockId());} setter body: null
[ +/- ] Exception: Error compiling expression on object $TabPanel_13@6c67381[Home/betSlip.tabs] with expression node container.messages.getMessage(blockId) getter body: { return ((org.apache.hivemind.impl.AbstractMessages)(($TabPanel_13)$2).getContainer()).getMessages()).getMessage(((org.apache.tapestry.AbstractComponent)(($TabPanel_13)$2).getBlockId());} setter body: null
org.apache.hivemind.ApplicationRuntimeException
Error compiling expression on object $TabPanel_13@6c67381[Home/betSlip.tabs] with expression node container.messages.getMessage(blockId) getter body: { return ((org.apache.hivemind.impl.AbstractMessages)(($TabPanel_13)$2).getContainer()).getMessages()).getMessage(((org.apache.tapestry.AbstractComponent)(($TabPanel_13)$2).getBlockId());} setter body: null
[ +/- ] Exception: Unable to add method java.lang.Object get(ognl.OgnlContext, java.lang.Object) to class ognl.ASTChain30213361Accessor: [source error] ; is missing
org.apache.hivemind.ApplicationRuntimeException
Unable to add method java.lang.Object get(ognl.OgnlContext, java.lang.Object) to class ognl.ASTChain30213361Accessor: [source error] ; is missing
[ +/- ] Exception: [source error] ; is missing
javassist.CannotCompileException
[source error] ; is missing
[ +/- ] Exception: ; is missing
javassist.compiler.CompileError
; is missing
lex: javassist.compiler.Lex@373a9c
Stack Trace:
* javassist.compiler.Parser.parseReturn(Parser.java:509)
* javassist.compiler.Parser.parseStatement(Parser.java:268)
* javassist.compiler.Parser.parseBlock(Parser.java:288)
* javassist.compiler.Parser.parseStatement(Parser.java:242)
* javassist.compiler.Javac.compileBody(Javac.java:203)
* javassist.CtBehavior.setBody(CtBehavior.java:341)
* javassist.CtBehavior.setBody(CtBehavior.java:316)
* org.apache.tapestry.enhance.ClassFabImpl.addMethod(ClassFabImpl.java:272)
* org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression(HiveMindExpressionCompiler.java:221)
* ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:388)
* ognl.Ognl.compileExpression(Ognl.java:123)
* org.apache.tapestry.services.impl.ExpressionCacheImpl.parse(ExpressionCacheImpl.java:129)
* org.apache.tapestry.services.impl.ExpressionCacheImpl.getCompiledExpression(ExpressionCacheImpl.java:91)
* $ExpressionCache_111907373cc.getCompiledExpression($ExpressionCache_111907373cc.java)
* org.apache.tapestry.binding.ExpressionBinding.resolveExpression(ExpressionBinding.java:120)
* org.apache.tapestry.binding.ExpressionBinding.getObject(ExpressionBinding.java:111)
* org.apache.tapestry.binding.AbstractBinding.getObject(AbstractBinding.java:84)
* $Insert_5.getValue($Insert_5.java)
* org.apache.tapestry.components.Insert.renderComponent(Insert.java:48)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:525)
* org.apache.tapestry.link.DefaultLinkRenderer.renderLink(DefaultLinkRenderer.java:97)
* org.apache.tapestry.link.AbstractLinkComponent.renderComponent(AbstractLinkComponent.java:94)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:525)
* org.apache.tapestry.components.IfBean.renderComponent(IfBean.java:96)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:525)
* org.apache.tapestry.components.ForBean.renderComponent(ForBean.java:181)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:525)
* org.apache.tapestry.components.Any.renderComponent(Any.java:53)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:525)
* org.apache.tapestry.components.Block.renderForComponent(Block.java:65)
* org.apache.tapestry.components.RenderBlock.renderComponent(RenderBlock.java:65)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:525)
* org.apache.tapestry.html.Body.renderComponent(Body.java:38)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:525)
* org.apache.tapestry.html.Shell.renderComponent(Shell.java:64)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:184)
* org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:92)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:712)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:182)
* org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:237)
* org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:397)
* org.apache.tapestry.services.impl.DefaultResponseBuilder.renderResponse(DefaultResponseBuilder.java:158)
* org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(ResponseRendererImpl.java:33)
* $ResponseRenderer_11190737293.renderResponse($ResponseRenderer_11190737293.java)
* $ResponseRenderer_11190737292.renderResponse($ResponseRenderer_11190737292.java)
* org.apache.tapestry.engine.HomeService.service(HomeService.java:68)
* $IEngineService_11190737310.service($IEngineService_11190737310.java)
* org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:77)
* org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:72)
* org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:246)
* org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54)
* $WebRequestServicer_111907372e8.service($WebRequestServicer_111907372e8.java)
* org.apache.tapestry.services.impl.DisableCachingFilter.service(DisableCachingFilter.java:54)
* $WebRequestServicerFilter_111907372ea.service($WebRequestServicerFilter_111907372ea.java)
* $WebRequestServicer_111907372ec.service($WebRequestServicer_111907372ec.java)
* $WebRequestServicer_111907372e4.service($WebRequestServicer_111907372e4.java)
* org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:61)
* $ServletRequestServicer_111907372ca.service($ServletRequestServicer_111907372ca.java)
* org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
* $ServletRequestServicerFilter_111907372c6.service($ServletRequestServicerFilter_111907372c6.java)
* $ServletRequestServicer_111907372cc.service($ServletRequestServicer_111907372cc.java)
* org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
* $ServletRequestServicerFilter_111907372c4.service($ServletRequestServicerFilter_111907372c4.java)
* $ServletRequestServicer_111907372cc.service($ServletRequestServicer_111907372cc.java)
* org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
* $ServletRequestServicerFilter_111907372c8.service($ServletRequestServicerFilter_111907372c8.java)
* $ServletRequestServicer_111907372cc.service($ServletRequestServicer_111907372cc.java)
* $ServletRequestServicer_111907372be.service($ServletRequestServicer_111907372be.java)
* org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
* org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:104)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
* org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:459)
* org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
* org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:231)
* org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:629)
* org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:453)
* org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
* org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
* org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
* org.mortbay.jetty.Server.handle(Server.java:303)
* org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:452)
* org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:721)
* org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:509)
* org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
* org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:349)
* org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:320)
* org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)