Repository: incubator-tamaya-sandbox Updated Branches: refs/heads/master a4e2df547 -> fdc5a1644
TAMAYA-260 Fixed Microprofile Optional injection for String values. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/fdc5a164 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/fdc5a164 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/fdc5a164 Branch: refs/heads/master Commit: fdc5a1644f800a25043e2b75b010f57c62383918 Parents: a4e2df5 Author: Anatole Tresch <anat...@apache.org> Authored: Fri Oct 13 01:21:19 2017 +0200 Committer: Anatole Tresch <anat...@apache.org> Committed: Fri Oct 13 01:21:19 2017 +0200 ---------------------------------------------------------------------- .../cdi/MicroprofileCDIExtension.java | 17 +++++++++++++++++ .../cdi/MicroprofileConfigurationProducer.java | 20 ++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/fdc5a164/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileCDIExtension.java ---------------------------------------------------------------------- diff --git a/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileCDIExtension.java b/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileCDIExtension.java index 0e30b78..310b72c 100644 --- a/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileCDIExtension.java +++ b/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileCDIExtension.java @@ -28,6 +28,8 @@ import javax.enterprise.inject.spi.InjectionPoint; import javax.enterprise.inject.spi.ProcessBean; import javax.enterprise.inject.spi.ProcessProducerMethod; import javax.inject.Provider; +import java.lang.reflect.AnnotatedType; +import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.HashSet; @@ -77,6 +79,21 @@ public class MicroprofileCDIExtension implements Extension { configured = true; LOG.finest(() -> "Enabling Tamaya Microprofile Configuration on bean: " + configuredType.getName()); configuredType.addConfiguredMember(injectionPoint, key); + }else if(injectionPoint.getMember() instanceof Method){ + Method method = (Method)injectionPoint.getMember(); + for(AnnotatedType paramType: method.getAnnotatedParameterTypes()){ + if(paramType.isAnnotationPresent(ConfigProperty.class)) { + LOG.fine("Configuring method: " + injectionPoint); + final ConfigProperty annotation = paramType.getAnnotation(ConfigProperty.class); + String key = !annotation.name().isEmpty() ? annotation.name() : MicroprofileConfigurationProducer.getDefaultKey(injectionPoint); + Type originalType = paramType.getType(); + Type convertedType = unwrapType(originalType); + types.add(convertedType); + configured = true; + LOG.finest(() -> "Enabling Tamaya Microprofile Configuration on bean: " + configuredType.getName()); + configuredType.addConfiguredMember(injectionPoint, key); + } + } } } if(configured) { http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/fdc5a164/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java ---------------------------------------------------------------------- diff --git a/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java b/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java index d52f7b6..bf61117 100644 --- a/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java +++ b/microprofile/src/main/java/org/apache/tamaya/microprofile/cdi/MicroprofileConfigurationProducer.java @@ -35,9 +35,11 @@ import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.InjectionPoint; import javax.inject.Provider; import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; +import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; @@ -94,7 +96,20 @@ public class MicroprofileConfigurationProducer { } } if (injectionPoint.getMember() instanceof AnnotatedElement) { - builder.setAnnotatedElement((AnnotatedElement) injectionPoint.getMember()); + AnnotatedElement annotated = (AnnotatedElement)injectionPoint.getMember(); + if(annotated.isAnnotationPresent(ConfigProperty.class)) { + builder.setAnnotatedElement(annotated); + } + }else if(injectionPoint.getMember() instanceof Method){ + Method method = (Method)injectionPoint.getMember(); + for(Type type:method.getParameterTypes()){ + if(type instanceof AnnotatedElement){ + AnnotatedElement annotated = (AnnotatedElement)type; + if(annotated.isAnnotationPresent(ConfigProperty.class)) { + builder.setAnnotatedElement(annotated); + } + } + } } return builder.build(); } @@ -106,7 +121,8 @@ public class MicroprofileConfigurationProducer { if(String.class.equals(context.getTargetType().getRawType())){ value = textValue; } - if (textValue != null) { + if (textValue != null || Optional.class.equals(context.getTargetType().getRawType())) { + LOGGER.log(Level.FINEST, () -> "Converting KEY: " + context.getKey() + "("+context.getTargetType()+"), textValue: " + textValue); List<PropertyConverter> converters = ConfigurationProvider.getConfiguration().getContext() .getPropertyConverters((TypeLiteral)context.getTargetType()); for (PropertyConverter<Object> converter : converters) {