From 12f756ec7d0183f59bc85081f83e757543cb1409 Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Thu, 26 Dec 2024 14:15:43 +0100 Subject: [PATCH] Converters - Add some shortcuts for JDK classes It seems counter productive to throw so many NoSuchMethodExceptions for these common uses cases. --- .../java/io/smallrye/config/Converters.java | 11 +++++++++- .../io/smallrye/config/ConvertersTest.java | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/implementation/src/main/java/io/smallrye/config/Converters.java b/implementation/src/main/java/io/smallrye/config/Converters.java index f6985d58f..6d7052765 100644 --- a/implementation/src/main/java/io/smallrye/config/Converters.java +++ b/implementation/src/main/java/io/smallrye/config/Converters.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package io.smallrye.config; import static io.smallrye.config.common.utils.StringUtil.unquoted; +import java.io.File; import java.io.ObjectStreamException; import java.io.Serializable; import java.lang.reflect.Array; @@ -29,6 +29,7 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.net.InetAddress; +import java.net.URI; import java.net.UnknownHostException; import java.nio.file.Path; import java.util.Arrays; @@ -187,6 +188,11 @@ private Converters() { static final Converter PATH_CONVERTER = BuiltInConverter.of(18, newEmptyValueConverter(Path::of)); + static final Converter FILE_CONVERTER = BuiltInConverter.of(19, newEmptyValueConverter(File::new)); + + static final Converter URI_CONVERTER = BuiltInConverter.of(20, + newTrimmingConverter(newEmptyValueConverter(URI::create))); + static final Map, Class> PRIMITIVE_TYPES; static final Map> ALL_CONVERTERS = new HashMap<>(); @@ -226,6 +232,9 @@ private Converters() { ALL_CONVERTERS.put(Pattern.class, PATTERN_CONVERTER); ALL_CONVERTERS.put(Path.class, PATH_CONVERTER); + ALL_CONVERTERS.put(File.class, FILE_CONVERTER); + + ALL_CONVERTERS.put(URI.class, URI_CONVERTER); Map, Class> primitiveTypes = new HashMap<>(9); primitiveTypes.put(byte.class, Byte.class); diff --git a/implementation/src/test/java/io/smallrye/config/ConvertersTest.java b/implementation/src/test/java/io/smallrye/config/ConvertersTest.java index f16928d2a..5921ffedd 100644 --- a/implementation/src/test/java/io/smallrye/config/ConvertersTest.java +++ b/implementation/src/test/java/io/smallrye/config/ConvertersTest.java @@ -17,6 +17,8 @@ import static org.junit.jupiter.api.Assertions.*; +import java.io.File; +import java.net.URI; import java.nio.file.Path; import java.time.LocalDate; import java.time.chrono.ChronoLocalDate; @@ -389,6 +391,26 @@ void nulls() { assertThrows(NullPointerException.class, () -> convertNull(config, OptionalDouble.class)); } + @Test + void file() { + SmallRyeConfig config = buildConfig("file", "/test", "file.leading.space", " test"); + assertEquals(new File("/test"), config.getValue("file", File.class)); + assertEquals(new File(" test"), config.getValue("file.leading.space", File.class)); + Converter fileConverter = config.getConverterOrNull(File.class); + assertNotNull(fileConverter); + assertTrue(fileConverter.getClass().getName().contains("BuiltInConverter")); + } + + @Test + void uri() { + SmallRyeConfig config = buildConfig("uri", "http://localhost", "uri.leading.space", " http://localhost"); + assertEquals(URI.create("http://localhost"), config.getValue("uri", URI.class)); + assertEquals(URI.create("http://localhost"), config.getValue("uri.leading.space", URI.class)); + Converter uriConverter = config.getConverterOrNull(URI.class); + assertNotNull(uriConverter); + assertTrue(uriConverter.getClass().getName().contains("BuiltInConverter")); + } + @SafeVarargs private static T[] array(T... items) { return items;