BATCH-1070: Added 'strict' property to BeanWrapperFieldSetMapper.

This commit is contained in:
dhgarrette
2009-02-10 03:23:01 +00:00
parent 217e0cbdcc
commit 0d39705748
2 changed files with 43 additions and 1 deletions

View File

@@ -90,6 +90,8 @@ public class BeanWrapperFieldSetMapper<T> extends DefaultPropertyEditorRegistrar
private static Map<Class<?>, Map<String, String>> propertiesMatched = new HashMap<Class<?>, Map<String, String>>();
private static int distanceLimit = 5;
private boolean strict = true;
/*
* (non-Javadoc)
@@ -186,7 +188,7 @@ public class BeanWrapperFieldSetMapper<T> extends DefaultPropertyEditorRegistrar
*/
protected DataBinder createBinder(Object target) {
DataBinder binder = new DataBinder(target);
binder.setIgnoreUnknownFields(false);
binder.setIgnoreUnknownFields(!this.strict);
initBinder(binder);
registerCustomEditors(binder);
return binder;
@@ -320,4 +322,14 @@ public class BeanWrapperFieldSetMapper<T> extends DefaultPropertyEditorRegistrar
properties.setProperty(newName, value);
}
/**
* Public setter for the 'strict' property. If true, then
* {@link #mapFieldSet(FieldSet)} will fail of the FieldSet contains fields
* that cannot be mapped to the bean.
*
* @param strict
*/
public void setStrict(boolean strict) {
this.strict = strict;
}
}

View File

@@ -403,4 +403,34 @@ public class BeanWrapperFieldSetMapperTests extends TestCase {
}
}
public void testStrict() throws Exception {
BeanWrapperFieldSetMapper<TestObject> mapper = new BeanWrapperFieldSetMapper<TestObject>();
mapper.setStrict(true);
mapper.setTargetType(TestObject.class);
mapper.afterPropertiesSet();
FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "This won't be mapped",
"true", "C" }, new String[] { "varString", "illegalPropertyName", "varBoolean", "varChar" });
try {
mapper.mapFieldSet(fieldSet);
fail("expected error");
}
catch(NotWritablePropertyException e) {
assertTrue(e.getMessage().contains("'illegalPropertyName'"));
}
}
public void testNotStrict() throws Exception {
BeanWrapperFieldSetMapper<TestObject> mapper = new BeanWrapperFieldSetMapper<TestObject>();
mapper.setStrict(false);
mapper.setTargetType(TestObject.class);
mapper.afterPropertiesSet();
FieldSet fieldSet = new DefaultFieldSet(new String[] { "This is some dummy string", "This won't be mapped",
"true", "C" }, new String[] { "varString", "illegalPropertyName", "varBoolean", "varChar" });
TestObject result = mapper.mapFieldSet(fieldSet);
assertEquals("This is some dummy string", result.getVarString());
assertEquals(true, result.isVarBoolean());
assertEquals('C', result.getVarChar());
}
}