Index: C:/dev/workspace/xwork-trunk/src/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java =================================================================== --- C:/dev/workspace/xwork-trunk/src/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java (revision 1463) +++ C:/dev/workspace/xwork-trunk/src/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java (working copy) @@ -222,7 +222,7 @@ } public void loadPackages() throws ConfigurationException { - List reloads = new ArrayList(); + List reloads = new ArrayList(); for (Document doc : documents) { Element rootElement = doc.getDocumentElement(); NodeList children = rootElement.getChildNodes(); @@ -239,88 +239,55 @@ if (nodeName.equals("package")) { PackageConfig cfg = addPackage(child); if (cfg.isNeedsRefresh()) { - reloads.add(new ReloadPackage(doc, child)); + reloads.add(child); } } } } - loadExtraConfiguration(doc); } if (reloads.size() > 0) { reloadRequiredPackages(reloads); } - reloads.clear(); + for (Document doc : documents) { + loadExtraConfiguration(doc); + } + documents.clear(); configuration = null; } - private void reloadRequiredPackages(List reloads) { - List result = new ArrayList(); - if ( reloads.size() > 0) { - for (ReloadPackage pkg : reloads) { - Document doc = pkg.getDoc(); - Element rootElement = doc.getDocumentElement(); - NodeList children = rootElement.getChildNodes(); - int childSize = children.getLength(); - - for (int i = 0; i < childSize; i++) { - Node childNode = children.item(i); - - if (childNode instanceof Element) { - Element child = (Element) childNode; - - final String nodeName = child.getNodeName(); - - if (nodeName.equals("package")) { - PackageConfig cfg = addPackage(child); - if (cfg.isNeedsRefresh()) { - result.add(new ReloadPackage(doc, child)); - } - } - } + private void reloadRequiredPackages(List reloads) { + if (reloads.size() > 0) { + List result = new ArrayList(); + for (Element pkg : reloads) { + PackageConfig cfg = addPackage(pkg); + if (cfg.isNeedsRefresh()) { + result.add(pkg); } - loadExtraConfiguration(doc); } - } - if ( result.size() > 0 && reloads.size() > result.size() && result.size() != reloads.size()) { - reloadRequiredPackages(result); - } + + if ((result.size() > 0) && (result.size() != reloads.size())) { + reloadRequiredPackages(result); + return; + } - // Print out error messages for all misconfigured inheritence packages - if (result.size() > 0 ) { - for (ReloadPackage rp : result) { - String parent = rp.getChild().getAttribute("extends"); - if ( parent != null) { - List parents = ConfigurationUtil.buildParentsFromString(configuration, parent); - if (parents != null && parents.size() <= 0) { - LOG.error("Unable to find parent packages " + parent); + // Print out error messages for all misconfigured inheritence packages + if (result.size() > 0 ) { + for (Element rp : result) { + String parent = rp.getAttribute("extends"); + if ( parent != null) { + List parents = ConfigurationUtil.buildParentsFromString(configuration, parent); + if (parents != null && parents.size() <= 0) { + LOG.error("Unable to find parent packages " + parent); + } } } } } } - private class ReloadPackage { - Element child; - Document doc; - - public ReloadPackage(Document doc, Element child) { - this.child = child; - this.doc = doc; - } - - public Element getChild() { - return child; - } - - public Document getDoc() { - return doc; - } - } - - /** * Tells whether the ConfigurationProvider should reload its configuration. This method should only be called * if ConfigurationManager.isReloadingConfigs() is true.