Bug 787751

Summary: Call of isNew method via EL expression in Petclinic example throws exception
Product: [Retired] JBoss Enterprise WFK Platform 2 Reporter: Tomas Repel <trepel>
Component: SpringAssignee: Marius Bogoevici <mariusb>
Status: CLOSED CURRENTRELEASE QA Contact: Tomas Repel <trepel>
Severity: medium Docs Contact:
Priority: medium    
Version: 2.0.0.DR07CC: kpiwko, mnovotny, rruss, trepel
Target Milestone: ER2   
Target Release: 2.1.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard: petclinic
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.
Story Points: ---
Clone Of: Environment:
Last Closed: 2012-11-30 15:35:14 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

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.