support for default "conversionService" bean in an ApplicationContext; revised formatting package, now integrated with DataBinder and AnnotationMethodHandlerAdapter; revised AccessControlContext access from BeanFactory

This commit is contained in:
Juergen Hoeller
2009-08-24 13:30:42 +00:00
parent 9f9f2349cd
commit fee838a65e
33 changed files with 846 additions and 320 deletions

View File

@@ -19,6 +19,7 @@ import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.style.ToStringCreator;
import org.springframework.ui.format.number.CurrencyFormatter;
import org.springframework.ui.format.number.IntegerFormatter;
import org.springframework.ui.format.support.GenericFormatterRegistry;
public class GenericFormatterRegistryTests {

View File

@@ -17,6 +17,7 @@
package org.springframework.validation;
import java.beans.PropertyEditorSupport;
import java.beans.PropertyEditor;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
@@ -27,7 +28,6 @@ import java.util.Set;
import java.util.TreeSet;
import junit.framework.TestCase;
import junit.framework.Assert;
import org.springframework.beans.BeanWithObjectProperty;
import org.springframework.beans.DerivedTestBean;
@@ -42,6 +42,8 @@ import org.springframework.beans.propertyeditors.CustomCollectionEditor;
import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.context.support.StaticMessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.ui.format.number.DecimalFormatter;
import org.springframework.util.StringUtils;
/**
@@ -289,7 +291,35 @@ public class DataBinderTests extends TestCase {
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue("object", "1");
binder.bind(pvs);
Assert.assertEquals(new Integer(1), tb.getObject());
assertEquals(new Integer(1), tb.getObject());
}
public void testBindingWithFormatter() {
TestBean tb = new TestBean();
DataBinder binder = new DataBinder(tb);
binder.getFormatterRegistry().add(Float.class, new DecimalFormatter());
MutablePropertyValues pvs = new MutablePropertyValues();
pvs.addPropertyValue("myFloat", "1,2");
LocaleContextHolder.setLocale(Locale.GERMAN);
try {
binder.bind(pvs);
assertEquals(new Float(1.2), tb.getMyFloat());
assertEquals("1,2", binder.getBindingResult().getFieldValue("myFloat"));
PropertyEditor editor = binder.getBindingResult().findEditor("myFloat", Float.class);
assertNotNull(editor);
editor.setValue(new Float(1.4));
assertEquals("1,4", editor.getAsText());
editor = binder.getBindingResult().findEditor("myFloat", null);
assertNotNull(editor);
editor.setAsText("1,6");
assertEquals(new Float(1.6), editor.getValue());
}
finally {
LocaleContextHolder.resetLocaleContext();
}
}
public void testBindingWithAllowedFields() throws Exception {
@@ -673,36 +703,36 @@ public class DataBinderTests extends TestCase {
assertEquals(2, errors.getGlobalErrorCount());
assertEquals("NAME_TOUCHY_MISMATCH", errors.getGlobalError().getCode());
assertEquals("NAME_TOUCHY_MISMATCH", ((ObjectError) errors.getGlobalErrors().get(0)).getCode());
assertEquals("NAME_TOUCHY_MISMATCH.tb", ((ObjectError) errors.getGlobalErrors().get(0)).getCodes()[0]);
assertEquals("NAME_TOUCHY_MISMATCH", ((ObjectError) errors.getGlobalErrors().get(0)).getCodes()[1]);
assertEquals("tb", ((ObjectError) errors.getGlobalErrors().get(0)).getObjectName());
assertEquals("GENERAL_ERROR", ((ObjectError) errors.getGlobalErrors().get(1)).getCode());
assertEquals("GENERAL_ERROR.tb", ((ObjectError) errors.getGlobalErrors().get(1)).getCodes()[0]);
assertEquals("GENERAL_ERROR", ((ObjectError) errors.getGlobalErrors().get(1)).getCodes()[1]);
assertEquals("msg", ((ObjectError) errors.getGlobalErrors().get(1)).getDefaultMessage());
assertEquals("arg", ((ObjectError) errors.getGlobalErrors().get(1)).getArguments()[0]);
assertEquals("NAME_TOUCHY_MISMATCH", (errors.getGlobalErrors().get(0)).getCode());
assertEquals("NAME_TOUCHY_MISMATCH.tb", (errors.getGlobalErrors().get(0)).getCodes()[0]);
assertEquals("NAME_TOUCHY_MISMATCH", (errors.getGlobalErrors().get(0)).getCodes()[1]);
assertEquals("tb", (errors.getGlobalErrors().get(0)).getObjectName());
assertEquals("GENERAL_ERROR", (errors.getGlobalErrors().get(1)).getCode());
assertEquals("GENERAL_ERROR.tb", (errors.getGlobalErrors().get(1)).getCodes()[0]);
assertEquals("GENERAL_ERROR", (errors.getGlobalErrors().get(1)).getCodes()[1]);
assertEquals("msg", (errors.getGlobalErrors().get(1)).getDefaultMessage());
assertEquals("arg", (errors.getGlobalErrors().get(1)).getArguments()[0]);
assertTrue(errors.hasFieldErrors());
assertEquals(4, errors.getFieldErrorCount());
assertEquals("TOO_YOUNG", errors.getFieldError().getCode());
assertEquals("TOO_YOUNG", ((FieldError) errors.getFieldErrors().get(0)).getCode());
assertEquals("age", ((FieldError) errors.getFieldErrors().get(0)).getField());
assertEquals("AGE_NOT_ODD", ((FieldError) errors.getFieldErrors().get(1)).getCode());
assertEquals("age", ((FieldError) errors.getFieldErrors().get(1)).getField());
assertEquals("NOT_ROD", ((FieldError) errors.getFieldErrors().get(2)).getCode());
assertEquals("name", ((FieldError) errors.getFieldErrors().get(2)).getField());
assertEquals("TOO_YOUNG", ((FieldError) errors.getFieldErrors().get(3)).getCode());
assertEquals("spouse.age", ((FieldError) errors.getFieldErrors().get(3)).getField());
assertEquals("TOO_YOUNG", (errors.getFieldErrors().get(0)).getCode());
assertEquals("age", (errors.getFieldErrors().get(0)).getField());
assertEquals("AGE_NOT_ODD", (errors.getFieldErrors().get(1)).getCode());
assertEquals("age", (errors.getFieldErrors().get(1)).getField());
assertEquals("NOT_ROD", (errors.getFieldErrors().get(2)).getCode());
assertEquals("name", (errors.getFieldErrors().get(2)).getField());
assertEquals("TOO_YOUNG", (errors.getFieldErrors().get(3)).getCode());
assertEquals("spouse.age", (errors.getFieldErrors().get(3)).getField());
assertTrue(errors.hasFieldErrors("age"));
assertEquals(2, errors.getFieldErrorCount("age"));
assertEquals("TOO_YOUNG", errors.getFieldError("age").getCode());
assertEquals("TOO_YOUNG", ((FieldError) errors.getFieldErrors("age").get(0)).getCode());
assertEquals("tb", ((FieldError) errors.getFieldErrors("age").get(0)).getObjectName());
assertEquals("age", ((FieldError) errors.getFieldErrors("age").get(0)).getField());
assertEquals(new Integer(0), ((FieldError) errors.getFieldErrors("age").get(0)).getRejectedValue());
assertEquals("AGE_NOT_ODD", ((FieldError) errors.getFieldErrors("age").get(1)).getCode());
assertEquals("TOO_YOUNG", (errors.getFieldErrors("age").get(0)).getCode());
assertEquals("tb", (errors.getFieldErrors("age").get(0)).getObjectName());
assertEquals("age", (errors.getFieldErrors("age").get(0)).getField());
assertEquals(new Integer(0), (errors.getFieldErrors("age").get(0)).getRejectedValue());
assertEquals("AGE_NOT_ODD", (errors.getFieldErrors("age").get(1)).getCode());
assertTrue(errors.hasFieldErrors("name"));
assertEquals(1, errors.getFieldErrorCount("name"));
@@ -711,14 +741,14 @@ public class DataBinderTests extends TestCase {
assertEquals("NOT_ROD.name", errors.getFieldError("name").getCodes()[1]);
assertEquals("NOT_ROD.java.lang.String", errors.getFieldError("name").getCodes()[2]);
assertEquals("NOT_ROD", errors.getFieldError("name").getCodes()[3]);
assertEquals("name", ((FieldError) errors.getFieldErrors("name").get(0)).getField());
assertEquals(null, ((FieldError) errors.getFieldErrors("name").get(0)).getRejectedValue());
assertEquals("name", (errors.getFieldErrors("name").get(0)).getField());
assertEquals(null, (errors.getFieldErrors("name").get(0)).getRejectedValue());
assertTrue(errors.hasFieldErrors("spouse.age"));
assertEquals(1, errors.getFieldErrorCount("spouse.age"));
assertEquals("TOO_YOUNG", errors.getFieldError("spouse.age").getCode());
assertEquals("tb", ((FieldError) errors.getFieldErrors("spouse.age").get(0)).getObjectName());
assertEquals(new Integer(0), ((FieldError) errors.getFieldErrors("spouse.age").get(0)).getRejectedValue());
assertEquals("tb", (errors.getFieldErrors("spouse.age").get(0)).getObjectName());
assertEquals(new Integer(0), (errors.getFieldErrors("spouse.age").get(0)).getRejectedValue());
}
public void testValidatorWithErrorsAndCodesPrefix() {
@@ -744,36 +774,36 @@ public class DataBinderTests extends TestCase {
assertEquals(2, errors.getGlobalErrorCount());
assertEquals("validation.NAME_TOUCHY_MISMATCH", errors.getGlobalError().getCode());
assertEquals("validation.NAME_TOUCHY_MISMATCH", ((ObjectError) errors.getGlobalErrors().get(0)).getCode());
assertEquals("validation.NAME_TOUCHY_MISMATCH.tb", ((ObjectError) errors.getGlobalErrors().get(0)).getCodes()[0]);
assertEquals("validation.NAME_TOUCHY_MISMATCH", ((ObjectError) errors.getGlobalErrors().get(0)).getCodes()[1]);
assertEquals("tb", ((ObjectError) errors.getGlobalErrors().get(0)).getObjectName());
assertEquals("validation.GENERAL_ERROR", ((ObjectError) errors.getGlobalErrors().get(1)).getCode());
assertEquals("validation.GENERAL_ERROR.tb", ((ObjectError) errors.getGlobalErrors().get(1)).getCodes()[0]);
assertEquals("validation.GENERAL_ERROR", ((ObjectError) errors.getGlobalErrors().get(1)).getCodes()[1]);
assertEquals("msg", ((ObjectError) errors.getGlobalErrors().get(1)).getDefaultMessage());
assertEquals("arg", ((ObjectError) errors.getGlobalErrors().get(1)).getArguments()[0]);
assertEquals("validation.NAME_TOUCHY_MISMATCH", (errors.getGlobalErrors().get(0)).getCode());
assertEquals("validation.NAME_TOUCHY_MISMATCH.tb", (errors.getGlobalErrors().get(0)).getCodes()[0]);
assertEquals("validation.NAME_TOUCHY_MISMATCH", (errors.getGlobalErrors().get(0)).getCodes()[1]);
assertEquals("tb", (errors.getGlobalErrors().get(0)).getObjectName());
assertEquals("validation.GENERAL_ERROR", (errors.getGlobalErrors().get(1)).getCode());
assertEquals("validation.GENERAL_ERROR.tb", (errors.getGlobalErrors().get(1)).getCodes()[0]);
assertEquals("validation.GENERAL_ERROR", (errors.getGlobalErrors().get(1)).getCodes()[1]);
assertEquals("msg", (errors.getGlobalErrors().get(1)).getDefaultMessage());
assertEquals("arg", (errors.getGlobalErrors().get(1)).getArguments()[0]);
assertTrue(errors.hasFieldErrors());
assertEquals(4, errors.getFieldErrorCount());
assertEquals("validation.TOO_YOUNG", errors.getFieldError().getCode());
assertEquals("validation.TOO_YOUNG", ((FieldError) errors.getFieldErrors().get(0)).getCode());
assertEquals("age", ((FieldError) errors.getFieldErrors().get(0)).getField());
assertEquals("validation.AGE_NOT_ODD", ((FieldError) errors.getFieldErrors().get(1)).getCode());
assertEquals("age", ((FieldError) errors.getFieldErrors().get(1)).getField());
assertEquals("validation.NOT_ROD", ((FieldError) errors.getFieldErrors().get(2)).getCode());
assertEquals("name", ((FieldError) errors.getFieldErrors().get(2)).getField());
assertEquals("validation.TOO_YOUNG", ((FieldError) errors.getFieldErrors().get(3)).getCode());
assertEquals("spouse.age", ((FieldError) errors.getFieldErrors().get(3)).getField());
assertEquals("validation.TOO_YOUNG", (errors.getFieldErrors().get(0)).getCode());
assertEquals("age", (errors.getFieldErrors().get(0)).getField());
assertEquals("validation.AGE_NOT_ODD", (errors.getFieldErrors().get(1)).getCode());
assertEquals("age", (errors.getFieldErrors().get(1)).getField());
assertEquals("validation.NOT_ROD", (errors.getFieldErrors().get(2)).getCode());
assertEquals("name", (errors.getFieldErrors().get(2)).getField());
assertEquals("validation.TOO_YOUNG", (errors.getFieldErrors().get(3)).getCode());
assertEquals("spouse.age", (errors.getFieldErrors().get(3)).getField());
assertTrue(errors.hasFieldErrors("age"));
assertEquals(2, errors.getFieldErrorCount("age"));
assertEquals("validation.TOO_YOUNG", errors.getFieldError("age").getCode());
assertEquals("validation.TOO_YOUNG", ((FieldError) errors.getFieldErrors("age").get(0)).getCode());
assertEquals("tb", ((FieldError) errors.getFieldErrors("age").get(0)).getObjectName());
assertEquals("age", ((FieldError) errors.getFieldErrors("age").get(0)).getField());
assertEquals(new Integer(0), ((FieldError) errors.getFieldErrors("age").get(0)).getRejectedValue());
assertEquals("validation.AGE_NOT_ODD", ((FieldError) errors.getFieldErrors("age").get(1)).getCode());
assertEquals("validation.TOO_YOUNG", (errors.getFieldErrors("age").get(0)).getCode());
assertEquals("tb", (errors.getFieldErrors("age").get(0)).getObjectName());
assertEquals("age", (errors.getFieldErrors("age").get(0)).getField());
assertEquals(new Integer(0), (errors.getFieldErrors("age").get(0)).getRejectedValue());
assertEquals("validation.AGE_NOT_ODD", (errors.getFieldErrors("age").get(1)).getCode());
assertTrue(errors.hasFieldErrors("name"));
assertEquals(1, errors.getFieldErrorCount("name"));
@@ -782,14 +812,14 @@ public class DataBinderTests extends TestCase {
assertEquals("validation.NOT_ROD.name", errors.getFieldError("name").getCodes()[1]);
assertEquals("validation.NOT_ROD.java.lang.String", errors.getFieldError("name").getCodes()[2]);
assertEquals("validation.NOT_ROD", errors.getFieldError("name").getCodes()[3]);
assertEquals("name", ((FieldError) errors.getFieldErrors("name").get(0)).getField());
assertEquals(null, ((FieldError) errors.getFieldErrors("name").get(0)).getRejectedValue());
assertEquals("name", (errors.getFieldErrors("name").get(0)).getField());
assertEquals(null, (errors.getFieldErrors("name").get(0)).getRejectedValue());
assertTrue(errors.hasFieldErrors("spouse.age"));
assertEquals(1, errors.getFieldErrorCount("spouse.age"));
assertEquals("validation.TOO_YOUNG", errors.getFieldError("spouse.age").getCode());
assertEquals("tb", ((FieldError) errors.getFieldErrors("spouse.age").get(0)).getObjectName());
assertEquals(new Integer(0), ((FieldError) errors.getFieldErrors("spouse.age").get(0)).getRejectedValue());
assertEquals("tb", (errors.getFieldErrors("spouse.age").get(0)).getObjectName());
assertEquals(new Integer(0), (errors.getFieldErrors("spouse.age").get(0)).getRejectedValue());
}
public void testValidatorWithNestedObjectNull() {
@@ -806,8 +836,8 @@ public class DataBinderTests extends TestCase {
assertTrue(errors.hasFieldErrors("spouse"));
assertEquals(1, errors.getFieldErrorCount("spouse"));
assertEquals("SPOUSE_NOT_AVAILABLE", errors.getFieldError("spouse").getCode());
assertEquals("tb", ((FieldError) errors.getFieldErrors("spouse").get(0)).getObjectName());
assertEquals(null, ((FieldError) errors.getFieldErrors("spouse").get(0)).getRejectedValue());
assertEquals("tb", (errors.getFieldErrors("spouse").get(0)).getObjectName());
assertEquals(null, (errors.getFieldErrors("spouse").get(0)).getRejectedValue());
}
public void testNestedValidatorWithoutNestedPath() {
@@ -820,7 +850,7 @@ public class DataBinderTests extends TestCase {
assertTrue(errors.hasGlobalErrors());
assertEquals(1, errors.getGlobalErrorCount());
assertEquals("SPOUSE_NOT_AVAILABLE", errors.getGlobalError().getCode());
assertEquals("tb", ((ObjectError) errors.getGlobalErrors().get(0)).getObjectName());
assertEquals("tb", (errors.getGlobalErrors().get(0)).getObjectName());
}
public void testBindingStringArrayToIntegerSet() {