Bug 787751 - Call of isNew method via EL expression in Petclinic example throws exception
Summary: Call of isNew method via EL expression in Petclinic example throws exception
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Enterprise WFK Platform 2
Classification: Retired
Component: Spring
Version: 2.0.0.DR07
Hardware: Unspecified
OS: Unspecified
medium
medium
Target Milestone: ER2
: 2.1.0
Assignee: Marius Bogoevici
QA Contact: Tomas Repel
URL:
Whiteboard: petclinic
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-02-06 16:27 UTC by Tomas Repel
Modified: 2013-03-04 01:00 UTC (History)
4 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
The Petclinic application uses JSTL expressions which may fail to evaluate in environments that use newer Unified EL implementations. The expressions known to be in violation are: ${visit.new} found in src/main/webapp/WEB-INF/jsp/pets/visitForm.jsp and ${pet.new} found in src/main/webapp/WEB-INF/jsp/pets/form.jsp. If encountering an error message of the form: ${<variable>.new}" contains invalid expression(s): javax.el.ELException: Failed to parse the expression [${<variable>.new}], any occurrence of ${<variable>.new} needs to be replaced with ${<variable>['new']} For details, please consult the src/main/webapp/WEB-INF/jsp/owners/form.jsp page of the same application.
Clone Of:
Environment:
Last Closed: 2012-11-30 15:35:14 UTC
Type: ---


Attachments (Terms of Use)

Description Tomas Repel 2012-02-06 16:27:14 UTC
Description of problem:

In Petclinic example, the following code is broken:
<h2><c:if test="${owner.new}">New </c:if>Owner:</h2>
where Owner is a POJO Entity and isNew() boolean is available on its
ancestor. Similar call of isNew method is used for Pet and Visit entity too.

It happens because 'new' is reserved java keyword, which is now correctly recognized by EL parser.

Version-Release number of selected component (if applicable):

EAP DR12, WFK Demo DR07


How reproducible:

Always.

Steps to Reproduce:
1. Deploy petclinic.war
2. Go to find owners
3. Try to add an owner
  
Actual results:

** Root cause is: /WEB-INF/jsp/owners/form.jsp(8,4) "${owner.new}" contains invalid expression(s): javax.el.ELException: Failed to parse the expression [${owner.new}] org.apache.jasper.JasperException: /WEB-INF/jsp/owners/form.jsp(8,4) "${owner.new}" contains invalid expression(s): javax.el.ELException: Failed to parse the expression [${owner.new}] at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:198) at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1216) at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:862) at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377) at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2427) at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2433) at org.apache.jasper.compiler.Node$Root.accept(Node.java:495) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377) at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1793) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:360) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:607) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:312) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:253) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:541) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:151) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) at java.lang.Thread.run(Thread.java:679) Cookies: JSESSIONID=[uiwxNiYQ02qlL+c8VEOWzvqf] 

Expected results:

It passes.

Additional info:
see: https://bugzilla.redhat.com/show_bug.cgi?id=769624

Comment 1 Tomas Repel 2012-02-07 12:17:47 UTC
I've just find out that using ${owner.isNew()} is not working when petclinic.war is deployed on ews1-t5 and ews1-t6. Thus, quick fix can be ${owner['new']}. 

The following error occurs if using ${owner.isNew()} expression:


org.apache.jasper.JasperException: /WEB-INF/jsp/owners/form.jsp(4,4) The function isNew must be used with a prefix when a default namespace is not specified
	at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
	at org.apache.jasper.compiler.Validator$ValidateVisitor$1FVVisitor.visit(Validator.java:1506)
	at org.apache.jasper.compiler.ELNode$Function.accept(ELNode.java:129)
	at org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200)
	at org.apache.jasper.compiler.ELNode$Visitor.visit(ELNode.java:242)
	at org.apache.jasper.compiler.ELNode$Root.accept(ELNode.java:56)
	at org.apache.jasper.compiler.ELNode$Nodes.visit(ELNode.java:200)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.validateFunctions(Validator.java:1531)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1176)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:846)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
	at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
	at org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1763)
	at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:326)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
	at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
	at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:679)

Comment 4 Karel Piwko 2012-03-12 19:17:26 UTC
Not fixed for all the occurences in the example.

Comment 5 Marius Bogoevici 2012-03-13 17:14:55 UTC
Cannot reproduce on EAP6 ER3.

Comment 6 Marius Bogoevici 2012-03-13 17:15:46 UTC
(i.e. trying with visit or pet)

Comment 7 Marius Bogoevici 2012-03-13 17:17:00 UTC
OK, this is an *EWS* issue.

Comment 8 Marius Bogoevici 2012-03-14 04:19:44 UTC
    Technical note added. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    New Contents:
The Petclinic application uses JSTL expressions which may fail to evaluate in environments that use newer Unified EL implementations. The expressions known to be in violation are: ${visit.new} found in src/main/webapp/WEB-INF/jsp/pets/visitForm.jsp and ${pet.new} found in src/main/webapp/WEB-INF/jsp/pets/form.jsp. 

If encountering an error message of the form:

${<variable>.new}" contains invalid expression(s): javax.el.ELException: Failed to parse the expression [${<variable>.new}],

 any occurrence of ${<variable>.new} needs to be replaced with ${<variable>['new']}

For details, please consult the owner.jsp page of the same application.

Comment 9 Marek Novotny 2012-04-11 08:39:22 UTC
Marius, will we fix that issue/all occurences in owner.jsp file?

Comment 12 Tomas Repel 2012-06-21 14:48:40 UTC
    Technical note updated. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    Diffed Contents:
@@ -6,4 +6,4 @@
 
  any occurrence of ${<variable>.new} needs to be replaced with ${<variable>['new']}
 
-For details, please consult the owner.jsp page of the same application.+For details, please consult the src/main/webapp/WEB-INF/jsp/owners/form.jsp page of the same application.

Comment 14 Marius Bogoevici 2012-10-11 08:27:32 UTC
Fixed

Comment 16 Tomas Repel 2012-10-17 14:26:50 UTC
Verified in WFK 2.1.0.ER2

Comment 17 Karel Piwko 2012-11-30 15:35:14 UTC
Distributed as a part of WFK 2.1.0.GA release.


Note You need to log in before you can comment on or make changes to this bug.