You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2022/01/03 20:52:38 UTC

[logging-log4j2] branch master updated (9e4df7d -> cdf9f50)

This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git.


    from 9e4df7d  Annotate another thread context test
     new 25d88be  Use try-with-resources
     new cdf9f50  Move type converter plugins to log4j-core

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../plugins/convert/CoreTypeConvertersTest.java    |  90 +-----
 .../config/plugins/convert/CoreTypeConverters.java | 337 ++++++++++++++++++++-
 .../core/config}/plugins/convert/HexConverter.java |   2 +-
 .../plugins/convert/TypeConverterRegistryTest.java |  62 +---
 log4j-plugins/src/main/java/module-info.java       |   1 -
 .../log4j/plugins/convert/TypeConverters.java      | 331 --------------------
 .../plugins/convert/plugins/Log4jPlugins.java      |  55 ----
 .../plugins/spi/impl/InjectionTargetBean.java      |   4 +-
 ...e.logging.log4j.plugins.processor.PluginService |   1 -
 9 files changed, 349 insertions(+), 534 deletions(-)
 copy log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java => log4j-core-test/src/test/java/org/apache/logging/log4j/core/plugins/convert/CoreTypeConvertersTest.java (55%)
 rename {log4j-plugins/src/main/java/org/apache/logging/log4j => log4j-core/src/main/java/org/apache/logging/log4j/core/config}/plugins/convert/HexConverter.java (95%)
 delete mode 100644 log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/plugins/Log4jPlugins.java
 delete mode 100644 log4j-plugins/src/main/resources/META-INF/services/org.apache.logging.log4j.plugins.processor.PluginService

[logging-log4j2] 02/02: Move type converter plugins to log4j-core

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit cdf9f5003b890f3a43f3a3af79d34f3764060024
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Mon Jan 3 14:52:11 2022 -0600

    Move type converter plugins to log4j-core
    
    THis avoids the need for hardcoding plugin metadata in log4j-plugins. Tests are split accordingly. As type converters are loaded as plugins, their implementations can remain in core.
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../plugins/convert/CoreTypeConvertersTest.java    |  90 +-----
 .../config/plugins/convert/CoreTypeConverters.java | 337 ++++++++++++++++++++-
 .../core/config}/plugins/convert/HexConverter.java |   2 +-
 .../plugins/convert/TypeConverterRegistryTest.java |  62 +---
 log4j-plugins/src/main/java/module-info.java       |   1 -
 .../log4j/plugins/convert/TypeConverters.java      | 331 --------------------
 .../plugins/convert/plugins/Log4jPlugins.java      |  55 ----
 ...e.logging.log4j.plugins.processor.PluginService |   1 -
 8 files changed, 348 insertions(+), 531 deletions(-)

diff --git a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/plugins/convert/CoreTypeConvertersTest.java
similarity index 55%
copy from log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java
copy to log4j-core-test/src/test/java/org/apache/logging/log4j/core/plugins/convert/CoreTypeConvertersTest.java
index bb37ba8..b5aa345 100644
--- a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/plugins/convert/CoreTypeConvertersTest.java
@@ -14,16 +14,20 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.plugins.convert;
+package org.apache.logging.log4j.core.plugins.convert;
 
+import org.apache.logging.log4j.core.config.plugins.convert.CoreTypeConverters;
 import org.apache.logging.log4j.plugins.Plugin;
+import org.apache.logging.log4j.plugins.convert.TypeConverter;
+import org.apache.logging.log4j.plugins.convert.TypeConverterRegistry;
+import org.apache.logging.log4j.plugins.convert.TypeConverters;
 import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.MatcherAssert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.junit.jupiter.api.Assertions.*;
 
-public class TypeConverterRegistryTest {
+public class CoreTypeConvertersTest {
 
     @Test
     public void testFindNullConverter() {
@@ -51,7 +55,7 @@ public class TypeConverterRegistryTest {
         final TypeConverter<CharSequence> converter = (TypeConverter<CharSequence>)
             TypeConverterRegistry.getInstance().findCompatibleConverter(CharSequence.class);
         assertNotNull(converter);
-        assertThat(converter, instanceOf(TypeConverters.StringConverter.class));
+        assertThat(converter, instanceOf(CoreTypeConverters.StringConverter.class));
         final CharSequence expected = "This is a test sequence of characters";
         final CharSequence actual = converter.convert(expected.toString());
         assertEquals(expected, actual);
@@ -81,82 +85,4 @@ public class TypeConverterRegistryTest {
         assertEquals(Foo.THE, fooTypeConverter.convert("THE"));
     }
 
-    public static final class CustomTestClass1 {
-
-        private CustomTestClass1() {}
-
-    }
-
-    @Plugin(name = "CustomTestClass1Converter1", category = TypeConverters.CATEGORY)
-    public static final class CustomTestClass1Converter1
-            implements TypeConverter<CustomTestClass1> {
-
-        @Override
-        public CustomTestClass1 convert(final String ignored) {
-            return new CustomTestClass1();
-        }
-
-    }
-
-    @SuppressWarnings("ComparableType")
-    @Plugin(name = "CustomTestClass1Converter2", category = TypeConverters.CATEGORY)
-    public static final class CustomTestClass1Converter2
-            implements TypeConverter<CustomTestClass1>, Comparable<TypeConverter<?>> {
-
-        @Override
-        public CustomTestClass1 convert(final String ignored) {
-            return new CustomTestClass1();
-        }
-
-        @Override
-        public int compareTo(@SuppressWarnings("NullableProblems") final TypeConverter<?> converter) {
-            return -1;
-        }
-
-    }
-
-    @Test
-    public void testMultipleComparableConverters() {
-        final TypeConverter<?> converter = TypeConverterRegistry
-                .getInstance()
-                .findCompatibleConverter(CustomTestClass1.class);
-        assertThat(converter, instanceOf(CustomTestClass1Converter2.class));
-    }
-
-    public static final class CustomTestClass2 {
-
-        private CustomTestClass2() {}
-
-    }
-
-    @Plugin(name = "CustomTestClass2Converter1", category = TypeConverters.CATEGORY)
-    public static final class CustomTestClass2Converter1
-            implements TypeConverter<CustomTestClass2> {
-
-        @Override
-        public CustomTestClass2 convert(final String ignored) {
-            return new CustomTestClass2();
-        }
-
-    }
-
-    @Plugin(name = "CustomTestClass2Converter2", category = TypeConverters.CATEGORY)
-    public static final class CustomTestClass2Converter2
-            implements TypeConverter<CustomTestClass2> {
-
-        @Override
-        public CustomTestClass2 convert(final String ignored) {
-            return new CustomTestClass2();
-        }
-
-    }
-
-    @Test
-    public void testMultipleIncomparableConverters() {
-        final TypeConverter<?> converter = TypeConverterRegistry
-                .getInstance()
-                .findCompatibleConverter(CustomTestClass2.class);
-        assertThat(converter, instanceOf(CustomTestClass2Converter1.class));
-    }
-
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java
index f83397b..b481b01 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java
@@ -17,19 +17,187 @@
 
 package org.apache.logging.log4j.core.config.plugins.convert;
 
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.appender.rolling.action.Duration;
 import org.apache.logging.log4j.core.util.CronExpression;
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.plugins.convert.TypeConverter;
 import org.apache.logging.log4j.plugins.convert.TypeConverters;
+import org.apache.logging.log4j.util.LoaderUtil;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.Provider;
+import java.security.Security;
+import java.util.Base64;
+import java.util.UUID;
+import java.util.regex.Pattern;
 
 /**
- * Core specific type converters.
+ * General {@link TypeConverter} implementations.
  *
  * @since 2.1 Moved to the {@code convert} package.
  */
 public final class CoreTypeConverters {
 
+    private static final Base64.Decoder decoder = Base64.getDecoder();
+
+    /**
+     * Parses a {@link String} into a {@link BigDecimal}.
+     */
+    @Plugin(name = "BigDecimal", category = TypeConverters.CATEGORY)
+    public static class BigDecimalConverter implements TypeConverter<BigDecimal> {
+        @Override
+        public BigDecimal convert(final String s) {
+            return new BigDecimal(s);
+        }
+    }
+
+    /**
+     * Parses a {@link String} into a {@link BigInteger}.
+     */
+    @Plugin(name = "BigInteger", category = TypeConverters.CATEGORY)
+    public static class BigIntegerConverter implements TypeConverter<BigInteger> {
+        @Override
+        public BigInteger convert(final String s) {
+            return new BigInteger(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Boolean}.
+     */
+    @Plugin(name = "Boolean", category = TypeConverters.CATEGORY)
+    public static class BooleanConverter implements TypeConverter<Boolean> {
+        @Override
+        public Boolean convert(final String s) {
+            return Boolean.valueOf(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@code byte[]}.
+     *
+     * The supported formats are:
+     * <ul>
+     * <li>0x0123456789ABCDEF</li>
+     * <li>Base64:ABase64String</li>
+     * <li>String using {@link Charset#defaultCharset()} [TODO Should this be UTF-8 instead?]</li>
+     * </ul>
+     */
+    @Plugin(name = "ByteArray", category = TypeConverters.CATEGORY)
+    public static class ByteArrayConverter implements TypeConverter<byte[]> {
+
+        private static final String PREFIX_0x = "0x";
+        private static final String PREFIX_BASE64 = "Base64:";
+
+        @Override
+        public byte[] convert(final String value) {
+            byte[] bytes;
+            if (value == null || value.isEmpty()) {
+                bytes = new byte[0];
+            } else if (value.startsWith(PREFIX_BASE64)) {
+                final String lexicalXSDBase64Binary = value.substring(PREFIX_BASE64.length());
+                bytes = decoder.decode(lexicalXSDBase64Binary);
+            } else if (value.startsWith(PREFIX_0x)) {
+                final String lexicalXSDHexBinary = value.substring(PREFIX_0x.length());
+                bytes = HexConverter.parseHexBinary(lexicalXSDHexBinary);
+            } else {
+                bytes = value.getBytes(Charset.defaultCharset());
+            }
+            return bytes;
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Byte}.
+     */
+    @Plugin(name = "Byte", category = TypeConverters.CATEGORY)
+    public static class ByteConverter implements TypeConverter<Byte> {
+        @Override
+        public Byte convert(final String s) {
+            return Byte.valueOf(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Character}.
+     */
+    @Plugin(name = "Character", category = TypeConverters.CATEGORY)
+    public static class CharacterConverter implements TypeConverter<Character> {
+        @Override
+        public Character convert(final String s) {
+            if (s.length() != 1) {
+                throw new IllegalArgumentException("Character string must be of length 1: " + s);
+            }
+            return Character.valueOf(s.toCharArray()[0]);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@code char[]}.
+     */
+    @Plugin(name = "CharacterArray", category = TypeConverters.CATEGORY)
+    public static class CharArrayConverter implements TypeConverter<char[]> {
+        @Override
+        public char[] convert(final String s) {
+            return s.toCharArray();
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Charset}.
+     */
+    @Plugin(name = "Charset", category = TypeConverters.CATEGORY)
+    public static class CharsetConverter implements TypeConverter<Charset> {
+        @Override
+        public Charset convert(final String s) {
+            return Charset.forName(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Class}.
+     */
+    @Plugin(name = "Class", category = TypeConverters.CATEGORY)
+    public static class ClassConverter implements TypeConverter<Class<?>> {
+        @Override
+        public Class<?> convert(final String s) throws ClassNotFoundException {
+            switch (s.toLowerCase()) {
+                case "boolean":
+                    return boolean.class;
+                case "byte":
+                    return byte.class;
+                case "char":
+                    return char.class;
+                case "double":
+                    return double.class;
+                case "float":
+                    return float.class;
+                case "int":
+                    return int.class;
+                case "long":
+                    return long.class;
+                case "short":
+                    return short.class;
+                case "void":
+                    return void.class;
+                default:
+                    return LoaderUtil.loadClass(s);
+            }
+
+        }
+    }
+
     @Plugin(name = "CronExpression", category = TypeConverters.CATEGORY)
     public static class CronExpressionConverter implements TypeConverter<CronExpression> {
         @Override
@@ -39,6 +207,17 @@ public final class CoreTypeConverters {
     }
 
     /**
+     * Converts a {@link String} into a {@link Double}.
+     */
+    @Plugin(name = "Double", category = TypeConverters.CATEGORY)
+    public static class DoubleConverter implements TypeConverter<Double> {
+        @Override
+        public Double convert(final String s) {
+            return Double.valueOf(s);
+        }
+    }
+
+    /**
      * Converts a {@link String} into a {@link Duration}.
      * @since 2.5
      */
@@ -49,4 +228,160 @@ public final class CoreTypeConverters {
             return Duration.parse(s);
         }
     }
+
+    /**
+     * Converts a {@link String} into a {@link File}.
+     */
+    @Plugin(name = "File", category = TypeConverters.CATEGORY)
+    public static class FileConverter implements TypeConverter<File> {
+        @Override
+        public File convert(final String s) {
+            return new File(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Float}.
+     */
+    @Plugin(name = "Float", category = TypeConverters.CATEGORY)
+    public static class FloatConverter implements TypeConverter<Float> {
+        @Override
+        public Float convert(final String s) {
+            return Float.valueOf(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into an {@link InetAddress}.
+     */
+    @Plugin(name = "InetAddress", category = TypeConverters.CATEGORY)
+    public static class InetAddressConverter implements TypeConverter<InetAddress> {
+        @Override
+        public InetAddress convert(final String s) throws Exception {
+            return InetAddress.getByName(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Integer}.
+     */
+    @Plugin(name = "Integer", category = TypeConverters.CATEGORY)
+    public static class IntegerConverter implements TypeConverter<Integer> {
+        @Override
+        public Integer convert(final String s) {
+            return Integer.valueOf(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a Log4j {@link Level}. Returns {@code null} for invalid level names.
+     */
+    @Plugin(name = "Level", category = TypeConverters.CATEGORY)
+    public static class LevelConverter implements TypeConverter<Level> {
+        @Override
+        public Level convert(final String s) {
+            return Level.valueOf(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Long}.
+     */
+    @Plugin(name = "Long", category = TypeConverters.CATEGORY)
+    public static class LongConverter implements TypeConverter<Long> {
+        @Override
+        public Long convert(final String s) {
+            return Long.valueOf(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Path}.
+     * @since 2.8
+     */
+    @Plugin(name = "Path", category = TypeConverters.CATEGORY)
+    public static class PathConverter implements TypeConverter<Path> {
+        @Override
+        public Path convert(final String s) throws Exception {
+            return Paths.get(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Pattern}.
+     */
+    @Plugin(name = "Pattern", category = TypeConverters.CATEGORY)
+    public static class PatternConverter implements TypeConverter<Pattern> {
+        @Override
+        public Pattern convert(final String s) {
+            return Pattern.compile(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Provider}.
+     */
+    @Plugin(name = "SecurityProvider", category = TypeConverters.CATEGORY)
+    public static class SecurityProviderConverter implements TypeConverter<Provider> {
+        @Override
+        public Provider convert(final String s) {
+            return Security.getProvider(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link Short}.
+     */
+    @Plugin(name = "Short", category = TypeConverters.CATEGORY)
+    public static class ShortConverter implements TypeConverter<Short> {
+        @Override
+        public Short convert(final String s) {
+            return Short.valueOf(s);
+        }
+    }
+
+    /**
+     * Returns the given {@link String}, no conversion takes place.
+     */
+    @Plugin(name = "String", category = TypeConverters.CATEGORY)
+    public static class StringConverter implements TypeConverter<String> {
+        @Override
+        public String convert(final String s) {
+            return s;
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link URI}.
+     */
+    @Plugin(name = "URI", category = TypeConverters.CATEGORY)
+    public static class UriConverter implements TypeConverter<URI> {
+        @Override
+        public URI convert(final String s) throws URISyntaxException {
+            return new URI(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link URL}.
+     */
+    @Plugin(name = "URL", category = TypeConverters.CATEGORY)
+    public static class UrlConverter implements TypeConverter<URL> {
+        @Override
+        public URL convert(final String s) throws MalformedURLException {
+            return new URL(s);
+        }
+    }
+
+    /**
+     * Converts a {@link String} into a {@link UUID}.
+     * @since 2.8
+     */
+    @Plugin(name = "UUID", category = TypeConverters.CATEGORY)
+    public static class UuidConverter implements TypeConverter<UUID> {
+        @Override
+        public UUID convert(final String s) throws Exception {
+            return UUID.fromString(s);
+        }
+    }
 }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/HexConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/HexConverter.java
similarity index 95%
rename from log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/HexConverter.java
rename to log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/HexConverter.java
index f70131d..fb6fa55 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/HexConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/HexConverter.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.plugins.convert;
+package org.apache.logging.log4j.core.config.plugins.convert;
 
 /**
  * Converts Strings to hex. This is used in place of java.xml.bind.DataTypeConverter which is not available by
diff --git a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java
index bb37ba8..bf4303b 100644
--- a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java
+++ b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/convert/TypeConverterRegistryTest.java
@@ -14,72 +14,16 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
+
 package org.apache.logging.log4j.plugins.convert;
 
 import org.apache.logging.log4j.plugins.Plugin;
 import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.MatcherAssert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.instanceOf;
-import static org.junit.jupiter.api.Assertions.*;
-
-public class TypeConverterRegistryTest {
-
-    @Test
-    public void testFindNullConverter() {
-        assertThrows(NullPointerException.class,
-                () -> TypeConverterRegistry.getInstance().findCompatibleConverter(null));
-    }
-
-    @Test
-    public void testFindBooleanConverter() throws Exception {
-        final TypeConverter<?> converter = TypeConverterRegistry.getInstance().findCompatibleConverter(Boolean.class);
-        assertNotNull(converter);
-        assertTrue((Boolean) converter.convert("TRUE"));
-    }
-
-    @Test
-    public void testFindPrimitiveBooleanConverter() throws Exception {
-        final TypeConverter<?> converter = TypeConverterRegistry.getInstance().findCompatibleConverter(Boolean.TYPE);
-        assertNotNull(converter);
-        assertTrue((Boolean) converter.convert("tRUe"));
-    }
 
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testFindCharSequenceConverterUsingStringConverter() throws Exception {
-        final TypeConverter<CharSequence> converter = (TypeConverter<CharSequence>)
-            TypeConverterRegistry.getInstance().findCompatibleConverter(CharSequence.class);
-        assertNotNull(converter);
-        assertThat(converter, instanceOf(TypeConverters.StringConverter.class));
-        final CharSequence expected = "This is a test sequence of characters";
-        final CharSequence actual = converter.convert(expected.toString());
-        assertEquals(expected, actual);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testFindNumberConverter() throws Exception {
-        final TypeConverter<Number> numberTypeConverter = (TypeConverter<Number>)
-            TypeConverterRegistry.getInstance().findCompatibleConverter(Number.class);
-        assertNotNull(numberTypeConverter);
-        // TODO: is there a specific converter this should return?
-    }
-
-    public enum Foo {
-        I, PITY, THE
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testFindEnumConverter() throws Exception {
-        final TypeConverter<Foo> fooTypeConverter = (TypeConverter<Foo>)
-            TypeConverterRegistry.getInstance().findCompatibleConverter(Foo.class);
-        assertNotNull(fooTypeConverter);
-        assertEquals(Foo.I, fooTypeConverter.convert("i"));
-        assertEquals(Foo.PITY, fooTypeConverter.convert("pity"));
-        assertEquals(Foo.THE, fooTypeConverter.convert("THE"));
-    }
+class TypeConverterRegistryTest {
 
     public static final class CustomTestClass1 {
 
diff --git a/log4j-plugins/src/main/java/module-info.java b/log4j-plugins/src/main/java/module-info.java
index 5926824..6e5d976 100644
--- a/log4j-plugins/src/main/java/module-info.java
+++ b/log4j-plugins/src/main/java/module-info.java
@@ -34,6 +34,5 @@ module org.apache.logging.log4j.plugins {
 
     uses org.apache.logging.log4j.plugins.processor.PluginService;
     uses org.apache.logging.log4j.plugins.di.model.PluginModule;
-    provides org.apache.logging.log4j.plugins.processor.PluginService with org.apache.logging.log4j.plugins.convert.plugins.Log4jPlugins;
 
 }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverters.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverters.java
index 914892c..a1110e8 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverters.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/TypeConverters.java
@@ -17,24 +17,9 @@
 
 package org.apache.logging.log4j.plugins.convert;
 
-import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.util.LoaderUtil;
-
-import java.io.File;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.*;
-import java.nio.charset.Charset;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.security.Provider;
-import java.security.Security;
-import java.util.Base64;
-import java.util.UUID;
-import java.util.regex.Pattern;
 
 /**
  * Collection of basic TypeConverter implementations. May be used to register additional TypeConverters or find
@@ -51,322 +36,6 @@ public final class TypeConverters {
      */
     public static final String CATEGORY = "TypeConverter";
 
-    private static final Base64.Decoder decoder = Base64.getDecoder();
-
-    /**
-     * Parses a {@link String} into a {@link BigDecimal}.
-     */
-    @Plugin(name = "BigDecimal", category = CATEGORY)
-    public static class BigDecimalConverter implements TypeConverter<BigDecimal> {
-        @Override
-        public BigDecimal convert(final String s) {
-            return new BigDecimal(s);
-        }
-    }
-
-    /**
-     * Parses a {@link String} into a {@link BigInteger}.
-     */
-    @Plugin(name = "BigInteger", category = CATEGORY)
-    public static class BigIntegerConverter implements TypeConverter<BigInteger> {
-        @Override
-        public BigInteger convert(final String s) {
-            return new BigInteger(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Boolean}.
-     */
-    @Plugin(name = "Boolean", category = CATEGORY)
-    public static class BooleanConverter implements TypeConverter<Boolean> {
-        @Override
-        public Boolean convert(final String s) {
-            return Boolean.valueOf(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@code byte[]}.
-     *
-     * The supported formats are:
-     * <ul>
-     * <li>0x0123456789ABCDEF</li>
-     * <li>Base64:ABase64String</li>
-     * <li>String using {@link Charset#defaultCharset()} [TODO Should this be UTF-8 instead?]</li>
-     * </ul>
-     */
-    @Plugin(name = "ByteArray", category = CATEGORY)
-    public static class ByteArrayConverter implements TypeConverter<byte[]> {
-
-        private static final String PREFIX_0x = "0x";
-        private static final String PREFIX_BASE64 = "Base64:";
-
-        @Override
-        public byte[] convert(final String value) {
-            byte[] bytes;
-            if (value == null || value.isEmpty()) {
-                bytes = new byte[0];
-            } else if (value.startsWith(PREFIX_BASE64)) {
-                final String lexicalXSDBase64Binary = value.substring(PREFIX_BASE64.length());
-                bytes = decoder.decode(lexicalXSDBase64Binary);
-            } else if (value.startsWith(PREFIX_0x)) {
-                final String lexicalXSDHexBinary = value.substring(PREFIX_0x.length());
-                bytes = HexConverter.parseHexBinary(lexicalXSDHexBinary);
-            } else {
-                bytes = value.getBytes(Charset.defaultCharset());
-            }
-            return bytes;
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Byte}.
-     */
-    @Plugin(name = "Byte", category = CATEGORY)
-    public static class ByteConverter implements TypeConverter<Byte> {
-        @Override
-        public Byte convert(final String s) {
-            return Byte.valueOf(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Character}.
-     */
-    @Plugin(name = "Character", category = CATEGORY)
-    public static class CharacterConverter implements TypeConverter<Character> {
-        @Override
-        public Character convert(final String s) {
-            if (s.length() != 1) {
-                throw new IllegalArgumentException("Character string must be of length 1: " + s);
-            }
-            return Character.valueOf(s.toCharArray()[0]);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@code char[]}.
-     */
-    @Plugin(name = "CharacterArray", category = CATEGORY)
-    public static class CharArrayConverter implements TypeConverter<char[]> {
-        @Override
-        public char[] convert(final String s) {
-            return s.toCharArray();
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Charset}.
-     */
-    @Plugin(name = "Charset", category = CATEGORY)
-    public static class CharsetConverter implements TypeConverter<Charset> {
-        @Override
-        public Charset convert(final String s) {
-            return Charset.forName(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Class}.
-     */
-    @Plugin(name = "Class", category = CATEGORY)
-    public static class ClassConverter implements TypeConverter<Class<?>> {
-        @Override
-        public Class<?> convert(final String s) throws ClassNotFoundException {
-            switch (s.toLowerCase()) {
-                case "boolean":
-                    return boolean.class;
-                case "byte":
-                    return byte.class;
-                case "char":
-                    return char.class;
-                case "double":
-                    return double.class;
-                case "float":
-                    return float.class;
-                case "int":
-                    return int.class;
-                case "long":
-                    return long.class;
-                case "short":
-                    return short.class;
-                case "void":
-                    return void.class;
-                default:
-                    return LoaderUtil.loadClass(s);
-            }
-
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Double}.
-     */
-    @Plugin(name = "Double", category = CATEGORY)
-    public static class DoubleConverter implements TypeConverter<Double> {
-        @Override
-        public Double convert(final String s) {
-            return Double.valueOf(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link File}.
-     */
-    @Plugin(name = "File", category = CATEGORY)
-    public static class FileConverter implements TypeConverter<File> {
-        @Override
-        public File convert(final String s) {
-            return new File(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Float}.
-     */
-    @Plugin(name = "Float", category = CATEGORY)
-    public static class FloatConverter implements TypeConverter<Float> {
-        @Override
-        public Float convert(final String s) {
-            return Float.valueOf(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into an {@link InetAddress}.
-     */
-    @Plugin(name = "InetAddress", category = CATEGORY)
-    public static class InetAddressConverter implements TypeConverter<InetAddress> {
-        @Override
-        public InetAddress convert(final String s) throws Exception {
-            return InetAddress.getByName(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Integer}.
-     */
-    @Plugin(name = "Integer", category = CATEGORY)
-    public static class IntegerConverter implements TypeConverter<Integer> {
-        @Override
-        public Integer convert(final String s) {
-            return Integer.valueOf(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a Log4j {@link Level}. Returns {@code null} for invalid level names.
-     */
-    @Plugin(name = "Level", category = CATEGORY)
-    public static class LevelConverter implements TypeConverter<Level> {
-        @Override
-        public Level convert(final String s) {
-            return Level.valueOf(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Long}.
-     */
-    @Plugin(name = "Long", category = CATEGORY)
-    public static class LongConverter implements TypeConverter<Long> {
-        @Override
-        public Long convert(final String s) {
-            return Long.valueOf(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Path}.
-     * @since 2.8
-     */
-    @Plugin(name = "Path", category = CATEGORY)
-    public static class PathConverter implements TypeConverter<Path> {
-        @Override
-        public Path convert(final String s) throws Exception {
-            return Paths.get(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Pattern}.
-     */
-    @Plugin(name = "Pattern", category = CATEGORY)
-    public static class PatternConverter implements TypeConverter<Pattern> {
-        @Override
-        public Pattern convert(final String s) {
-            return Pattern.compile(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Provider}.
-     */
-    @Plugin(name = "SecurityProvider", category = CATEGORY)
-    public static class SecurityProviderConverter implements TypeConverter<Provider> {
-        @Override
-        public Provider convert(final String s) {
-            return Security.getProvider(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link Short}.
-     */
-    @Plugin(name = "Short", category = CATEGORY)
-    public static class ShortConverter implements TypeConverter<Short> {
-        @Override
-        public Short convert(final String s) {
-            return Short.valueOf(s);
-        }
-    }
-
-    /**
-     * Returns the given {@link String}, no conversion takes place.
-     */
-    @Plugin(name = "String", category = CATEGORY)
-    public static class StringConverter implements TypeConverter<String> {
-        @Override
-        public String convert(final String s) {
-            return s;
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link URI}.
-     */
-    @Plugin(name = "URI", category = CATEGORY)
-    public static class UriConverter implements TypeConverter<URI> {
-        @Override
-        public URI convert(final String s) throws URISyntaxException {
-            return new URI(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link URL}.
-     */
-    @Plugin(name = "URL", category = CATEGORY)
-    public static class UrlConverter implements TypeConverter<URL> {
-        @Override
-        public URL convert(final String s) throws MalformedURLException {
-            return new URL(s);
-        }
-    }
-
-    /**
-     * Converts a {@link String} into a {@link UUID}.
-     * @since 2.8
-     */
-    @Plugin(name = "UUID", category = CATEGORY)
-    public static class UuidConverter implements TypeConverter<UUID> {
-        @Override
-        public UUID convert(final String s) throws Exception {
-            return UUID.fromString(s);
-        }
-    }
-
     /**
      * Converts a String to a given class if a TypeConverter is available for that class. Falls back to the provided
      * default value if the conversion is unsuccessful. However, if the default value is <em>also</em> invalid, then
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/plugins/Log4jPlugins.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/plugins/Log4jPlugins.java
deleted file mode 100644
index 2c11383..0000000
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/convert/plugins/Log4jPlugins.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache license, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the license for the specific language governing permissions and
- * limitations under the license.
- */
-package org.apache.logging.log4j.plugins.convert.plugins;
-
-import org.apache.logging.log4j.plugins.processor.PluginEntry;
-import org.apache.logging.log4j.plugins.processor.PluginService;
-
-/**
- * The base set of plugins.
- */
-public class Log4jPlugins extends PluginService {
-
-    private static PluginEntry[] entries = new PluginEntry[] {
-        new PluginEntry("bigdecimal", "org.apache.logging.log4j.plugins.convert.TypeConverters$BigDecimalConverter", "BigDecimal", false, false, "TypeConverter"),
-        new PluginEntry("biginteger", "org.apache.logging.log4j.plugins.convert.TypeConverters$BigIntegerConverter", "BigInteger", false, false, "TypeConverter"),
-        new PluginEntry("boolean", "org.apache.logging.log4j.plugins.convert.TypeConverters$BooleanConverter", "Boolean", false, false, "TypeConverter"),
-        new PluginEntry("bytearray", "org.apache.logging.log4j.plugins.convert.TypeConverters$ByteArrayConverter", "ByteArray", false, false, "TypeConverter"),
-        new PluginEntry("byte", "org.apache.logging.log4j.plugins.convert.TypeConverters$ByteConverter", "Byte", false, false, "TypeConverter"),
-        new PluginEntry("character", "org.apache.logging.log4j.plugins.convert.TypeConverters$CharacterConverter", "Character", false, false, "TypeConverter"),
-        new PluginEntry("characterarray", "org.apache.logging.log4j.plugins.convert.TypeConverters$CharArrayConverter", "CharacterArray", false, false, "TypeConverter"),
-        new PluginEntry("charset", "org.apache.logging.log4j.plugins.convert.TypeConverters$CharsetConverter", "Charset", false, false, "TypeConverter"),
-        new PluginEntry("class", "org.apache.logging.log4j.plugins.convert.TypeConverters$ClassConverter", "Class", false, false, "TypeConverter"),
-        new PluginEntry("double", "org.apache.logging.log4j.plugins.convert.TypeConverters$DoubleConverter", "Double", false, false, "TypeConverter"),
-        new PluginEntry("file", "org.apache.logging.log4j.plugins.convert.TypeConverters$FileConverter", "File", false, false, "TypeConverter"),
-        new PluginEntry("float", "org.apache.logging.log4j.plugins.convert.TypeConverters$FloatConverter", "Float", false, false, "TypeConverter"),
-        new PluginEntry("inetaddress", "org.apache.logging.log4j.plugins.convert.TypeConverters$InetAddressConverter", "InetAddress", false, false, "TypeConverter"),
-        new PluginEntry("integer", "org.apache.logging.log4j.plugins.convert.TypeConverters$IntegerConverter", "Integer", false, false, "TypeConverter"),
-        new PluginEntry("level", "org.apache.logging.log4j.plugins.convert.TypeConverters$LevelConverter", "Level", false, false, "TypeConverter"),
-        new PluginEntry("long", "org.apache.logging.log4j.plugins.convert.TypeConverters$LongConverter", "Long", false, false, "TypeConverter"),
-        new PluginEntry("path", "org.apache.logging.log4j.plugins.convert.TypeConverters$PathConverter", "Path", false, false, "TypeConverter"),
-        new PluginEntry("pattern", "org.apache.logging.log4j.plugins.convert.TypeConverters$PatternConverter", "Pattern", false, false, "TypeConverter"),
-        new PluginEntry("securityprovider", "org.apache.logging.log4j.plugins.convert.TypeConverters$SecurityProviderConverter", "SecurityProvider", false, false, "TypeConverter"),
-        new PluginEntry("short", "org.apache.logging.log4j.plugins.convert.TypeConverters$ShortConverter", "Short", false, false, "TypeConverter"),
-        new PluginEntry("string", "org.apache.logging.log4j.plugins.convert.TypeConverters$StringConverter", "String", false, false, "TypeConverter"),
-        new PluginEntry("uri", "org.apache.logging.log4j.plugins.convert.TypeConverters$UriConverter", "URI", false, false, "TypeConverter"),
-        new PluginEntry("url", "org.apache.logging.log4j.plugins.convert.TypeConverters$UrlConverter", "URL", false, false, "TypeConverter"),
-        new PluginEntry("uuid", "org.apache.logging.log4j.plugins.convert.TypeConverters$UuidConverter", "UUID", false, false, "TypeConverter")
-    };
-    @Override
-    public PluginEntry[] getEntries() { return entries;}
-}
diff --git a/log4j-plugins/src/main/resources/META-INF/services/org.apache.logging.log4j.plugins.processor.PluginService b/log4j-plugins/src/main/resources/META-INF/services/org.apache.logging.log4j.plugins.processor.PluginService
deleted file mode 100644
index dc436cf..0000000
--- a/log4j-plugins/src/main/resources/META-INF/services/org.apache.logging.log4j.plugins.processor.PluginService
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.logging.log4j.plugins.convert.plugins.Log4jPlugins

[logging-log4j2] 01/02: Use try-with-resources

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 25d88be893b920f6ab1e3523d711dc61bd4f3bef
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Mon Jan 3 14:06:58 2022 -0600

    Use try-with-resources
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../apache/logging/log4j/plugins/spi/impl/InjectionTargetBean.java    | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/impl/InjectionTargetBean.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/impl/InjectionTargetBean.java
index c64aa32..06ab925 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/impl/InjectionTargetBean.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/spi/impl/InjectionTargetBean.java
@@ -59,12 +59,10 @@ class InjectionTargetBean<T> extends AbstractBean<T> {
 
     @Override
     public void destroy(final T instance, final InitializationContext<T> context) {
-        try {
+        try (context) {
             if (isDependentScoped()) {
                 injectionTarget.preDestroy(instance);
             }
-        } finally {
-            context.close();
         }
     }