[KULRICE-13208] AFT Failure DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapprove freemarker exception Created: 09/Sep/14  Updated: 24/Sep/14  Resolved: 11/Sep/14

Status: Closed
Project: Kuali Rice Development
Component/s: Development, Regression
Affects Version/s: 2.5
Fix Version/s: 2.5
Security Level: Public (Public: Anyone can view)

Type: Bug Fix Priority: Critical
Reporter: Erik Meade Assignee: Jeff Ruch
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: PNG File 2014-09-08-21-13-31-DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapproveBookmark.png    
Issue Links:
Discovered
discovered by KULRICE-13751 CI Analysis QA 2.5.0-m7 Sprint 1 Closed
Similar issues:
KULRICE-13107Intermittent AFT Failure LabsKsaTransactionAft freemarker exception
KULRICE-12890AFT Failure LabsViewFixedContainerAft and LabsViewFluidContainerAft freemarker exception
KULRICE-13073AFT Failure: Pages not loading - freemarker exception in logs
KULRICE-10421AFT Failure: DemoLibraryCollectionFeaturesLightTableSmokeTest inline freemarker exception
KULRICE-12976AFT Failure LabsLookupSecurityTravelAuthorizationDocumentAuthorizedAft FreeMarker template error
KULRICE-11140AFT Failure KRAD Demo Labs KSA Transaction inline Freemarker Exception
KULRICE-12258AFT Failure DemoContainerTreeGroupAft doesn't render Freemarker Exception in logs spring.ftl
KULRICE-13128AFT Failure LabsView ContainerAfts Freemarker Exception Invalid property 'backdoorId'
KULRICE-13780Create Freemarker 404 AFT
KULRICE-11536AFT Failure Rice Sampleapp Krad Configuration clicking all day checkbox inline Freemarker exception
Sprint: Core 2.5.0-m7 Sprint 1, Core 2.5.0-rc Sprint 1
KAI Review Status: Not Required
KTI Review Status: Not Required
Code Review Status: Not Required
Story Points: 1

 Description   

AFT Step: Open http://env14.rice.kuali.org/kr-krad/kradsampleapp?viewId=KradSampleAppHome
AFT Step: Click Demo Link
AFT Step: Click Travel Authorization Document link.
AFT Step: Document Number is 3224
AFT Step: Type into document.documentHeader.documentDescription the text: Test Pessimistic Locking
AFT Step: Type into document.cellPhoneNumber the text: 555-555-5555
AFT Step: Click Search button.
AFT Step: Click return value link.
AFT Step: Click Save button.
AFT Step: Is text 'Document was successfully saved.' present? true
AFT Step: Is text 'Document was successfully saved.' present? true
AFT Step: Click Ad Hoc Recipients link.
AFT Step: Select APPROVE from newCollectionLines['document.adHocRoutePersons'].actionRequested
AFT Step: Type into newCollectionLines['document.adHocRoutePersons'].id the text: edna
AFT Step: Click Ad Hoc Recipients link.
AFT Step: Click Submit button.
AFT Step: Click OK Confirmation
AFT Step: Is text 'Document was successfully submitted.' present? true
AFT Step: Is text 'Document was successfully submitted.' present? true
AFT Step: Click Close button.
AFT Step: Type into backdoorId the text: edna
AFT Step: Click Backdoor Login
AFT Step: Click Disapprove button.
AFT Step: Type into dialogExplanations['DisapproveExplanationDialog'] the text: Document incomplete

Change set for failure: http://ci.kuali.org/job/rice-2.5-test-functional-env14-jenkins-krad-sampleapp/208/changes
Abbreviated test name: DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapproveNav
Full test name: org.kuali.rice.krad.demo.travel.application.DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapproveNav
Test results url: http://ci.kuali.org/job/rice-2.5-test-functional-env14-jenkins-krad-sampleapp/lastCompletedBuild/testReport/org.kuali.rice.krad.demo.travel.application/DemoTravelAuthorizationPessimisticLockingAft/testPessimisticLockingUnlockingOnDisapproveNav/

Abbreviated test name: DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapproveBookmark
Full test name: org.kuali.rice.krad.demo.travel.application.DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapproveBookmark
Test results url: http://ci.kuali.org/job/rice-2.5-test-functional-env14-jenkins-krad-sampleapp/lastCompletedBuild/testReport/org.kuali.rice.krad.demo.travel.application/DemoTravelAuthorizationPessimisticLockingAft/testPessimisticLockingUnlockingOnDisapproveBookmark/

StackTrace: FreeMarker template error:
The following has evaluated to null or missing:
==> view.additionalMetaTags [in template "krad/WEB-INF/ftl/lib/html.ftl" at line 26, column 12]
Tip: If the failing expression is known to be legally null/missing, either specify a default value with myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing<!--#if-->. (These only cover the last step of the expression; to cover the whole expression, use parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
The failing instruction (FTL stack trace):
----------
==> #list view.additionalMetaTags as tag [in template "krad/WEB-INF/ftl/lib/html.ftl" in macro "html" at line 26, column 5]
@krad.html view=view [in template "krad/WEB-INF/ftl/fullView.ftl" at line 18, column 1]
#include "fullView.ftl" [in template "krad/WEB-INF/ftl/uifRender.ftl" at line 69, column 9]
#else [in template "krad/WEB-INF/ftl/uifRender.ftl" at line 68, column 5]
----------
Java stack trace (for programmers):
----------
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98)
at freemarker.core.Expression.assertNonNull(Expression.java:205)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:100)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.MixedContent.accept(MixedContent.java:93)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.Macro$Context.runMacro(Macro.java:209)
at freemarker.core.Environment.visit(Environment.java:694)
at freemarker.core.UnifiedCall.accept(UnifiedCall.java:116)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.MixedContent.accept(MixedContent.java:93)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.Environment.include(Environment.java:1712)
at freemarker.core.Include.accept(Include.java:172)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.IfBlock.accept(IfBlock.java:84)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.MixedContent.accept(MixedContent.java:93)
at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
at freemarker.core.Environment.visitAndTransform(Environment.java:377)
at freemarker.core.CompressedBlock.accept(CompressedBlock.java:73)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.MixedContent.accept(MixedContent.java:93)
at freemarker.core.Environment.visit(Environment.java:265)
at freemarker.core.Environment.process(Environment.java:243)
at freemarker.template.Template.process(Template.java:277)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)
at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)
at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1201)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:986)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:933)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.kuali.rice.krad.web.filter.CharsetFilter.doFilter(CharsetFilter.java:58)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.kuali.rice.krad.web.filter.UserLoginFilter.doFilter(UserLoginFilter.java:89)
at org.kuali.rice.krad.web.filter.UserLoginFilter.doFilter(UserLoginFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.kuali.rice.krad.web.filter.BootstrapFilterChain.doFilter(BootstrapFilter.java:327)
at org.kuali.rice.krad.web.filter.DummyLoginFilter.doFilter(DummyLoginFilter.java:82)
at org.kuali.rice.krad.web.filter.DummyLoginFilter.doFilter(DummyLoginFilter.java:62)
at org.kuali.rice.krad.web.filter.BootstrapFilterChain.doFilter(BootstrapFilter.java:320)
at org.kuali.rice.krad.web.filter.BootstrapFilter.doFilter(BootstrapFilter.java:199)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.kuali.rice.krad.web.filter.UifSessionTimeoutFilter.doFilter(UifSessionTimeoutFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:206)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:179)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.kuali.rice.core.web.Log4JContextClearingFilter.doFilterInternal(Log4JContextClearingFilter.java:37)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.kuali.rice.krad.web.filter.HideWebInfFilter.doFilter(HideWebInfFilter.java:68)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:214)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722
	at org.junit.Assert.fail(Assert.java:88)
	at org.kuali.rice.testtools.selenium.JiraAwareAftBase.fail(JiraAwareAftBase.java:409)
	at org.kuali.rice.testtools.common.JiraAwareFailureUtils.fail(JiraAwareFailureUtils.java:144)
	at org.kuali.rice.testtools.selenium.JiraAwareAftBase.jiraAwareFail(JiraAwareAftBase.java:564)
	at org.kuali.rice.testtools.selenium.JiraAwareAftBase.jiraAwareFail(JiraAwareAftBase.java:514)
	at org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils.checkForIncidentReport(AutomatedFunctionalTestUtils.java:159)
	at org.kuali.rice.testtools.selenium.WebDriverAftBase.checkForIncidentReport(WebDriverAftBase.java:481)
	at org.kuali.rice.testtools.selenium.JiraAwareAftBase.waitAndType(JiraAwareAftBase.java:796)
	at org.kuali.rice.testtools.selenium.WebDriverAftBase.waitAndType(WebDriverAftBase.java:1509)
	at org.kuali.rice.testtools.selenium.WebDriverAftBase.waitAndTypeByName(WebDriverAftBase.java:1529)
	at org.kuali.rice.testtools.selenium.WebDriverLegacyITBase.impersonateUser(WebDriverLegacyITBase.java:461)
	at org.kuali.rice.krad.demo.travel.application.DemoTravelAuthorizationPessimisticLockingAft.openTravelAuthorization(DemoTravelAuthorizationPessimisticLockingAft.java:297)
	at org.kuali.rice.krad.demo.travel.application.DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapprove(DemoTravelAuthorizationPessimisticLockingAft.java:223)
	at org.kuali.rice.krad.demo.travel.application.DemoTravelAuthorizationPessimisticLockingAft.testPessimisticLockingUnlockingOnDisapproveBookmark(DemoTravelAuthorizationPessimisticLockingAft.java:352)


 Comments   
Comment by Jeff Ruch [ 10/Sep/14 ]

Looks like this maybe caused by a bad url per https://jira.kuali.org/browse/KULRICE-12268. Will attempt to reproduce and trace the url.

Comment by Jeff Ruch [ 10/Sep/14 ]

Fails on:

open('http://localhost:8080/krad-dev/kew/DocHandler.do?command=displayDocSearchView&docId=3091');

Comment by Jeff Ruch [ 10/Sep/14 ]

After the backdoor login, the post_bind sets the referrer to 'NO_RETURN' which is then getting passed into the url. The close button becomes 'http://localhost:8080/krad-dev/kr-krad/NO_RETURN?methodToCall=refresh' which causes the 404/Freemarker error.

Comment by Jeff Ruch [ 10/Sep/14 ]

The source of this issue relates to the KULRICE-10889 - refactoring of controllers into controller services. During the refactor, the NO_RETURN constant was set to "NO_RETURN". In UifFormBase#postBind, the following code sets the return location to "NO_RETURN" if the return location and referred is blank.

        if (StringUtils.isBlank(referer) && StringUtils.isBlank(getReturnLocation())) {
            setReturnLocation(UifConstants.NO_RETURN);
        } else if (StringUtils.isBlank(getReturnLocation())) {
            setReturnLocation(referer);
        }

Setting the NO_RETURN constant to "" resolves the issue.

Comment by Jeff Ruch [ 10/Sep/14 ]

A quick search of the NO_RETURN constant showed only being used in UifFormBase#postBind. I am fairly comfortable that this change will not impact other functionality.

Generated at Wed Jul 15 02:42:55 CDT 2020 using JIRA 6.1.5#6160-sha1:a61a0fc278117a0da0ec9b89167b8f29b6afdab2.