@SuppressWarnings("unchecked") @Nullable private <T extends ObjectError> T escapeObjectError(@Nullable T source) { if (source == null) { return null; } String defaultMessage = source.getDefaultMessage(); if (defaultMessage != null) { defaultMessage = HtmlUtils.htmlEscape(defaultMessage); } if (source instanceof FieldError) { FieldError fieldError = (FieldError) source; Object value = fieldError.getRejectedValue(); if (value instanceof String) { value = HtmlUtils.htmlEscape((String) value); } return (T) new FieldError( fieldError.getObjectName(), fieldError.getField(), value, fieldError.isBindingFailure(), fieldError.getCodes(), fieldError.getArguments(), defaultMessage); } else { return (T) new ObjectError( source.getObjectName(), source.getCodes(), source.getArguments(), defaultMessage); } }
private OriginTrackedFieldError(FieldError fieldError, Origin origin) { super(fieldError.getObjectName(), fieldError.getField(), fieldError.getRejectedValue(), fieldError.isBindingFailure(), fieldError.getCodes(), fieldError.getArguments(), fieldError.getDefaultMessage()); this.origin = origin; }
@Test public void testSpringValidation() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); validator.validate(person, result); assertEquals(2, result.getErrorCount()); FieldError fieldError = result.getFieldError("name"); assertEquals("name", fieldError.getField()); List<String> errorCodes = Arrays.asList(fieldError.getCodes()); assertEquals(4, errorCodes.size()); assertTrue(errorCodes.contains("NotNull.person.name")); assertTrue(errorCodes.contains("NotNull.name")); assertTrue(errorCodes.contains("NotNull.java.lang.String")); assertTrue(errorCodes.contains("NotNull")); fieldError = result.getFieldError("address.street"); assertEquals("address.street", fieldError.getField()); errorCodes = Arrays.asList(fieldError.getCodes()); assertEquals(5, errorCodes.size()); assertTrue(errorCodes.contains("NotNull.person.address.street")); assertTrue(errorCodes.contains("NotNull.address.street")); assertTrue(errorCodes.contains("NotNull.street")); assertTrue(errorCodes.contains("NotNull.java.lang.String")); assertTrue(errorCodes.contains("NotNull")); }
@Test public void testSpringValidation() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person"); validator.validate(person, result); assertEquals(2, result.getErrorCount()); FieldError fieldError = result.getFieldError("name"); assertEquals("name", fieldError.getField()); List<String> errorCodes = Arrays.asList(fieldError.getCodes()); assertEquals(4, errorCodes.size()); assertTrue(errorCodes.contains("NotNull.person.name")); assertTrue(errorCodes.contains("NotNull.name")); assertTrue(errorCodes.contains("NotNull.java.lang.String")); assertTrue(errorCodes.contains("NotNull")); fieldError = result.getFieldError("address.street"); assertEquals("address.street", fieldError.getField()); errorCodes = Arrays.asList(fieldError.getCodes()); assertEquals(5, errorCodes.size()); assertTrue(errorCodes.contains("NotNull.person.address.street")); assertTrue(errorCodes.contains("NotNull.address.street")); assertTrue(errorCodes.contains("NotNull.street")); assertTrue(errorCodes.contains("NotNull.java.lang.String")); assertTrue(errorCodes.contains("NotNull")); }
@Test public void testDirectBindingToEmptyIndexedFieldWithRegisteredGenericEditor() { IndexedTestBean tb = new IndexedTestBean(); DataBinder binder = new DataBinder(tb, "tb"); binder.registerCustomEditor(TestBean.class, "map", new PropertyEditorSupport() { @Override public void setAsText(String text) throws IllegalArgumentException { DerivedTestBean tb = new DerivedTestBean(); tb.setName("array" + text); setValue(tb); } @Override public String getAsText() { return ((TestBean) getValue()).getName(); } }); Errors errors = binder.getBindingResult(); errors.rejectValue("map[key0]", "NOT_NULL", "should not be null"); assertEquals(1, errors.getFieldErrorCount("map[key0]")); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCode()); assertEquals("NOT_NULL.tb.map[key0]", errors.getFieldError("map[key0]").getCodes()[0]); assertEquals("NOT_NULL.tb.map", errors.getFieldError("map[key0]").getCodes()[1]); assertEquals("NOT_NULL.map[key0]", errors.getFieldError("map[key0]").getCodes()[2]); assertEquals("NOT_NULL.map", errors.getFieldError("map[key0]").getCodes()[3]); // This next code is only generated because of the registered editor, using the // registered type of the editor as guess for the content type of the collection. assertEquals("NOT_NULL.org.springframework.tests.sample.beans.TestBean", errors.getFieldError("map[key0]").getCodes()[4]); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCodes()[5]); }
@Test public void testDirectBindingToEmptyIndexedFieldWithRegisteredSpecificEditor() { IndexedTestBean tb = new IndexedTestBean(); DataBinder binder = new DataBinder(tb, "tb"); binder.registerCustomEditor(TestBean.class, "map[key0]", new PropertyEditorSupport() { @Override public void setAsText(String text) throws IllegalArgumentException { DerivedTestBean tb = new DerivedTestBean(); tb.setName("array" + text); setValue(tb); } @Override public String getAsText() { return ((TestBean) getValue()).getName(); } }); Errors errors = binder.getBindingResult(); errors.rejectValue("map[key0]", "NOT_NULL", "should not be null"); assertEquals(1, errors.getFieldErrorCount("map[key0]")); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCode()); assertEquals("NOT_NULL.tb.map[key0]", errors.getFieldError("map[key0]").getCodes()[0]); assertEquals("NOT_NULL.tb.map", errors.getFieldError("map[key0]").getCodes()[1]); assertEquals("NOT_NULL.map[key0]", errors.getFieldError("map[key0]").getCodes()[2]); assertEquals("NOT_NULL.map", errors.getFieldError("map[key0]").getCodes()[3]); // This next code is only generated because of the registered editor, using the // registered type of the editor as guess for the content type of the collection. assertEquals("NOT_NULL.org.springframework.tests.sample.beans.TestBean", errors.getFieldError("map[key0]").getCodes()[4]); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCodes()[5]); }
assertEquals("NOT_ROD.tb.array[0].name", errors.getFieldError("array[0].name").getCodes()[0]); assertEquals("NOT_ROD.tb.array.name", errors.getFieldError("array[0].name").getCodes()[1]); assertEquals("NOT_ROD.array[0].name", errors.getFieldError("array[0].name").getCodes()[2]); assertEquals("NOT_ROD.array.name", errors.getFieldError("array[0].name").getCodes()[3]); assertEquals("NOT_ROD.name", errors.getFieldError("array[0].name").getCodes()[4]); assertEquals("NOT_ROD.java.lang.String", errors.getFieldError("array[0].name").getCodes()[5]); assertEquals("NOT_ROD", errors.getFieldError("array[0].name").getCodes()[6]); assertEquals(1, errors.getFieldErrorCount("map[key1].name")); assertEquals(1, errors.getFieldErrorCount("map['key1'].name")); assertEquals(1, errors.getFieldErrorCount("map[\"key1\"].name")); assertEquals("NOT_ROD", errors.getFieldError("map[key1].name").getCode()); assertEquals("NOT_ROD.tb.map[key1].name", errors.getFieldError("map[key1].name").getCodes()[0]); assertEquals("NOT_ROD.tb.map.name", errors.getFieldError("map[key1].name").getCodes()[1]); assertEquals("NOT_ROD.map[key1].name", errors.getFieldError("map[key1].name").getCodes()[2]); assertEquals("NOT_ROD.map.name", errors.getFieldError("map[key1].name").getCodes()[3]); assertEquals("NOT_ROD.name", errors.getFieldError("map[key1].name").getCodes()[4]); assertEquals("NOT_ROD.java.lang.String", errors.getFieldError("map[key1].name").getCodes()[5]); assertEquals("NOT_ROD", errors.getFieldError("map[key1].name").getCodes()[6]);
assertEquals("NOT_ROD", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCode()); assertEquals("NOT_ROD.tb.array[0].nestedIndexedBean.list[0].name", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[0]); assertEquals("NOT_ROD.tb.array[0].nestedIndexedBean.list.name", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[1]); assertEquals("NOT_ROD.tb.array.nestedIndexedBean.list.name", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[2]); assertEquals("NOT_ROD.array[0].nestedIndexedBean.list[0].name", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[3]); assertEquals("NOT_ROD.array[0].nestedIndexedBean.list.name", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[4]); assertEquals("NOT_ROD.array.nestedIndexedBean.list.name", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[5]); assertEquals("NOT_ROD.name", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[6]); assertEquals("NOT_ROD.java.lang.String", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[7]); assertEquals("NOT_ROD", errors.getFieldError("array[0].nestedIndexedBean.list[0].name").getCodes()[8]);
assertEquals(1, errors.getFieldErrorCount("array[0]")); assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCode()); assertEquals("NOT_ROD.tb.array[0]", errors.getFieldError("array[0]").getCodes()[0]); assertEquals("NOT_ROD.tb.array", errors.getFieldError("array[0]").getCodes()[1]); assertEquals("NOT_ROD.array[0]", errors.getFieldError("array[0]").getCodes()[2]); assertEquals("NOT_ROD.array", errors.getFieldError("array[0]").getCodes()[3]); assertEquals("NOT_ROD.org.springframework.tests.sample.beans.DerivedTestBean", errors.getFieldError("array[0]").getCodes()[4]); assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCodes()[5]); assertEquals("arraya", errors.getFieldValue("array[0]")); assertEquals("NOT_ROD.tb.map[key1]", errors.getFieldError("map[key1]").getCodes()[0]); assertEquals("NOT_ROD.tb.map", errors.getFieldError("map[key1]").getCodes()[1]); assertEquals("NOT_ROD.map[key1]", errors.getFieldError("map[key1]").getCodes()[2]); assertEquals("NOT_ROD.map", errors.getFieldError("map[key1]").getCodes()[3]); assertEquals("NOT_ROD.org.springframework.tests.sample.beans.TestBean", errors.getFieldError("map[key1]").getCodes()[4]); assertEquals("NOT_ROD", errors.getFieldError("map[key1]").getCodes()[5]); assertEquals("NOT_NULL.tb.map[key0]", errors.getFieldError("map[key0]").getCodes()[0]); assertEquals("NOT_NULL.tb.map", errors.getFieldError("map[key0]").getCodes()[1]); assertEquals("NOT_NULL.map[key0]", errors.getFieldError("map[key0]").getCodes()[2]); assertEquals("NOT_NULL.map", errors.getFieldError("map[key0]").getCodes()[3]); assertEquals("NOT_NULL", errors.getFieldError("map[key0]").getCodes()[4]);
@SuppressWarnings("unchecked") @Nullable private <T extends ObjectError> T escapeObjectError(@Nullable T source) { if (source == null) { return null; } String defaultMessage = source.getDefaultMessage(); if (defaultMessage != null) { defaultMessage = HtmlUtils.htmlEscape(defaultMessage); } if (source instanceof FieldError) { FieldError fieldError = (FieldError) source; Object value = fieldError.getRejectedValue(); if (value instanceof String) { value = HtmlUtils.htmlEscape((String) value); } return (T) new FieldError( fieldError.getObjectName(), fieldError.getField(), value, fieldError.isBindingFailure(), fieldError.getCodes(), fieldError.getArguments(), defaultMessage); } else { return (T) new ObjectError( source.getObjectName(), source.getCodes(), source.getArguments(), defaultMessage); } }
assertEquals(1, errors.getFieldErrorCount("array[0]")); assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCode()); assertEquals("NOT_ROD.tb.array[0]", errors.getFieldError("array[0]").getCodes()[0]); assertEquals("NOT_ROD.tb.array", errors.getFieldError("array[0]").getCodes()[1]); assertEquals("NOT_ROD.array[0]", errors.getFieldError("array[0]").getCodes()[2]); assertEquals("NOT_ROD.array", errors.getFieldError("array[0]").getCodes()[3]); assertEquals("NOT_ROD.org.springframework.tests.sample.beans.DerivedTestBean", errors.getFieldError("array[0]").getCodes()[4]); assertEquals("NOT_ROD", errors.getFieldError("array[0]").getCodes()[5]); assertEquals("arraya", errors.getFieldValue("array[0]"));
assertEquals(1, errors.getFieldErrorCount("name")); assertEquals("NOT_ROD", errors.getFieldError("name").getCode()); assertEquals("NOT_ROD.tb.name", errors.getFieldError("name").getCodes()[0]); 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", (errors.getFieldErrors("name").get(0)).getField()); assertEquals(null, (errors.getFieldErrors("name").get(0)).getRejectedValue());
assertEquals(1, errors.getFieldErrorCount("name")); assertEquals("validation.NOT_ROD", errors.getFieldError("name").getCode()); assertEquals("validation.NOT_ROD.tb.name", errors.getFieldError("name").getCodes()[0]); 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", (errors.getFieldErrors("name").get(0)).getField()); assertEquals(null, (errors.getFieldErrors("name").get(0)).getRejectedValue());
private String resolveErrorCode(FieldError fieldError) { String[] fieldErrorCodes = fieldError.getCodes(); return fieldErrorCodes[fieldErrorCodes.length - 1]; }
private String resolveLocalizedErrorMessage(FieldError fieldError) { Locale currentLocale = LocaleContextHolder.getLocale(); String localizedErrorMessage = messageSource.getMessage(fieldError, currentLocale); //If the message was not found, return the most accurate field error code instead. //You can remove this check if you prefer to get the default error message. if (localizedErrorMessage.equals(fieldError.getDefaultMessage())) { String[] fieldErrorCodes = fieldError.getCodes(); localizedErrorMessage = fieldErrorCodes[0]; } return localizedErrorMessage; } }
/** * @see OrderValidator#validate(Object, org.springframework.validation.Errors) */ @Test public void validate_shouldFailValidationIfOrderTypejavaClassDoesNotMatchOrderclass() { Order order = new DrugOrder(); order.setConcept(Context.getConceptService().getConcept(88)); order.setPatient(Context.getPatientService().getPatient(2)); order.setOrderer(Context.getProviderService().getProvider(1)); order.setOrderType(Context.getOrderService().getOrderTypeByName("Test order")); Errors errors = new BindException(order, "order"); new OrderValidator().validate(order, errors); Assert.assertTrue(errors.hasFieldErrors("orderType")); Assert.assertTrue(Arrays.asList(errors.getFieldError("orderType").getCodes()).contains( "Order.error.orderTypeClassMismatchesOrderClass")); }
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops") public void validate(Object target, MessageContext context, Class<?>...groups) { Errors errors = checkConstraints(target, groups); if (errors.hasErrors()) { for (FieldError fieldError : errors.getFieldErrors()) { context.addMessage( new MessageBuilder().error().source(fieldError.getField()).codes( fieldError.getCodes()).defaultText(fieldError.getDefaultMessage()).build() ); } } }
private ObjectError escapeObjectError(ObjectError source) { if (source == null) { return null; } if (source instanceof FieldError) { FieldError fieldError = (FieldError) source; Object value = fieldError.getRejectedValue(); if (value instanceof String) { value = HtmlUtils.htmlEscape((String) value); } return new FieldError( fieldError.getObjectName(), fieldError.getField(), value, fieldError.isBindingFailure(), fieldError.getCodes(), fieldError.getArguments(), HtmlUtils.htmlEscape(fieldError.getDefaultMessage())); } return new ObjectError( source.getObjectName(), source.getCodes(), source.getArguments(), HtmlUtils.htmlEscape(source.getDefaultMessage())); }
public void testGetFieldErrorsWildcard() { messages.addMessage(new MessageBuilder().source("datum2").error().defaultText("Error").build()); assertEquals(1, model.getFieldErrorCount("da*")); FieldError error = model.getFieldError("da*"); assertEquals(null, error.getCode()); assertEquals(null, error.getCodes()); assertEquals(null, error.getArguments()); assertEquals("Error", error.getDefaultMessage()); }
public void testGetFieldError() { messages.addMessage(new MessageBuilder().source("datum2").error().defaultText("Error").build()); assertEquals(1, model.getErrorCount()); assertEquals(1, model.getFieldErrorCount()); assertEquals(0, model.getGlobalErrorCount()); FieldError error = model.getFieldError("datum2"); assertEquals(null, error.getCode()); assertEquals(null, error.getCodes()); assertEquals(null, error.getArguments()); assertEquals("Error", error.getDefaultMessage()); // we dont track this assertEquals(null, error.getRejectedValue()); assertTrue(!error.isBindingFailure()); FieldError error2 = model.getFieldErrors().get(0); assertEquals(error, error2); }