[ 
https://issues.apache.org/jira/browse/WW-3956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13543637#comment-13543637
 ] 

Lukasz Lenart commented on WW-3956:
-----------------------------------

This is what I get when specified a wrong pattern - devMode is set to false

{code:xml}
<constant name="struts.action.excludePattern" value="*"/>
{code}

{noformat}
2013-01-04 07:24:26.077::WARN:  failed struts2: 
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
2013-01-04 07:24:26.077::WARN:  Failed startup of context 
org.mortbay.jetty.plugin.Jetty6PluginWebAppContext@7c959fa1{/struts2-tiles,/Users/lukaszlenart/Projects/Temps/struts2-tiles-demo/src/main/webapp}
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
        at java.util.regex.Pattern.error(Pattern.java:1713)
        at java.util.regex.Pattern.sequence(Pattern.java:1878)
        at java.util.regex.Pattern.expr(Pattern.java:1752)
        at java.util.regex.Pattern.compile(Pattern.java:1460)
        at java.util.regex.Pattern.<init>(Pattern.java:1133)
        at java.util.regex.Pattern.compile(Pattern.java:823)
        at 
org.apache.struts2.dispatcher.ng.InitOperations.buildExcludedPatternsList(InitOperations.java:130)
        at 
org.apache.struts2.dispatcher.ng.InitOperations.buildExcludedPatternsList(InitOperations.java:122)
        at 
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:56)
        at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
        at 
org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
        at 
org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
        at 
org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
        at 
org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
        at 
org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
        at org.mortbay.jetty.Server.doStart(Server.java:224)
        at 
org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
        at 
org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
        at 
org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:441)
        at 
org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:383)
        at 
org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)
        at 
org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)
        at 
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at 
org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at 
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
{noformat}
                
> (nearly) silent failure of filter initialization if 
> struts.action.excludePattern contains invalid regexp
> --------------------------------------------------------------------------------------------------------
>
>                 Key: WW-3956
>                 URL: https://issues.apache.org/jira/browse/WW-3956
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Dispatch Filter
>    Affects Versions: 2.3.8
>         Environment: all
>            Reporter: Horváth, Ákos Péter
>             Fix For: 2.3.9
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> If the struts.action.excludePatterns constant contains an invalid regexp (for 
> example, it begins with a "*"), the dispatcher can't initialize, but only an 
> "Error filterStart" message will be logged, and the web app won't work. Imho, 
> the expected behavior were a stack trace or a more descriptive error message.
> The cause of the problem: the buildExcludedPatternList() method of 
> org.apache.struts2.dispatcher.ng.InitOperations builds a compiled pattern 
> list of the comma-separated patterns given in this constant with 
> java.util.regex.Pattern.compile() . This emits an IllegalArgumentException or 
> a PatternSyntaxException, if invalid regexp is given, but this exception 
> somewhere silently disappears on his way to the log.
> ---------------
> I suggest to make a minimal example in the documentation:
> ".*\.(css|js|gif|png|jpg|html)$" or "^/static/"
> is what most developer want from this constant. For me took hours to 
> investigate this. Googling for "struts.action.excludePattern" reveals a lot 
> of confusion about this, too. The greatest source of the confusion is that it 
> isn't clear, and isn't anywhere documented, which is the exact regexp syntax 
> here to apply. For example: pattern matching or regular expression, "^" and 
> "$" are valid or not, they are needed or not, "." matches only "." or any 
> character, etc. I think, the original inaccuracy was committed by sun, when 
> they named a class as "Pattern", which operates with regexps. What you here 
> can do, is a single-line minimal-example in the doc, which will explain 
> everything.
> Thank you,
> PH

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