This is an automated email from the ASF dual-hosted git repository. mattjuntunen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-configuration.git
commit 4e76fd8c9e9139314ae83faa21c9da2aee786031 Author: Matt Juntunen <mattjuntu...@apache.org> AuthorDate: Tue Jun 14 23:34:00 2022 -0400 CONFIGURATION-813: simplify mailapi conversions --- .../configuration2/convert/PropertyConverter.java | 40 +++++++++------------- .../configuration2/TestDataConfiguration.java | 21 +++--------- 2 files changed, 22 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java b/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java index 2c2b451e..255bedab 100644 --- a/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java +++ b/src/main/java/org/apache/commons/configuration2/convert/PropertyConverter.java @@ -67,10 +67,10 @@ public final class PropertyConverter { /** Constant for the argument classes of the Number constructor that takes a String. */ private static final Class<?>[] CONSTR_ARGS = {String.class}; - /** The fully qualified name of {@code javax.mail.internet.InternetAddress} */ - private static final String INTERNET_ADDRESS_CLASSNAME = "javax.mail.internet.InternetAddress"; + /** The fully qualified name of {@code javax.mail.internet.InternetAddress}, as used in the javamail-1.* API. */ + private static final String INTERNET_ADDRESS_CLASSNAME_JAVAX = "javax.mail.internet.InternetAddress"; - /** The fully qualified name of {@code jakarta.mail.internet.InternetAddress} */ + /** The fully qualified name of {@code jakarta.mail.internet.InternetAddress}, as used in the javamail-2.0+ API. */ private static final String INTERNET_ADDRESS_CLASSNAME_JAKARTA = "jakarta.mail.internet.InternetAddress"; /** @@ -151,10 +151,12 @@ public final class PropertyConverter { return convertToEnum(cls, value); } else if (Color.class.equals(cls)) { return toColor(value); - } else if (cls.getName().equals(INTERNET_ADDRESS_CLASSNAME)) { - return toInternetAddress(value); + } else if (cls.getName().equals(INTERNET_ADDRESS_CLASSNAME_JAVAX)) { + // javamail-1.* With javax.mail.* namespace. + return toInternetAddress(value, INTERNET_ADDRESS_CLASSNAME_JAVAX); } else if (cls.getName().equals(INTERNET_ADDRESS_CLASSNAME_JAKARTA)) { - return toInternetAddress(value); + // javamail-2.0+, with jakarta.mail.* namespace. + return toInternetAddress(value, INTERNET_ADDRESS_CLASSNAME_JAKARTA); } else if (InetAddress.class.isAssignableFrom(cls)) { return toInetAddress(value); } else if (Duration.class.equals(cls)) { @@ -600,36 +602,28 @@ public final class PropertyConverter { } /** - * Convert the specified value into an email address. + * Convert the specified value into an email address with the given class name. * * @param value the value to convert + * @param targetClassName the fully qualified name of the {@code InternetAddress} class to convert to, e.g., + * {@value #INTERNET_ADDRESS_CLASSNAME_JAVAX} or {@value #INTERNET_ADDRESS_CLASSNAME_JAKARTA} * @return the converted value * @throws ConversionException thrown if the value cannot be converted to an email address * * @since 1.5 */ - static Object toInternetAddress(final Object value) throws ConversionException { - if (value.getClass().getName().equals(INTERNET_ADDRESS_CLASSNAME)) { - return value; - } - if (value.getClass().getName().equals(INTERNET_ADDRESS_CLASSNAME_JAKARTA)) { + static Object toInternetAddress(final Object value, final String targetClassName) throws ConversionException { + if (value.getClass().getName().equals(targetClassName)) { return value; } if (!(value instanceof String)) { - throw new ConversionException("The value " + value + " can't be converted to a InternetAddress"); + throw new ConversionException("The value " + value + " can't be converted to an InternetAddress"); } try { - try { - // javamail-2.0+, with jakarta.mail.* namespace. - final Constructor<?> ctor = Class.forName(INTERNET_ADDRESS_CLASSNAME_JAKARTA).getConstructor(String.class); - return ctor.newInstance(value); - } catch (ClassNotFoundException e) { - // maybe javamail-1.*? With javax.mail.* namespace. - final Constructor<?> ctor = Class.forName(INTERNET_ADDRESS_CLASSNAME).getConstructor(String.class); - return ctor.newInstance(value); - } + final Constructor<?> ctor = Class.forName(targetClassName).getConstructor(String.class); + return ctor.newInstance(value); } catch (final Exception e) { - throw new ConversionException("The value " + value + " can't be converted to a InternetAddress", e); + throw new ConversionException("The value " + value + " can't be converted to an InternetAddress", e); } } diff --git a/src/test/java/org/apache/commons/configuration2/TestDataConfiguration.java b/src/test/java/org/apache/commons/configuration2/TestDataConfiguration.java index af393b0a..f9099493 100644 --- a/src/test/java/org/apache/commons/configuration2/TestDataConfiguration.java +++ b/src/test/java/org/apache/commons/configuration2/TestDataConfiguration.java @@ -48,6 +48,7 @@ import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; +import jakarta.mail.internet.InternetAddress; import junitx.framework.ArrayAssert; import junitx.framework.ListAssert; @@ -71,18 +72,6 @@ public class TestDataConfiguration { /** The test instance. */ private DataConfiguration conf; - /** - * Create an instance of InternetAddress. This trick is necessary to compile and run the test with Java 1.3 and the - * javamail-1.4 which is not compatible with Java 1.3. - * - * <p>javamail-2.0 had a namespace change, moving javax.mail.* to jakarta.mail.*. This test verifies if we have - * javax.mail.* in the classpath before trying the Jakarta classes.</p> - */ - private Object createInternetAddress(final String email) throws Exception { - final Class<?> cls = Class.forName("jakarta.mail.internet.InternetAddress"); - return cls.getConstructor(String.class).newInstance(email); - } - @Before public void setUp() throws Exception { final BaseConfiguration baseConfig = new BaseConfiguration(); @@ -358,7 +347,7 @@ public class TestDataConfiguration { // email address conf.addProperty("email.string", "ebo...@apache.org"); conf.addProperty("email.string.interpolated", "${email.string}"); - conf.addProperty("email.object", createInternetAddress("ebo...@apache.org")); + conf.addProperty("email.object", new InternetAddress("ebo...@apache.org")); } /** @@ -842,7 +831,7 @@ public class TestDataConfiguration { } try { - conf.get(Class.forName("jakarta.mail.internet.InternetAddress"), "key1"); + conf.get(InternetAddress.class, "key1"); fail("getInternetAddress didn't throw a ConversionException"); } catch (final ConversionException e) { // expected @@ -1829,7 +1818,7 @@ public class TestDataConfiguration { @Test public void testGetInternetAddress() throws Exception { - final Object expected = createInternetAddress("ebo...@apache.org"); + final Object expected = new InternetAddress("ebo...@apache.org"); // address as string assertEquals(expected, conf.get(expected.getClass(), "email.string")); @@ -1851,7 +1840,7 @@ public class TestDataConfiguration { @Test(expected = ConversionException.class) public void testGetInternetAddressInvalidType() throws Exception { - final Object expected = createInternetAddress("ebo...@apache.org"); + final Object expected = new InternetAddress("ebo...@apache.org"); conf.setProperty("email.invalid", "ebourg@apache@org"); conf.get(expected.getClass(), "email.invalid"); }