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

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

    Description: 
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 
struts.xml file in 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


  was:
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


    
> 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 
> struts.xml file in 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