SWF-1132 - Spring WebFlow throws IllegalArgumentException while binding map entries
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user