An invalid regex in the allow parameter leads to raising of a misleading exception: The property "allow" is not defined for filters of type "org.apache.catalina.filters.RemoteAddrFilter". Test config in web.xml <filter> <filter-name>TestFilter</filter-name> <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class> <init-param> <param-name>allow</param-name> <param-value>127\.0\.\0.1</param-value> </init-param> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping> Apr 22, 2014 3:50:10 PM org.apache.catalina.core.StandardContext filterStart SEVERE: Exception starting filter TestFilter javax.servlet.ServletException: The property "allow" is not defined for filters of type "org.apache.catalina.filters.RemoteAddrFilter" at org.apache.catalina.filters.FilterBase.init(FilterBase.java:53) at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:269) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
Confirmed. It seems that IntrospectionUtils.setProperty catches things like InvocationTargetException and logs them at the DEBUG level. I assert that such things should be logged at the WARN level. Without DEBUG logging enabled, a user cannot see the underlying error.
I looked into changing the current error message to better describe the problem and to mention enabling debug logs for more detail. The issue with that approach is there are a lot of 'normal' debug logs and a single error. Logging these errors as warnings seems appropriate to me. I have fixed this in 8.0.x for 8.0.6 onwards and in 7.0.x for 7.0.54 onwards.