protected Response handleConstraintViolationException(ConstraintViolationException cve) { ViolationReport report = new ViolationReport(); for (ConstraintViolation cv : cve.getConstraintViolations()) { report.addConstraintViolation(new RestConstraintViolation( cv.getPropertyPath().toString(), cv.getMessage(), cv.getInvalidValue() == null ? "null" : cv.getInvalidValue().toString())); } // TODO for now just do xml output return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(report).type(ContentType.TEXT_XML_UTF_8).build(); } }
violations.addAll(validator.validate(parameterBean, classgroups )); throw new ConstraintViolationException("Failed to validate service: " + clazz.getName() + ", method: " + methodName + ", cause: " + violations, violations);
@ExceptionHandler(ConstraintViolationException.class) public ResponseEntity<Map<String, Object>> handleConstraintViolationException( HttpServletRequest request, ConstraintViolationException ex ) { return handleError(request, BAD_REQUEST, new BadRequestException(ex.getMessage())); }
public Response buildErrorResponse(Exception e) { final Throwable jpaException = exceptionTranslator.translate(e); Response.Status s; String reason; if (jpaException instanceof EntityExistsException) { s = Response.Status.BAD_REQUEST; reason = "Violating unique constraints"; } else if (jpaException instanceof ConstraintViolationException) { ConstraintViolationException constraintViolationException = (ConstraintViolationException) jpaException; return buildViolationErrorResponse(constraintViolationException.getConstraintViolations()); } else { s = Response.Status.INTERNAL_SERVER_ERROR; reason = "Internal server error"; } LOG.info("Responding with error '" + s + "', '" + reason + "'. Cause attached.", e); return Response .status(s) .entity(reason) .build(); }
@Override @SuppressWarnings("unchecked") public void afterPropertiesSet() throws Exception { Assert.state(yaml != null, "Yaml document should not be null"); Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); try { logger.trace("Yaml document is\n" + yaml); configuration = (T) (new Yaml(constructor)).load(yaml); Set<ConstraintViolation<T>> errors = validator.validate(configuration); if (!errors.isEmpty()) { logger.error("YAML configuration failed validation"); for (ConstraintViolation<?> error : errors) { logger.error(error.getPropertyPath() + ": " + error.getMessage()); } if (exceptionIfInvalid) { @SuppressWarnings("rawtypes") ConstraintViolationException summary = new ConstraintViolationException((Set) errors); throw summary; } } } catch (YAMLException e) { if (exceptionIfInvalid) { throw e; } } }
/** * 400 - Bad Request */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(ConstraintViolationException.class) public AjaxResult handleServiceException(ConstraintViolationException e) { logger.error("参数验证失败", e); Set<ConstraintViolation<?>> violations = e.getConstraintViolations(); ConstraintViolation<?> violation = violations.iterator().next(); String message = violation.getMessage(); return new AjaxResult().failure("parameter:" + message); }
@ExceptionHandler(ConstraintViolationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) ResponseMessage handleConstraintViolationException(ConstraintViolationException e) { SimpleValidateResults results = new SimpleValidateResults(); for (ConstraintViolation<?> violation : e.getConstraintViolations()) { results.addResult(violation.getPropertyPath().toString(), violation.getMessage()); } List<ValidateResults.Result> errorResults = results.getResults(); return ResponseMessage .error(400, errorResults.isEmpty() ? "" : errorResults.get(0).getMessage()) .result(errorResults); }
Set<ConstraintViolation<?>> violations = ((ConstraintViolationException) cause).getConstraintViolations(); ConstraintViolation<?> v = it.next(); sb.append(v.getRootBeanClass().getSimpleName()); sb.append("."); sb.append(v.getPropertyPath()); sb.append(" ("); sb.append(v.getMessage()); sb.append(")");
/** * Extract {@link ConstraintViolation constraint violations} from given exception and transform them into a list of * {@link ValidationError validation errors}. * * @param violation exception containing constraint violations. * @return list of validation errors (not {@code null}). */ public static List<ValidationError> constraintViolationToValidationErrors(final ConstraintViolationException violation) { return violation.getConstraintViolations().stream().map(violation1 -> new ValidationError( violation1.getMessage(), violation1.getMessageTemplate(), getViolationPath(violation1), getViolationInvalidValue(violation1.getInvalidValue()) )).collect(Collectors.toList()); }
private void handleValidationException(Set constraintViolations) throws ConstraintViolationException { if (constraintViolations != null && !constraintViolations.isEmpty()) { Iterator<ConstraintViolation<ConfigBeanProxy>> it = constraintViolations.iterator(); StringBuilder sb = new StringBuilder(); sb.append(MessageFormat.format(i18n.getString("bean.validation.failure"), this.<ConfigBeanProxy>getProxyType().getSimpleName())); String violationMsg = i18n.getString("bean.validation.constraintViolation"); while (it.hasNext()) { ConstraintViolation cv = it.next(); sb.append(" "); sb.append(MessageFormat.format(violationMsg, cv.getMessage(), cv.getPropertyPath())); if (it.hasNext()) { sb.append(i18n.getString("bean.validation.separator")); } } bean.getLock().unlock(); throw new ConstraintViolationException(sb.toString(), constraintViolations); } }
private static ErrorResponse constraintViolationExceptionToErrorResponse(ConstraintViolationException exception) { ErrorResponse errorResponse = new ErrorResponse(); errorResponse.setStatus(Response.Status.BAD_REQUEST.getStatusCode()); errorResponse.setMessage("Validation failed, check below errors for detail."); List<ValidationError> validationErrors = new ArrayList<>(); exception.getConstraintViolations().forEach(e -> validationErrors.add(new ValidationError(getViolationPath(e), e.getMessage(), getViolationInvalidValue(e.getInvalidValue())))); errorResponse.setValidationErrors(validationErrors); return errorResponse; }
@Test(expected = ConstraintViolationException.class) public void testGetTaskQueueSizes(){ try{ List<String> list = new ArrayList<>(); taskService.getTaskQueueSizes(list); } catch (ConstraintViolationException ex){ assertEquals(1, ex.getConstraintViolations().size()); Set<String> messages = getConstraintViolationMessages(ex.getConstraintViolations()); assertTrue(messages.contains("List of taskType cannot be null or empty")); throw ex; } }
final Class<?>[] groups = groupsPerOperation.get( operation ); if ( groups.length > 0 ) { final Set<ConstraintViolation<T>> constraintViolations = validator.validate( object, groups ); if ( constraintViolations.size() > 0 ) { Set<ConstraintViolation<?>> propagatedViolations = LOG.trace( violation ); propagatedViolations.add( violation ); classNames.add( violation.getLeafBean().getClass().getName() ); throw new ConstraintViolationException( builder.toString(), propagatedViolations );
@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(); }
/** * Determine the response status (400 or 500) from the given BV exception. * * @param violation BV exception. * @return response status (400 or 500). */ public static Response.Status getResponseStatus(final ConstraintViolationException violation) { final Iterator<ConstraintViolation<?>> iterator = violation.getConstraintViolations().iterator(); if (iterator.hasNext()) { for (final Path.Node node : iterator.next().getPropertyPath()) { final ElementKind kind = node.getKind(); if (ElementKind.RETURN_VALUE.equals(kind)) { return Response.Status.INTERNAL_SERVER_ERROR; } } } return Response.Status.BAD_REQUEST; }
ExecutableValidator execVal = this.validator.forExecutables(); Method methodToValidate = invocation.getMethod(); Set<ConstraintViolation<Object>> result; throw new ConstraintViolationException(result); throw new ConstraintViolationException(result);
@Override public void validateResult(final Object resource, final Invocable resourceMethod, final Object result) { if (configuration.getBootstrapConfiguration().isExecutableValidationEnabled()) { final Set<ConstraintViolation<Object>> constraintViolations = new HashSet<>(); final Method handlingMethod = resourceMethod.getHandlingMethod(); final BeanDescriptor beanDescriptor = getConstraintsForClass(resource.getClass()); final MethodDescriptor methodDescriptor = beanDescriptor.getConstraintsForMethod(handlingMethod.getName(), handlingMethod.getParameterTypes()); final Method definitionMethod = resourceMethod.getDefinitionMethod(); if (methodDescriptor != null && methodDescriptor.hasConstrainedReturnValue() && validateOnExecutionHandler.validateMethod(resource.getClass(), definitionMethod, handlingMethod)) { constraintViolations.addAll(forExecutables().validateReturnValue(resource, handlingMethod, result)); if (result instanceof Response) { constraintViolations.addAll(forExecutables().validateReturnValue(resource, handlingMethod, ((Response) result).getEntity())); } } if (!constraintViolations.isEmpty()) { throw new ConstraintViolationException(constraintViolations); } } } }
/** * Returns true of this Transaction can be committed on this object * * @param t is the transaction to commit, should be the same as the * one passed during the join(Transaction t) call. * @return true if the trsaction commiting would be successful */ public synchronized boolean canCommit(Transaction t) throws TransactionFailure { if (!isDeleted) { // HK2-127: validate only if not marked for deletion Set constraintViolations = beanValidator.validate(this.getProxy(this.getProxyType())); try { handleValidationException(constraintViolations); } catch (ConstraintViolationException constraintViolationException) { throw new TransactionFailure(constraintViolationException.getMessage(), constraintViolationException); } } return currentTx==t; }
@Test public void testToOneAssocNotValidated() { Session s = openSession(); Transaction tx = s.beginTransaction(); Screen screen = new Screen(); PowerSupply ps = new PowerSupply(); ps.setPosition( "1" ); ps.setPower( new BigDecimal( 350 ) ); screen.setPowerSupply( ps ); try { s.persist( screen ); s.flush(); fail( "Associated objects should not be validated" ); } catch ( ConstraintViolationException e ) { assertEquals( 1, e.getConstraintViolations().size() ); final ConstraintViolation constraintViolation = e.getConstraintViolations().iterator().next(); assertEquals( PowerSupply.class, constraintViolation.getRootBeanClass() ); } tx.rollback(); s.close(); }
public static void validate(Object bean) { Set<ConstraintViolation<Object>> violations = getViolations(bean); if (U.notEmpty(violations)) { throw new ConstraintViolationException(violations); } }