Author: davidb Date: Fri Apr 15 07:47:35 2016 New Revision: 1739245 URL: http://svn.apache.org/viewvc?rev=1739245&view=rev Log: Felix Converter Service - Support conversions via String Constructor
Modified: felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java Modified: felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java?rev=1739245&r1=1739244&r2=1739245&view=diff ============================================================================== --- felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java (original) +++ felix/trunk/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java Fri Apr 15 07:47:35 2016 @@ -16,6 +16,7 @@ */ package org.apache.felix.converter.impl; +import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.Collection; @@ -186,7 +187,11 @@ public class ConvertingImpl implements C return (T) m.invoke(null, object.toString()); } } catch (Exception e) { - return null; + try { + Constructor<T> ctr = cls.getConstructor(String.class); + return ctr.newInstance(object.toString()); + } catch (Exception e2) { + } } return null; } Modified: felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java URL: http://svn.apache.org/viewvc/felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java?rev=1739245&r1=1739244&r2=1739245&view=diff ============================================================================== --- felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java (original) +++ felix/trunk/converter/src/test/java/org/apache/felix/converter/impl/ConverterTest.java Fri Apr 15 07:47:35 2016 @@ -18,6 +18,7 @@ package org.apache.felix.converter.impl; import java.math.BigDecimal; import java.math.BigInteger; +import java.net.URL; import java.util.Collections; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -118,6 +119,38 @@ public class ConverterTest { } @Test + public void testFromUnknownDataTypeViaString() { + class MyClass { + @Override + public String toString() { + return "1234"; + } + }; + MyClass o = new MyClass(); + + assertEquals(1234, (int) converter.convert(o).to(int.class)); + assertEquals("1234", converter.convert(o).to(String.class)); + } + + @Test + public void testToUnknownViaStringCtor() { + class MyClass { + @Override + public String toString() { + return "http://127.0.0.1:1234/blah"; + } + }; + MyClass o = new MyClass(); + + URL url = converter.convert(o).to(URL.class); + assertEquals("http://127.0.0.1:1234/blah", url.toString()); + assertEquals("http", url.getProtocol()); + assertEquals("127.0.0.1", url.getHost()); + assertEquals(1234, url.getPort()); + assertEquals("/blah", url.getPath()); + } + + @Test public void testStandardStringArrayConversion() { String[] sa = {"A", "B"}; assertEquals("A", converter.convert(sa).toString());