SWF-1132 - Spring WebFlow throws IllegalArgumentException while binding map entries

This commit is contained in:
Jeremy Grelle
2009-08-04 23:35:07 +00:00
parent fbd83eb05b
commit 1819f88e45
5 changed files with 53 additions and 6 deletions

View File

@@ -53,6 +53,7 @@ import org.springframework.webflow.engine.builder.BinderConfiguration.Binding;
* @see AbstractMvcView
*
* @author Keith Donald
* @author Jeremy Grelle
*/
public class BindingModel extends AbstractErrors implements BindingResult {
@@ -189,7 +190,11 @@ public class BindingModel extends AbstractErrors implements BindingResult {
valueType = parseFieldExpression(field).getValueType(boundObject);
}
}
return new ConversionExecutorPropertyEditor(conversionService, valueType, converterId);
if (valueType != null) {
return new ConversionExecutorPropertyEditor(conversionService, valueType, converterId);
} else {
return null;
}
} else {
return null;
}

View File

@@ -17,6 +17,8 @@ package org.springframework.webflow;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Simple test bean used by some test cases. Note that this bean has value semantics.
@@ -31,6 +33,8 @@ public class TestBean implements Serializable {
public boolean executed;
public Map emptyMap;
public void execute() {
this.executed = true;
}
@@ -47,6 +51,14 @@ public class TestBean implements Serializable {
return datum3;
}
public Map getEmptyMap() {
if (emptyMap == null) {
emptyMap = new HashMap();
emptyMap.put("foo", null);
}
return emptyMap;
}
public void setDatum3(Date datum3) {
this.datum3 = datum3;
}

View File

@@ -21,9 +21,8 @@ import org.springframework.validation.FieldError;
import org.springframework.webflow.TestBean;
import org.springframework.webflow.engine.builder.BinderConfiguration;
import org.springframework.webflow.engine.builder.BinderConfiguration.Binding;
import org.springframework.webflow.expression.DefaultExpressionParserFactory;
public class BindingModelTests extends TestCase {
public abstract class AbstractBindingModelTests extends TestCase {
BindingModel model;
DefaultMessageContext messages;
@@ -35,10 +34,12 @@ public class BindingModelTests extends TestCase {
testBean = new TestBean();
messages = new DefaultMessageContext();
conversionService = new DefaultConversionService();
expressionParser = DefaultExpressionParserFactory.getExpressionParser();
expressionParser = getExpressionParser();
model = new BindingModel("testBean", testBean, expressionParser, conversionService, messages);
}
protected abstract ExpressionParser getExpressionParser();
public void testInitialState() {
assertEquals(0, model.getErrorCount());
assertEquals(0, model.getFieldErrorCount());
@@ -66,8 +67,7 @@ public class BindingModelTests extends TestCase {
}
public void testGetFieldValueNonStringNoConversionService() {
model = new BindingModel("testBean", testBean, DefaultExpressionParserFactory.getExpressionParser(), null,
messages);
model = new BindingModel("testBean", testBean, getExpressionParser(), null, messages);
testBean.datum2 = 3;
assertEquals(new Integer(3), model.getFieldValue("datum2"));
}

View File

@@ -0,0 +1,11 @@
package org.springframework.webflow.mvc.view;
import org.springframework.binding.expression.ExpressionParser;
import org.springframework.webflow.expression.DefaultExpressionParserFactory;
public class DefaultBindingModelTests extends AbstractBindingModelTests {
protected ExpressionParser getExpressionParser() {
return DefaultExpressionParserFactory.getExpressionParser();
}
}

View File

@@ -0,0 +1,19 @@
package org.springframework.webflow.mvc.view;
import java.beans.PropertyEditor;
import org.springframework.binding.expression.ExpressionParser;
import org.springframework.binding.expression.beanwrapper.BeanWrapperExpressionParser;
public class SpringBeanBindingModelTests extends AbstractBindingModelTests {
protected ExpressionParser getExpressionParser() {
return new BeanWrapperExpressionParser();
}
// See SWF-1132
public void testFindPropertyEditorForUndeterminableType() {
PropertyEditor editor = model.findEditor("emptyMap['foo']", null);
assertNull(editor);
}
}