TAMAYA-318 Fixed issue registering default converters with invalid target type.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/aa6dbe62 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/aa6dbe62 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/aa6dbe62 Branch: refs/heads/master Commit: aa6dbe62dfad0490506e5c9eacb87e962939ff14 Parents: 878b236 Author: Anatole Tresch <anat...@apache.org> Authored: Tue Nov 14 08:47:57 2017 +0100 Committer: Anatole Tresch <anat...@apache.org> Committed: Tue Nov 14 08:47:57 2017 +0100 ---------------------------------------------------------------------- .../DefaultConfigurationContextBuilder.java | 21 ++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/aa6dbe62/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java ---------------------------------------------------------------------- diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java index 4cad87d..8268f64 100644 --- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java +++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultConfigurationContextBuilder.java @@ -35,6 +35,8 @@ import org.apache.tamaya.spisupport.propertysource.JavaConfigurationPropertySour import org.apache.tamaya.spisupport.propertysource.SystemPropertySource; import java.io.File; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.math.BigDecimal; import java.math.BigInteger; import java.net.URI; @@ -397,13 +399,20 @@ public class DefaultConfigurationContextBuilder implements ConfigurationContextB Map<TypeLiteral, Collection<PropertyConverter>> result = new HashMap<>(); for (PropertyConverter conv : ServiceContextManager.getServiceContext().getServices( PropertyConverter.class)) { - TypeLiteral target = TypeLiteral.of(TypeLiteral.of(conv.getClass()).getType()); - Collection<PropertyConverter> convList = result.get(target); - if (convList == null) { - convList = new ArrayList<>(); - result.put(target, convList); + for(Type type:conv.getClass().getGenericInterfaces()){ + if(type instanceof ParameterizedType){ + ParameterizedType pt = (ParameterizedType)type; + if(PropertyConverter.class.equals(((ParameterizedType) type).getRawType())){ + TypeLiteral target = TypeLiteral.of(pt.getActualTypeArguments()[0]); + Collection<PropertyConverter> convList = result.get(target); + if (convList == null) { + convList = new ArrayList<>(); + result.put(target, convList); + } + convList.add(conv); + } + } } - convList.add(conv); } return result; }