[ https://issues.apache.org/jira/browse/WW-5402?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17842894#comment-17842894 ]
Patrice DUROUX commented on WW-5402: ------------------------------------ Hi, In my case, simply switching from 6.3.0.2 to 6.4.0 introduces a regression that seems to me related to this issue and I do not see any Migration Guide for 6.4.0 related to that. Here is the runtime exception: {{10:37:50.377 [http-nio-8080-exec-2] WARN org.apache.struts2.views.tiles.TilesResult - could not find @TilesDefinition for action: }} {{10:37:50.385 [http-nio-8080-exec-2] ERROR org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler - Exception occurred during processing request: Cannot find definition named 'XXXXXXXX'}} {{org.apache.tiles.core.definition.NoSuchDefinitionException: Cannot find definition named 'XXXXXXXX'}} {{ at org.apache.tiles.core.impl.mgmt.CachingTilesContainer.render(CachingTilesContainer.java:108) ~[struts2-tiles-plugin-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.views.tiles.TilesResult.doExecute(TilesResult.java:140) ~[struts2-tiles-plugin-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.result.StrutsResultSupport.execute(StrutsResultSupport.java:206) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:377) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:284) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.imgt.util.AuthenticationInterceptor.intercept(AuthenticationInterceptor.java:59) ~[classes/:?]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.imgt.util.MapInterceptor.intercept(MapInterceptor.java:110) ~[classes/:?]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:260) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:179) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.FetchMetadataInterceptor.intercept(FetchMetadataInterceptor.java:78) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.CoopInterceptor.intercept(CoopInterceptor.java:57) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.CoepInterceptor.intercept(CoepInterceptor.java:55) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:143) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.parameter.ParametersInterceptor.doIntercept(ParametersInterceptor.java:204) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.parameter.ParametersInterceptor.doIntercept(ParametersInterceptor.java:204) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:202) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:67) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:133) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:89) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.ActionFileUploadInterceptor.intercept(ActionFileUploadInterceptor.java:142) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:200) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:101) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:142) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:161) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:175) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.csp.CspInterceptor.intercept(CspInterceptor.java:60) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:140) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.httpmethod.HttpMethodInterceptor.intercept(HttpMethodInterceptor.java:99) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:154) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:229) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:196) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.executeConditional(DefaultActionInvocation.java:299) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48) ~[struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:703) [struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79) [struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.handleRequest(StrutsPrepareAndExecuteFilter.java:157) [struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.tryHandleRequest(StrutsPrepareAndExecuteFilter.java:140) [struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:128) [struts2-core-6.4.0.jar:6.4.0]}} {{ at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:169) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [catalina.jar:9.0.88]}} {{ at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346) [catalina.jar:9.0.88]}} {{ at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) [tomcat-coyote.jar:9.0.88]}} {{ at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) [tomcat-coyote.jar:9.0.88]}} {{ at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) [tomcat-coyote.jar:9.0.88]}} {{ at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1786) [tomcat-coyote.jar:9.0.88]}} {{ at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) [tomcat-coyote.jar:9.0.88]}} {{ at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-util.jar:9.0.88]}} {{ at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-util.jar:9.0.88]}} {{ at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) [tomcat-util.jar:9.0.88]}} {{ at java.base/java.lang.Thread.run(Thread.java:840) [?:?]}} The {{/WEB-INF/tiles.xml}} of this module has not been moved or modified. Any thing I can do to help on this? > Auto loading the Tiles definition files from the classpath dependent JAR > ------------------------------------------------------------------------ > > Key: WW-5402 > URL: https://issues.apache.org/jira/browse/WW-5402 > Project: Struts 2 > Issue Type: New Feature > Components: Plugin - Tiles > Affects Versions: 6.3.0 > Reporter: Saravanan Sivaguru > Priority: Major > Fix For: 6.4.0 > > Time Spent: 50m > Remaining Estimate: 0h > > Hi Team > Currently we are able to load all the tiles definition files if it is > available under the WEB-INF folder with file name convention tiles*.xml. But > we are unable to load the tiles definition files which is available as a part > of the dependent jar files /WEB-INF/lib folders even though the file name > convention starts with tiles*.xml > Need to enhance the feature to also look on the associated library files for > the tiles definitions. > (OR) > We need to enhance the another existing approach of defining the tiles > definition files with the below param, > org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG > With this param currently we cannot load the tiles definition files unless we > have defined the parameter value as complete actual file path > Current acceptance - /WEB-INF/config/tiles/com.acnielsen.ftms.tiles.xml > Proposed (Wildcard usage)- /WEB-INF/config/tiles/*.tiles.xml > Additionally the current definition scope will only scan files within > application again it is not scanning on the lib files available under the > classpath > Proposed - classpath*:/META-INF/*.tiles.xml -- This message was sent by Atlassian Jira (v8.20.10#820010)