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 <[email protected]> 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 <[email protected]> --- .../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
