[
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