2525import net .sourceforge .stripes .action .ActionBean ;
2626import net .sourceforge .stripes .controller .DynamicMappingFilter ;
2727import net .sourceforge .stripes .controller .StripesFilter ;
28+ import net .sourceforge .stripes .exception .ExceptionHandler ;
2829import net .sourceforge .stripes .util .Log ;
2930
3031
@@ -58,9 +59,7 @@ public StripesEndpoint stripesEndpoint( final FilterRegistrationBean< StripesFil
5859 @ Bean ( name = "stripesFilter" )
5960 @ ConditionalOnMissingBean ( name = "stripesFilter" )
6061 public FilterRegistrationBean < StripesFilter > stripesFilter ( @ Qualifier ( "urlPatternsForStripesFilter" ) final List < String > urlPatternsForStripesFilter ) {
61- final StripesFilter filter = new StripesFilter ();
62-
63- final Map < String , String > params = new HashMap < String , String >();
62+ final Map < String , String > params = new HashMap <>();
6463 setActionResolverPackages ( params , "ActionResolver.Packages" , properties .getActionResolverPackages () );
6564 putIfNotEmpty ( params , "ActionBeanPropertyBinder.Class" , properties .getActionBeanPropertyBinder () );
6665 putIfNotEmpty ( params , "ActionBeanContext.Class" , properties .getActionBeanContext () );
@@ -93,7 +92,7 @@ public FilterRegistrationBean< StripesFilter > stripesFilter( @Qualifier( "urlPa
9392 }
9493
9594 final FilterRegistrationBean < StripesFilter > registration = new FilterRegistrationBean <>();
96- registration .setFilter ( filter );
95+ registration .setFilter ( new StripesFilter () );
9796 registration .setInitParameters ( params );
9897 registration .setUrlPatterns ( urlPatternsForStripesFilter );
9998 registration .setDispatcherTypes ( DispatcherType .REQUEST );
@@ -104,10 +103,8 @@ public FilterRegistrationBean< StripesFilter > stripesFilter( @Qualifier( "urlPa
104103 @ Bean ( name = "stripesDynamicFilter" )
105104 @ ConditionalOnMissingBean ( name = "stripesDynamicFilter" )
106105 public FilterRegistrationBean < DynamicMappingFilter > stripesDynamicFilter ( @ Qualifier ( "urlPatternsForStripesDynamicFilter" ) final List < String > urlPatternsForStripesDynamicFilter ) {
107- final DynamicMappingFilter filter = new DynamicMappingFilter ();
108-
109106 final FilterRegistrationBean < DynamicMappingFilter > registration = new FilterRegistrationBean <>();
110- registration .setFilter ( filter );
107+ registration .setFilter ( new DynamicMappingFilter () );
111108 registration .setUrlPatterns ( urlPatternsForStripesDynamicFilter );
112109 registration .setDispatcherTypes ( DispatcherType .REQUEST , DispatcherType .INCLUDE , DispatcherType .FORWARD , DispatcherType .ERROR );
113110 registration .setOrder ( Ordered .LOWEST_PRECEDENCE );
@@ -117,15 +114,15 @@ public FilterRegistrationBean< DynamicMappingFilter > stripesDynamicFilter( @Qua
117114 @ Bean ( "urlPatternsForStripesFilter" )
118115 @ ConditionalOnMissingBean ( name = "urlPatternsForStripesFilter" )
119116 public List < String > urlPatternsForStripesFilter () {
120- final List < String > urlPatterns = new ArrayList < String >();
117+ final List < String > urlPatterns = new ArrayList <>();
121118 urlPatterns .add ( "*.jsp" );
122119 return urlPatterns ;
123120 }
124121
125122 @ Bean ( "urlPatternsForStripesDynamicFilter" )
126123 @ ConditionalOnMissingBean ( name = "urlPatternsForStripesDynamicFilter" )
127124 public List < String > urlPatternsForStripesDynamicFilter () {
128- final List < String > urlPatterns = new ArrayList < String >();
125+ final List < String > urlPatterns = new ArrayList <>();
129126 urlPatterns .add ( "/*" );
130127 return urlPatterns ;
131128 }
@@ -139,7 +136,7 @@ void setActionResolverPackages( final Map< String, String > params, final String
139136 }
140137
141138 String locateActionResolverPackages () {
142- final StripesClassesScanner < ActionBean > scanner = new StripesClassesScanner < ActionBean >();
139+ final StripesClassesScanner < ActionBean > scanner = new StripesClassesScanner <>();
143140 scanner .addIncludeFilter ( new AssignableTypeFilter ( ActionBean .class ) );
144141 final Collection < Class < ? extends ActionBean > > actionbeans = scanner .findComponentClasses ( BASE_PKG );
145142 final String packages = scanner .toPackagesWithoutStripesClasses ( actionbeans );
@@ -152,6 +149,29 @@ String locateActionResolverPackages() {
152149 return packages ;
153150 }
154151
152+ void setExceptionHandler ( final Map < String , String > params , final String key , final String value ) {
153+ if ( StringUtils .isEmpty ( value ) ) {
154+ putIfNotEmpty ( params , key , locateExceptionHandler () );
155+ } else {
156+ putIfNotEmpty ( params , key , value );
157+ }
158+ }
159+
160+ String locateExceptionHandler () {
161+ final StripesClassesScanner < ExceptionHandler > scanner = new StripesClassesScanner <>();
162+ scanner .addIncludeFilter ( new AssignableTypeFilter ( ExceptionHandler .class ) );
163+ final Collection < Class < ? extends ExceptionHandler > > exceptionHandlers = scanner .findComponentClasses ( BASE_PKG );
164+ final String exceptionHandler = scanner .selectFirstConcreteConfigurationClass ( exceptionHandlers );
165+ if ( !StringUtils .isEmpty ( exceptionHandler ) ) {
166+ LOG .warn ( "Didn't found any ExceptionHandler, defaulting to net.sourceforge.stripes.exception.DefaultExceptionHandler;" +
167+ "check your application build and optionally your stripes.exception-handler property on application.properties" );
168+ return null ;
169+ } else {
170+ LOG .info ( "Detected ExceptionHandlers on " + scanner .toPackagesWithoutStripesClasses ( exceptionHandlers ) + " selected " + exceptionHandler );
171+ return exceptionHandler ;
172+ }
173+ }
174+
155175 void defaultIfEmpty ( final Map < String , String > params , final String key , final String value , final String def ) {
156176 if ( StringUtils .isEmpty ( value ) ) {
157177 putIfNotEmpty ( params , key , def );
0 commit comments