You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2016/04/15 09:47:36 UTC

svn commit: r1739245 - in /felix/trunk/converter/src: main/java/org/apache/felix/converter/impl/ConvertingImpl.java test/java/org/apache/felix/converter/impl/ConverterTest.java

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());