private static String getViolationPath(final ConstraintViolation violation) { final String propertyPath = violation.getPropertyPath().toString(); return !"".equals(propertyPath) ? propertyPath : ""; }
@Test public void testSimpleValidationWithClassLevel() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); person.setName("Juergen"); person.getAddress().setStreet("Juergen's Street"); Set<ConstraintViolation<ValidPerson>> result = validator.validate(person); assertEquals(1, result.size()); Iterator<ConstraintViolation<ValidPerson>> iterator = result.iterator(); ConstraintViolation<?> cv = iterator.next(); assertEquals("", cv.getPropertyPath().toString()); assertTrue(cv.getConstraintDescriptor().getAnnotation() instanceof NameAddressValid); }
@Test public void testSimpleValidation() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); Set<ConstraintViolation<ValidPerson>> result = validator.validate(person); assertEquals(2, result.size()); for (ConstraintViolation<ValidPerson> cv : result) { String path = cv.getPropertyPath().toString(); if ("name".equals(path) || "address.street".equals(path)) { assertTrue(cv.getConstraintDescriptor().getAnnotation() instanceof NotNull); } else { fail("Invalid constraint violation with path '" + path + "'"); } } Validator nativeValidator = validator.unwrap(Validator.class); assertTrue(nativeValidator.getClass().getName().startsWith("org.hibernate")); assertTrue(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory); assertTrue(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory); validator.destroy(); }
@Test public void testSimpleValidationWithCustomProvider() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setProviderClass(HibernateValidator.class); validator.afterPropertiesSet(); ValidPerson person = new ValidPerson(); Set<ConstraintViolation<ValidPerson>> result = validator.validate(person); assertEquals(2, result.size()); for (ConstraintViolation<ValidPerson> cv : result) { String path = cv.getPropertyPath().toString(); if ("name".equals(path) || "address.street".equals(path)) { assertTrue(cv.getConstraintDescriptor().getAnnotation() instanceof NotNull); } else { fail("Invalid constraint violation with path '" + path + "'"); } } Validator nativeValidator = validator.unwrap(Validator.class); assertTrue(nativeValidator.getClass().getName().startsWith("org.hibernate")); assertTrue(validator.unwrap(ValidatorFactory.class) instanceof HibernateValidatorFactory); assertTrue(validator.unwrap(HibernateValidatorFactory.class) instanceof HibernateValidatorFactory); validator.destroy(); }
@Test public void testEmbeddedCollection() { Session s = openSession(); Transaction tx = s.beginTransaction(); Screen screen = new Screen(); PowerSupply ps = new PowerSupply(); screen.setPowerSupply( ps ); DisplayConnector conn = new DisplayConnector(); conn.setNumber( 0 ); screen.getConnectors().add( conn ); try { s.persist( screen ); s.flush(); fail( "Collection of embedded objects should be validated" ); } catch ( ConstraintViolationException e ) { assertEquals( 1, e.getConstraintViolations().size() ); final ConstraintViolation constraintViolation = e.getConstraintViolations().iterator().next(); assertEquals( Screen.class, constraintViolation.getRootBeanClass() ); // toString works since hibernate validator's Path implementation works accordingly. Should do a Path comparison though assertEquals( "connectors[].number", constraintViolation.getPropertyPath().toString() ); } tx.rollback(); s.close(); }
@Test public void testEmbedded() { Session s = openSession(); Transaction tx = s.beginTransaction(); Screen screen = new Screen(); PowerSupply ps = new PowerSupply(); screen.setPowerSupply( ps ); Button button = new Button(); button.setName( null ); button.setSize( 3 ); screen.setStopButton( button ); try { s.persist( screen ); s.flush(); fail( "@NotNull on embedded property is not evaluated" ); } catch ( ConstraintViolationException e ) { assertEquals( 1, e.getConstraintViolations().size() ); ConstraintViolation<?> cv = e.getConstraintViolations().iterator().next(); assertEquals( Screen.class, cv.getRootBeanClass() ); // toString works since hibernate validator's Path implementation works accordingly. Should do a Path comparison though assertEquals( "stopButton.name", cv.getPropertyPath().toString() ); } tx.rollback(); s.close(); }
ResteasyConstraintViolation createResteasyConstraintViolation(ConstraintViolation<?> cv, Type ct) { String path = (suppressPath ? "*" : cv.getPropertyPath().toString()); ResteasyConstraintViolation rcv = new ResteasyConstraintViolation(ct, path, cv.getMessage(), (cv.getInvalidValue() == null ? "null" :cv.getInvalidValue().toString())); return rcv; }
protected ResteasyConstraintViolation convertViolation(ConstraintViolation<?> violation) { Type ct = util.getConstraintType(violation); String path = (suppressPath ? "*" : violation.getPropertyPath().toString()); return new ResteasyConstraintViolation(ct, path, violation.getMessage(), convertArrayToString(violation.getInvalidValue())); }
ValidationError error = new ValidationError(); error.setMessage(violation.getMessage()); error.setPath(violation.getPropertyPath().toString()); errors.addError(error);
/** * constructor fills data from violation. * * @param pviolation violation to fill date from */ public ValidationDto(final ConstraintViolation<?> pviolation) { this(pviolation.getMessage(), pviolation.getPropertyPath().toString()); }
/** * Get a path to a field causing constraint violations. * * @param violation constraint violation. * @return path to a property that caused constraint violations. */ private static String getViolationPath(final ConstraintViolation violation) { final String rootBeanName = violation.getRootBean().getClass().getSimpleName(); final String propertyPath = violation.getPropertyPath().toString(); return rootBeanName + (!"".equals(propertyPath) ? '.' + propertyPath : ""); }
public void validate(Object obj, Class<?>... groups) { final List<String> violations = validator.validate(obj, groups).stream() .map(vl -> vl.getPropertyPath().toString() + " : " + vl.getMessage()) .collect(Collectors.toList()); if (!violations.isEmpty()) { LOGGER.debug(violations.toString()); throw new ValidationException(FORMAT_ERROR.name() + ": " + violations); } } }
private static <T> void appendViolations(StringBuilder builder, Set<ConstraintViolation<T>> violations) { for (ConstraintViolation<T> violation : violations) { builder.append("\n\t") .append(violation.getPropertyPath().toString()) .append(" failed validation for ") .append(violation.getConstraintDescriptor().getAnnotation().annotationType().getName()) .append(" with message '") .append(violation.getMessage()) .append("'"); } }
public void validate(Object obj, Class<?>... groups) { final List<String> violations = validator.validate(obj, groups).stream() .map(vl -> vl.getPropertyPath().toString() + " : " + vl.getMessage()) .collect(Collectors.toList()); if (!violations.isEmpty()) { LOGGER.debug(violations.toString()); throw new ValidationException(FORMAT_ERROR.name() + ": " + violations); } } }
public void validate(Object obj, Class<?>... groups) { final List<String> violations = validator.validate(obj, groups).stream() .map(vl -> vl.getPropertyPath().toString() + " : " + vl.getMessage()) .collect(Collectors.toList()); if (!violations.isEmpty()) { LOGGER.debug(violations.toString()); throw new ValidationException(FORMAT_ERROR.name() + ": " + violations); } } }
@ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(ConstraintViolationException.class) public List<ApiError> handleValidationExceptions(ConstraintViolationException ex) { return ex.getConstraintViolations() .stream() .map(err -> new ApiError(err.getPropertyPath().toString(), err.getMessage())) .collect(Collectors.toList()); }
/** * Converts a ConstraintViolation * to a FieldError */ private static LemonFieldError of(ConstraintViolation<?> constraintViolation) { // Get the field name by removing the first part of the propertyPath. // (The first part would be the service method name) String field = StringUtils.substringAfter( constraintViolation.getPropertyPath().toString(), "."); return new LemonFieldError(field, constraintViolation.getMessageTemplate(), constraintViolation.getMessage()); }
protected ResteasyConstraintViolation convertViolation(ConstraintViolation<?> violation) { Type ct = util.getConstraintType(violation); String path = (suppressPath ? "*" : violation.getPropertyPath().toString()); return new ResteasyConstraintViolation(ct, path, violation.getMessage(), convertArrayToString(violation.getInvalidValue())); }