Uploaded image for project: 'Struts 2'
  1. Struts 2
  2. WW-4302

XmlConfigurationProvider.loadedFileUrls only contains the last one of urls with same file name

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 2.3.16.1
    • 2.3.20
    • XML Configuration

    Description

      In XmlConfigurationProvider, the field loadedFileUrls contains the xml files loaded. The loaded files will be checked if they are modified for configuration reloading.

          public boolean needsReload() {
      
              for (String url : loadedFileUrls) {
                  if (fileManager.fileNeedsReloading(url)) {
                      return true;
                  }
              }
              return false;
          }
      

      But in method private List<Document> loadConfigurationFiles(String fileName, Element includeElement), after the while (urls.hasNext()) loop, the variable url is assigned by the last one of urls with same file name.

      So when loadedFileUrls.add(url.toString()); is called in the for (Document doc : docs) loop, only THE LAST ONE is added to loadedFileUrls.

      I wrote a demo. I set <constant name="struts.configuration.xml.reload" value="true"/>
      . I wrote two configuration files: struts-plugin.xml and struts-biz.xml in my web project. I use struts plugins such as struts-spring-plugin, struts-json-plugin and so on.

      The reloading works when I changed the file struts-biz.xml in my project. But it does not work when I changed struts-plugin.xml in my project. I debug XmlConfigurationProvider and see only the struts-plugin.xml in struts-spring-plugin is contained in loadedFileUrls.

      I tried to fix it by moving the loadedFileUrls.add(url.toString()); into the while (urls.hasNext()) loop. I send a pull request in github: https://github.com/apache/struts/pull/6, and I test it running well.

      Attachments

        Activity

          People

            lukaszlenart Lukasz Lenart
            liang.liu Liang Liu
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: