[ https://issues.apache.org/struts/browse/WW-2956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45506#action_45506 ]
Musachy Barroso commented on WW-2956: ------------------------------------- The try/catch part is good, but I think the check for null should stay in place, as long as there is a constructor of FileRevision that doesn't take a file parameter. For example, if the file cannot be read, then "file" will be set to null, in that method, and the NPE will be triggered. Trying to think outside the box, why keep track of a "file" that can never be reloaded anyway? If the file cannot be read, or it does not exists, we should not add it to the map at all. > setting devMode value to "true" causes NullPointerException > ----------------------------------------------------------- > > Key: WW-2956 > URL: https://issues.apache.org/struts/browse/WW-2956 > Project: Struts 2 > Issue Type: Bug > Affects Versions: 2.1.6 > Environment: Windows 2003 Server SP2, JRE 1.6.0_07, Tomcat 6.0.18 > Reporter: Semion Oshchepkov > Priority: Blocker > Fix For: 2.1.7 > > Attachments: WW-2956.patch > > > I enabled devMode in struts2-blank-2.1.6 application and it's caused such > deployment exception: > org.apache.catalina.core.StandardContext filterStart > SEVERE: Exception starting filter struts2 > java.lang.NullPointerException > at > com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209) > at > com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60) > at > com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325) > at > org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168) > at > com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220) > at > com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61) > at > org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774) > at > org.apache.struts2.dispatcher.ng.InitOperations.initStaticContentLoader(InitOperations.java:77) > at > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:49) > at > org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275) > at > org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397) > at > org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108) > at > org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709) > at > org.apache.catalina.core.StandardContext.start(StandardContext.java:4363) > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) > at > org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) > at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830) > at > org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719) > at > org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490) > at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) > at > org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) > at > org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) > at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) > at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) > at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) > at > org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) > at > org.apache.catalina.core.StandardService.start(StandardService.java:516) > at > org.apache.catalina.core.StandardServer.start(StandardServer.java:710) > at org.apache.catalina.startup.Catalina.start(Catalina.java:578) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) > at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) > Also struts2-showcase-2.1.6 (where devMode is default) throws same exception: > org.apache.catalina.core.StandardWrapperValve invoke > SEVERE: Servlet.service() for servlet jsp threw exception > java.lang.NullPointerException > at > com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209) > at > com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60) > at > com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325) > at > org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168) > at > com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220) > at > com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61) > at > org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774) > at > org.apache.struts2.dispatcher.ng.PrepareOperations.createActionContext(PrepareOperations.java:74) > at > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:59) > 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:128) > 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:286) > at > org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:857) > at > org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) > at > org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) > at java.lang.Thread.run(Unknown Source) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.