@ -42,22 +42,50 @@ import org.springframework.util.ReflectionUtils;
@@ -42,22 +42,50 @@ import org.springframework.util.ReflectionUtils;
*
* @author Andy Wilkinson
* @author Phillip Webb
* @author Stephane Nicoll
* @since 1 . 4 . 0
* /
public final class FailureAnalyzers {
private static final Log log = LogFactory . getLog ( FailureAnalyzers . class ) ;
private FailureAnalyzers ( ) {
private final ClassLoader classLoader ;
private final List < FailureAnalyzer > analyzers ;
public FailureAnalyzers ( ConfigurableApplicationContext context ) {
this . classLoader = context . getClassLoader ( ) ;
this . analyzers = loadFailureAnalyzers ( this . classLoader ) ;
prepareFailureAnalyzers ( this . analyzers , context ) ;
}
/ * *
* Analyze and report the specified { @code failure } .
*
* @param failure the failure to analyze
* @return { @code true } if the failure was handled
* /
public boolean analyzeAndReport ( Throwable failure ) {
FailureAnalysis analysis = analyze ( failure , this . analyzers ) ;
return report ( analysis , this . classLoader ) ;
}
/ * *
* Analyze and report the specified { @code failure } .
*
* @param failure the failure to analyze
* @param classLoader the classloader to use
* @param context the context to use
* @return { @code true } if the failure was handled
* @deprecated in favour of { @link # analyzeAndReport ( Throwable ) }
* /
@Deprecated
public static boolean analyzeAndReport ( Throwable failure , ClassLoader classLoader ,
ConfigurableApplicationContext context ) {
List < FailureAnalyzer > analyzers = loadFailureAnalyzers ( classLoader ) ;
List < FailureAnalysisReporter > reporters = SpringFactoriesLoader
. loadFactories ( FailureAnalysisReporter . class , classLoader ) ;
FailureAnalysis analysis = analyze ( failure , analyzers , context ) ;
return report ( analysis , reporters ) ;
prepareFailureAnalyzers ( analyzers , context ) ;
FailureAnalysis analysis = analyze ( failure , analyzers ) ;
return report ( analysis , classLoader ) ;
}
private static List < FailureAnalyzer > loadFailureAnalyzers ( ClassLoader classLoader ) {
@ -79,10 +107,16 @@ public final class FailureAnalyzers {
@@ -79,10 +107,16 @@ public final class FailureAnalyzers {
return analyzers ;
}
private static FailureAnalysis analyze ( Throwable failure ,
List < FailureAnalyzer > analyzers , ConfigurableApplicationContext context ) {
private static void prepareFailureAnalyzers ( List < FailureAnalyzer > analyzers ,
ConfigurableApplicationContext context ) {
for ( FailureAnalyzer analyzer : analyzers ) {
prepareAnalyzer ( context , analyzer ) ;
}
}
private static FailureAnalysis analyze ( Throwable failure ,
List < FailureAnalyzer > analyzers ) {
for ( FailureAnalyzer analyzer : analyzers ) {
FailureAnalysis analysis = analyzer . analyze ( failure ) ;
if ( analysis ! = null ) {
return analysis ;
@ -99,7 +133,9 @@ public final class FailureAnalyzers {
@@ -99,7 +133,9 @@ public final class FailureAnalyzers {
}
private static boolean report ( FailureAnalysis analysis ,
List < FailureAnalysisReporter > reporters ) {
ClassLoader classLoader ) {
List < FailureAnalysisReporter > reporters = SpringFactoriesLoader
. loadFactories ( FailureAnalysisReporter . class , classLoader ) ;
if ( analysis = = null | | reporters . isEmpty ( ) ) {
return false ;
}