Skip to content

Commit

Permalink
Merge pull request #26 from juanmbellini/dev
Browse files Browse the repository at this point in the history
Merge 1.0.1-RELEASE changes into master
  • Loading branch information
juanmbellini authored Oct 16, 2017
2 parents 0e51bf4 + d420a35 commit e40d01e
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Error-Handler [![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Build Status](https://travis-ci.org/juanmbellini/error-handler.svg?branch=master)](https://travis-ci.org/juanmbellini/error-handler) [![Maven Central](https://img.shields.io/maven-central/v/com.bellotapps.utils/error-handler.svg)](https://repo.maven.apache.org/maven2/com/bellotapps/utils/error-handler/1.0.0-RELEASE)
# Error-Handler [![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Build Status](https://travis-ci.org/juanmbellini/error-handler.svg?branch=master)](https://travis-ci.org/juanmbellini/error-handler) [![Maven Central](https://img.shields.io/maven-central/v/com.bellotapps.utils/error-handler.svg)](https://repo.maven.apache.org/maven2/com/bellotapps/utils/error-handler/1.0.1-RELEASE)
A centralized error management system

## Description
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.bellotapps.utils</groupId>
<artifactId>error-handler</artifactId>
<version>1.0.0-RELEASE</version>
<version>1.0.1-RELEASE</version>
<packaging>jar</packaging>

<name>error-handler</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,14 @@
import org.springframework.core.ResolvableType;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.core.type.filter.AssignableTypeFilter;
import org.springframework.core.type.filter.TypeFilter;
import org.springframework.util.ClassUtils;

import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
Expand Down Expand Up @@ -154,8 +158,7 @@ private void scanPackages(final EnableErrorHandler enableErrorHandler) {
// and are annotated with ExceptionHandlerObject annotation
final ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(ExceptionHandlerObject.class));
scanner.addIncludeFilter(new AssignableTypeFilter(ExceptionHandler.class));
scanner.addIncludeFilter(new ExceptionHandlerObjectAnnotatedAndExceptionHandlerAssignableTypeFilter());

// Scan packages to get classes used as exception handlers
// (i.e are located in the packages to scan and, implement ExceptionHandler interface,
Expand Down Expand Up @@ -244,4 +247,36 @@ private void instantiateNoBeanHandlers() {

this.handlers.addAll(createdHandlers);
}

/**
* Custom filter to get classes annotated with {@link ExceptionHandlerObject}
* and that implement {@link ExceptionHandler} interface.
*/
private static class ExceptionHandlerObjectAnnotatedAndExceptionHandlerAssignableTypeFilter implements TypeFilter {

/**
* Annotation type filter to get those classes annotated with {@link ExceptionHandlerObject}.
*/
private final AnnotationTypeFilter exceptionHandlerObjectAnnotationFilter;

/**
* Assignable type filter to get those classes that implement {@link ExceptionHandler} interface.
*/
private final AssignableTypeFilter assignableFromExceptionHandlerInterfaceFilter;

/**
* Constructor.
*/
private ExceptionHandlerObjectAnnotatedAndExceptionHandlerAssignableTypeFilter() {
this.exceptionHandlerObjectAnnotationFilter = new AnnotationTypeFilter(ExceptionHandlerObject.class);
this.assignableFromExceptionHandlerInterfaceFilter = new AssignableTypeFilter(ExceptionHandler.class);
}

@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory)
throws IOException {
return exceptionHandlerObjectAnnotationFilter.match(metadataReader, metadataReaderFactory)
&& assignableFromExceptionHandlerInterfaceFilter.match(metadataReader, metadataReaderFactory);
}
}
}

0 comments on commit e40d01e

Please sign in to comment.