[ 
https://issues.apache.org/jira/browse/WW-4209?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Greg Huber updated WW-4209:
---------------------------

    Attachment: patch.txt

The patch of the modification to check for other files.
                
> struts.xml not found when using tomcat Virtual webapp
> -----------------------------------------------------
>
>                 Key: WW-4209
>                 URL: https://issues.apache.org/jira/browse/WW-4209
>             Project: Struts 2
>          Issue Type: Improvement
>    Affects Versions: 2.3.15.1
>         Environment: Tomcat 7/Centos 6.4
>            Reporter: Greg Huber
>            Priority: Minor
>         Attachments: patch.txt
>
>
> Hello, 
> I would like to use tomcats virtual webapp functionality 
> (http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Virtual_webapp) 
> in my mavenised struts application but there is an issue where it cannot find 
> the struts.xml file.  Basically using the virtual webbapp its adds 
> alternative class folders where stuff comes from.
> ie project/src/main/webapp and project/target/classes;
> Basically its throwing a IllegalArgumentException 
> com.opensymphony.xwork2.util.fs.DefaultFileManager when it cannot find the 
> file project/src/main/webapp/WEB-INF/classes.
> <code>
> private InputStream openFile(URL fileUrl) {
>         try {
>             InputStream is = fileUrl.openStream();
>             if (is == null) {
>                 throw new IllegalArgumentException("No file '" + fileUrl + "' 
> found as a resource");
>             }
>             return is;
>         } catch (IOException e) {
>             throw new IllegalArgumentException("No file '" + fileUrl + "' 
> found as a resource");
>         }
>     }
> </code>
> and then not checking the rest of the found resources in 
> project/target/classes
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
> <code>
> URL url = null;
>             while (urls.hasNext()) {
>                 try {
>                     url = urls.next();
>                     is = fileManager.loadFile(url);
>                     InputSource in = new InputSource(is);
>                     in.setSystemId(url.toString());
>                     docs.add(DomHelper.parse(in, dtdMappings));
>                 } catch (XWorkException e) {
>                     if (includeElement != null) {
>                         throw new ConfigurationException("Unable to load " + 
> url, e, includeElement);
>                     } else {
>                         throw new ConfigurationException("Unable to load " + 
> url, e);
>                     }
>                 } catch (Exception e) {
>                     throw new ConfigurationException("Caught exception while 
> loading file " + fileName, e, includeElement);
>                 } finally {
>                     if (is != null) {
>                         try {
>                             is.close();
>                         } catch (IOException e) {
>                             LOG.error("Unable to close input stream", e);
>                         }
>                     }
>                 }
>             }
> <code>
> To make it work I modified above to:
> <code>
> // Catch the exception
>             ConfigurationException theException = null;
>             URL url = null;
>             while (urls.hasNext()) {
>                 try {
>                     url = urls.next();
>                     is = fileManager.loadFile(url);
>                     InputSource in = new InputSource(is);
>                     in.setSystemId(url.toString());
>                     docs.add(DomHelper.parse(in, dtdMappings));
>                     
>                     theException = null;
>                     
>                 } catch (XWorkException e) {
>                     if (includeElement != null) {
>                         //throw new ConfigurationException("Unable to load " 
> + url, e, includeElement);
>                         theException = new ConfigurationException("Unable to 
> load " + url, e, includeElement);
>                     } else {
>                         //throw new ConfigurationException("Unable to load " 
> + url, e);
>                         theException = new ConfigurationException("Unable to 
> load " + url, e);
>                     }
>                 } catch (Exception e) {
>                     //throw new ConfigurationException("Caught exception 
> while loading file " + fileName, e, includeElement);
>                     theException = new ConfigurationException("Caught 
> exception while loading file " + fileName, e, includeElement);
>                 } finally {
>                     if (is != null) {
>                         try {
>                             is.close();
>                         } catch (IOException e) {
>                             LOG.error("Unable to close input stream", e);
>                         }
>                     }
>                 }
>             }
>             
>             // OK bail out as resource not found
>             if ( theException != null) {
>                               throw theException;
>                       }
> </code>
> ie try the rest of the files and then if not found give up and throw the 
> exception.
> Cheers Greg

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to