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 2017/03/23 16:07:08 UTC
svn commit: r1788274 - in /felix/trunk/converter/converter/src:
main/java/org/apache/felix/converter/impl/ConvertingImpl.java
test/java/org/apache/felix/converter/impl/ConverterMapTest.java
Author: davidb
Date: Thu Mar 23 16:07:08 2017
New Revision: 1788274
URL: http://svn.apache.org/viewvc?rev=1788274&view=rev
Log:
Felix Converter - support case-insensitive keys.
Modified:
felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java
Modified: felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java?rev=1788274&r1=1788273&r2=1788274&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java Thu Mar 23 16:07:08 2017
@@ -484,6 +484,15 @@ public class ConvertingImpl implements C
Class<?> targetType = method.getReturnType();
Object val = m.get(propName);
+ if (val == null && keysIgnoreCase) {
+ // try in a case-insensitive way
+ for (Iterator it = m.keySet().iterator(); it.hasNext() && val == null; ) {
+ String k = it.next().toString();
+ if (propName.equalsIgnoreCase(k)) {
+ val = m.get(k);
+ }
+ }
+ }
// If no value is available take the default if specified
if (val == null) {
Modified: felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java?rev=1788274&r1=1788273&r2=1788274&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java (original)
+++ felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java Thu Mar 23 16:07:08 2017
@@ -321,6 +321,37 @@ public class ConverterMapTest {
assertTrue(ta.equals(ta));
}
+ @Test
+ public void testCaseInsensitiveKeysAnnotation() {
+ Map<String, Object> m = new HashMap<>();
+ m.put("FOO", "Bleh");
+ m.put("baR", 21);
+ m.put("za.za", true);
+
+ TestInterface ti = converter.convert(m).keysIgnoreCase().to(TestInterface.class);
+ assertEquals("Bleh", ti.foo());
+ assertEquals(21, ti.bar("42"));
+ assertTrue(ti.za_za());
+ }
+
+ @Test
+ public void testCaseSensitiveKeysAnnotation() {
+ Map<String, Object> m = new HashMap<>();
+ m.put("FOO", "Bleh");
+ m.put("baR", 21);
+ m.put("za.za", true);
+
+ TestInterface ti = converter.convert(m).to(TestInterface.class);
+ try {
+ ti.foo();
+ fail("Should have thrown a conversion exception as 'foo' was not set");
+ } catch (ConversionException ce) {
+ // good
+ }
+ assertEquals(42, ti.bar("42"));
+ assertTrue(ti.za_za());
+ }
+
interface TestInterface {
String foo();
int bar();