Default validator configuration should not override user specified configuration ---------------------------------------------------------------------------------
Key: SHALE-489 URL: https://issues.apache.org/struts/browse/SHALE-489 Project: Shale Issue Type: Improvement Components: Validator Affects Versions: 1.0.4 Environment: Any Reporter: Jeff Tsay Priority: Minor It seems strange the way that configuration rules are loaded. If the default configuration file is not found, the validator lifecycle listener will add the default configuration file to the end of a url list. However, since the list is processed in forward order, that means if you leave out the default configuration file, any settings you have in your own file will be overwritten by the default. That means you need to explicitly put the default configuration file in your org.apache.shale.validator.VALIDATOR_RULES list before your own files. Since I think it makes more sense to have your specified configuration files override the default settings, I propose the following change in ValidatorLifeCycleListener: private ValidatorResources validatorResources(ServletContext context) throws IOException, SAXException { // Process the explicitly configured resources (if any) // jtsay // Since we want to add to the beginning later, use a linked list // ArrayList urls = new ArrayList() LinkedList urls = new LinkedList(); ... // Process the default configuration resources (if not already loaded) if (!didDefault) { try { url = context.getResource(Globals.DEFAULT_VALIDATOR_RULES); } catch (MalformedURLException e) { throw new IllegalArgumentException("MalformedURLException:" + " The URL '" + Globals.DEFAULT_VALIDATOR_RULES + "' specified as a validator rules resource is malformed."); } if (url == null) { url = ValidatorLifecycleListener.class.getResource(Globals.DEFAULT_VALIDATOR_RULES); } if (url == null) { throw new IllegalArgumentException(Globals.DEFAULT_VALIDATOR_RULES); } // jtsay // Add to beginning of list so that explicit resources override // default, not the other way around. urls.addFirst(url); } Also below, there is some code to iterate over all elements in the list. Since the list is now a LinkedList it is not efficient to iterate using an array index. So the replaced code should like this: int i = 0; for (Iterator it = urls.iterator(); it.hasNext(); i++) { array[i] = ((URL) it.next()).toExternalForm(); } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.