TAMAYA-358 Merged patch from @peculator with existing improvements.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/bf0cd8b3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/bf0cd8b3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/bf0cd8b3 Branch: refs/heads/master Commit: bf0cd8b36a1a289f63911ac54305f5b91bff3dc7 Parents: e729bd0 Author: Anatole Tresch <[email protected]> Authored: Fri Nov 16 22:29:54 2018 +0100 Committer: Anatole Tresch <[email protected]> Committed: Fri Nov 16 22:29:54 2018 +0100 ---------------------------------------------------------------------- .../tamaya/cdi/ConfigurationProducer.java | 5 +- .../org/apache/tamaya/cdi/ConfiguredBTest.java | 18 ++--- .../org/apache/tamaya/cdi/ConfiguredClass.java | 69 +++++++++++++++++++- .../tamaya/cdi/cfg/TestPropertySource.java | 5 +- .../META-INF/javaconfiguration.properties | 2 + 5 files changed, 85 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java ---------------------------------------------------------------------- diff --git a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java index ee0f592..c7523be 100644 --- a/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java +++ b/modules/injection/cdi/src/main/java/org/apache/tamaya/cdi/ConfigurationProducer.java @@ -78,6 +78,7 @@ public class ConfigurationProducer { // enforces the resolvability of the config String defaultTextValue = annotation.defaultValue().equals(Config.UNCONFIGURED_VALUE) ? null : annotation.defaultValue(); + boolean required = annotation.required(); String textValue = null; Configuration config = Configuration.current(); if(operator!=null) { @@ -98,9 +99,11 @@ public class ConfigurationProducer { ConversionContext conversionContext = createConversionContext(keyFound, keys, injectionPoint); Object value = convertValue(textValue, conversionContext, injectionPoint, customConverter); if (value == null) { - throw new ConfigException(String.format( + if (required){ + throw new ConfigException(String.format( "Can't resolve any of the possible config keys: %s to the required target type: %s, supported formats: %s", keys, conversionContext.getTargetType(), conversionContext.getSupportedFormats().toString())); + } } LOGGER.finest(String.format("Injecting %s for key %s in class %s", keyFound, value.toString(), injectionPoint.toString())); return value; http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java ---------------------------------------------------------------------- diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java index 34bfd95..83367fd 100644 --- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java +++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredBTest.java @@ -20,23 +20,18 @@ package org.apache.tamaya.cdi; import org.hamcrest.MatcherAssert; -import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; -import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; -import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.AdditionalMatchers; +import org.mockito.internal.matchers.NotNull; import javax.enterprise.inject.spi.CDI; -import javax.enterprise.inject.spi.Extension; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.internal.matchers.NotNull.NOT_NULL; /** * Tests for CDI integration. @@ -51,9 +46,10 @@ public class ConfiguredBTest extends BaseTestConfiguration { System.out.println("********************************************"); double actual = 1234.5678; MatcherAssert.assertThat(item.getDoubleValue(), is(actual)); - assertTrue(item.getExistingDouble()!=null); - assertTrue(item.getNonExistingDouble()!=null); - assertTrue(item.getExistingDouble().isPresent()); - assertFalse(item.getNonExistingDouble().isPresent()); + MatcherAssert.assertThat(item.getExistingDouble(), is(NOT_NULL)); + MatcherAssert.assertThat(item.getNonExistingDouble(), is(NOT_NULL)); + MatcherAssert.assertThat(item.getExistingDouble().isPresent(), is(true)); + MatcherAssert.assertThat(item.getNonExistingDouble().isPresent(), is(false)); + MatcherAssert.assertThat(item.getExistingDouble().get(), is(actual)); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java ---------------------------------------------------------------------- diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java index a2dc7ce..b159a47 100644 --- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java +++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/ConfiguredClass.java @@ -22,9 +22,10 @@ package org.apache.tamaya.cdi; import org.apache.tamaya.inject.api.Config; +import java.util.Optional; import javax.inject.Singleton; import java.math.BigDecimal; -import java.util.Optional; +import javax.inject.Inject; /** * Class to be loaded from CDI to ensure fields are correctly configured using CDI injection mechanisms. @@ -32,9 +33,22 @@ import java.util.Optional; @Singleton public class ConfiguredClass{ + //Config values come from the TestPropertySource during ConfigurationProducerTest @Config private String testProperty; + //Inject+Config values come from javaconfiguration.properties during ConfiguredBTest + @Inject + @Config + private String injectedTestProperty; + + //@Inject will throw an NPE with a null assignment, before getting to required=false + // because our provider runs in @ApplicationScope, and null @Producer has to be in + // @Dependent scope (CDI 2.0 spec section 3.2). Optional<> below is probably your + // better idea. + @Config(value="stringMissingValue", required=false) + private String stringMissingValue; + @Config(value = {"a.b.c.key1","a.b.c.key2","a.b.c.key3"}, defaultValue = "The current \\${JAVA_HOME} env property is ${env:JAVA_HOME}.") String value1; @@ -62,6 +76,27 @@ public class ConfiguredClass{ @Config("double1") private double doubleValue; + @Config + private Optional<String> optionalStringWithValue; + + @Inject + @Config + private Optional<String> injectedOptionalStringWithValue; + + @Config(value="optionalStringMissingValue", required=false) + private Optional<String> optionalStringMissingValue; + + @Inject + @Config(value="injectedOptionalStringMissingValue", required=false) + private Optional<String> injectedOptionalStringMissingValue; + + @Config(value="optionalStringMissingValueWithDefault", defaultValue="optionalStringDefaultValue", required=false) + private Optional<String> optionalStringMissingValueWithDefault; + + @Inject + @Config(value="injectedOptionalStringMissingValueWithDefault", defaultValue="injectedOptionalStringDefaultValue", required=false) + private Optional<String> injectedOptionalStringMissingValueWithDefault; + @Config("double1") private Optional<Double> existingDouble; @@ -72,6 +107,10 @@ public class ConfiguredClass{ return testProperty; } + public String getInjectedTestProperty() { + return injectedTestProperty; + } + public String getValue1() { return value1; } @@ -116,6 +155,34 @@ public class ConfiguredClass{ return nonExistingDouble; } + public Optional<String> getOptionalStringWithValue() { + return optionalStringWithValue; + } + + public String getStringMissingValue() { + return stringMissingValue; + } + + public Optional<String> getInjectedOptionalStringWithValue() { + return injectedOptionalStringWithValue; + } + + public Optional<String> getOptionalStringMissingValue() { + return optionalStringMissingValue; + } + + public Optional<String> getInjectedOptionalStringMissingValue() { + return injectedOptionalStringMissingValue; + } + + public Optional<String> getOptionalStringMissingValueWithDefault() { + return optionalStringMissingValueWithDefault; + } + + public Optional<String> getInjectedOptionalStringMissingValueWithDefault() { + return injectedOptionalStringMissingValueWithDefault; + } + @Override public String toString(){ return super.toString() + ": testProperty="+testProperty+", value1="+value1+", value2="+value2 http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java ---------------------------------------------------------------------- diff --git a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java index 64d4105..6fb7b6f 100644 --- a/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java +++ b/modules/injection/cdi/src/test/java/org/apache/tamaya/cdi/cfg/TestPropertySource.java @@ -44,12 +44,15 @@ public class TestPropertySource implements PropertySource{ config.put("int1", "123456"); config.put("int2", "111222"); config.put("testProperty", "testPropertyValue!"); + config.put("injectedTestProperty", "injectedTestPropertyValue!"); config.put("booleanT", "true"); config.put("double1", "1234.5678"); config.put("BD", "123456789123456789123456789123456789.123456789123456789123456789123456789"); config.put("testProperty", "keys current testProperty"); config.put("runtimeVersion", "${java.version}"); - config.put("{getMeta}source.type:"+getClass().getName(), "PropertySource"); + config.put("{meta}source.type:"+getClass().getName(), "PropertySource"); + config.put("optionalStringWithValue", "Optional value"); + config.put("injectedOptionalStringWithValue", "Injected Optional String"); } public int getOrdinal() { http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/bf0cd8b3/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties ---------------------------------------------------------------------- diff --git a/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties b/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties index c72446e..ac0e67c 100644 --- a/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties +++ b/modules/injection/cdi/src/test/resources/META-INF/javaconfiguration.properties @@ -33,3 +33,5 @@ file.value = ./conf duration.value = 10 minutes and 57 seconds boolean.value = true integer.value = 123 + +injectedTestProperty="injected Test Property from javaconfiguration.properties"
