@Override public void validateResourceAndInputParams(Object resource, final Invocable invocable, Object[] objects) throws ConstraintViolationException { final Class<?>[] groups = getGroup(invocable); final Set<ConstraintViolation<Object>> violations = new HashSet<>(); final BeanDescriptor beanDescriptor = getConstraintsForClass(resource.getClass()); if (beanDescriptor.isBeanConstrained()) { violations.addAll(validate(resource, groups)); } violations.addAll(forExecutables().validateParameters(resource, invocable.getHandlingMethod(), objects, groups)); if (!violations.isEmpty()) { throw new JerseyViolationException(violations, invocable); } }
@Override public void onValidate(final ValidationInterceptorContext ctx) { final Object resource = ctx.getResource(); final Invocable resourceMethod = ctx.getInvocable(); final Object[] args = ctx.getArgs(); final Set<ConstraintViolation<Object>> constraintViolations = new HashSet<>(); final BeanDescriptor beanDescriptor = getConstraintsForClass(resource.getClass()); // Resource validation. if (beanDescriptor.isBeanConstrained()) { constraintViolations.addAll(validate(resource)); } if (resourceMethod != null && configuration.getBootstrapConfiguration().isExecutableValidationEnabled()) { final Method handlingMethod = resourceMethod.getHandlingMethod(); // Resource method validation - input parameters. final MethodDescriptor methodDescriptor = beanDescriptor.getConstraintsForMethod(handlingMethod.getName(), handlingMethod.getParameterTypes()); if (methodDescriptor != null && methodDescriptor.hasConstrainedParameters() && validateOnExecutionHandler.validateMethod(resource.getClass(), resourceMethod.getDefinitionMethod(), resourceMethod.getHandlingMethod())) { constraintViolations.addAll(forExecutables().validateParameters(resource, handlingMethod, args)); } } if (!constraintViolations.isEmpty()) { throw new ConstraintViolationException(constraintViolations); } }
@Override protected boolean hasWork() { if (!reachable) { return false; } if (descriptor instanceof BeanDescriptor) { return ((BeanDescriptor) descriptor).isBeanConstrained(); } return DescriptorManager.isConstrained((PropertyDescriptor) descriptor); }
@Override protected boolean hasWork() { if (!reachable) { return false; } if (descriptor instanceof BeanDescriptor) { return ((BeanDescriptor) descriptor).isBeanConstrained(); } return DescriptorManager.isConstrained((PropertyDescriptor) descriptor); }
boolean isClassConstrained(Class<?> clazz) { return serverSideValidator.getConstraintsForClass(clazz).isBeanConstrained(); }
@Override public boolean hasConstraints() { if ( beanDescriptor.isBeanConstrained() || !beanDescriptor.getConstrainedConstructors().isEmpty() || !beanDescriptor.getConstrainedMethods( MethodType.NON_GETTER, MethodType.GETTER ).isEmpty() ) { return true; } return false; }
@Test @SpecAssertion(section = "3.4.4", id = "a") public void testImplicitGrouping() { Validator validator = TestUtil.getValidatorUnderTest(); BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Order.class ); assertTrue( beanDescriptor.isBeanConstrained() ); // validating the Default Group should validate all 5 constraints Order order = new Order(); Set<ConstraintViolation<Order>> violations = validator.validate( order ); assertTrue( violations.size() == 5, "All 5 NotNull constraints should fail." ); // use implicit group Auditable - only the constraints defined on Auditable should be validated violations = validator.validate( order, Auditable.class ); assertTrue( violations.size() == 4, "All 4 NotNull constraints on Auditable should fail." ); }
@Test @SpecAssertion(section = Sections.CONSTRAINTDECLARATIONVALIDATIONPROCESS_GROUPSEQUENCE, id = "c") public void testConstraintCanBelongToMoreThanOneGroup() { Validator validator = TestUtil.getValidatorUnderTest(); BeanDescriptor beanDescriptor = validator.getConstraintsForClass( User.class ); assertTrue( beanDescriptor.isBeanConstrained() ); PropertyDescriptor propDesc = beanDescriptor.getConstraintsForProperty( "defaultCreditCard" ); assertTrue( propDesc.getConstraintDescriptors().size() == 1 ); ConstraintDescriptor<?> descriptor = propDesc.getConstraintDescriptors().iterator().next(); assertTrue( descriptor.getGroups().size() == 2 ); }
@Test @SpecAssertion(section = "3.4", id = "c") public void testConstraintCanBelongToMoreThanOneGroup() { Validator validator = TestUtil.getValidatorUnderTest(); BeanDescriptor beanDescriptor = validator.getConstraintsForClass( User.class ); assertTrue( beanDescriptor.isBeanConstrained() ); PropertyDescriptor propDesc = beanDescriptor.getConstraintsForProperty( "defaultCreditCard" ); assertTrue( propDesc.getConstraintDescriptors().size() == 1 ); ConstraintDescriptor descriptor = propDesc.getConstraintDescriptors().iterator().next(); assertTrue( descriptor.getGroups().size() == 2 ); }
@Test @SpecAssertion(section = Sections.XML_MAPPING_XSD, id = "a") public void testValidBeanValidation11Mapping() { Validator validator = TestUtil.getConfigurationUnderTest() .addMapping( Version11InMappingXmlTest.class.getResourceAsStream( MAPPING_FILE ) ) .buildValidatorFactory() .getValidator(); assertFalse( validator.getConstraintsForClass( TestEntity.class ).isBeanConstrained() ); } }
/** * {@inheritDoc} */ @Override public ModelConstraint getConstraintsForClass(Class<?> clazz, Locale locale) { ModelConstraint modelConstraint = new ModelConstraint(clazz.getCanonicalName()); BeanDescriptor bd = VALIDATOR.getConstraintsForClass(clazz); if (bd.isBeanConstrained() && !Modifier.isAbstract(clazz.getModifiers())) { modelConstraint.setConstraints(this.getConstraints(bd, locale)); } return modelConstraint; }
@Test @SpecAssertion(section = Sections.XML_MAPPING_XSD, id = "a") public void testValidBeanValidation10Mapping() { Validator validator = TestUtil.getConfigurationUnderTest() .addMapping( Version10InMappingXmlTest.class.getResourceAsStream( MAPPING_FILE ) ) .buildValidatorFactory() .getValidator(); assertFalse( validator.getConstraintsForClass( TestEntity.class ).isBeanConstrained() ); } }
@Test @SpecAssertion(section = Sections.XML_MAPPING_XSD, id = "a") public void testValidBeanValidation20Mapping() { Validator validator = TestUtil.getConfigurationUnderTest() .addMapping( Version20InMappingXmlTest.class.getResourceAsStream( MAPPING_FILE ) ) .buildValidatorFactory() .getValidator(); assertFalse( validator.getConstraintsForClass( TestEntity.class ).isBeanConstrained() ); } }
@Test @SpecAssertion(section = Sections.CONSTRAINTMETADATA_VALIDATOR, id = "a") @SpecAssertion(section = Sections.CONSTRAINTMETADATA_BEANDESCRIPTOR, id = "a") public void testUnconstrainedClass() { BeanDescriptor beanDescriptor = getValidator().getConstraintsForClass( UnconstrainedEntity.class ); assertFalse( beanDescriptor.hasConstraints(), "There should be no direct constraints on the specified bean." ); assertFalse( beanDescriptor.isBeanConstrained(), "Bean should be unconstrained." ); }
@Test @SpecAssertions({ @SpecAssertion(section = "5.1", id = "b"), @SpecAssertion(section = "5.3", id = "a") }) public void testIsBeanConstrainedDueToConstraintProperty() { Validator validator = TestUtil.getValidatorUnderTest(); // constraint on bean property BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Order.class ); assertFalse( beanDescriptor.hasConstraints(), "There should be no direct constraints on the specified bean." ); assertTrue( beanDescriptor.isBeanConstrained(), "Bean should be constrained due to @NotNull" ); }
@Test @SpecAssertions({ @SpecAssertion(section = "5.1", id = "b"), @SpecAssertion(section = "5.3", id = "a") }) public void testUnconstrainedClass() { Validator validator = TestUtil.getValidatorUnderTest(); BeanDescriptor beanDescriptor = validator.getConstraintsForClass( UnconstraintEntity.class ); assertFalse( beanDescriptor.hasConstraints(), "There should be no direct constraints on the specified bean." ); assertFalse( beanDescriptor.isBeanConstrained(), "Bean should be unconstrained." ); }
@Test @SpecAssertions({ @SpecAssertion(section = "5.1", id = "b"), @SpecAssertion(section = "5.3", id = "a") }) public void testIsBeanConstrainedDueToValidAnnotation() { Validator validator = TestUtil.getValidatorUnderTest(); BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Customer.class ); // constraint via @Valid assertFalse( beanDescriptor.hasConstraints(), "There should be no direct constraints on the specified bean." ); assertTrue( beanDescriptor.isBeanConstrained(), "Bean should be constrained due to @valid " ); }
@Test @SpecAssertions({ @SpecAssertion(section = "5.1", id = "b"), @SpecAssertion(section = "5.3", id = "a") }) public void testIsBeanConstrainedDueToConstraintOnEntity() { Validator validator = TestUtil.getValidatorUnderTest(); // constraint hosted on bean itself BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Account.class ); assertTrue( beanDescriptor.hasConstraints(), "There should be direct constraints on the specified bean." ); assertTrue( beanDescriptor.isBeanConstrained(), "Bean should be constrained due to @valid" ); }
@Test @SpecAssertions({ @SpecAssertion(section = "5.1", id = "b"), @SpecAssertion(section = "5.3", id = "a") }) public void testIsBeanConstrainedDueToConstraintOnInterface() { Validator validator = TestUtil.getValidatorUnderTest(); // constraint on implemented interface BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Man.class ); assertFalse( beanDescriptor.hasConstraints(), "There should be no direct constraints on the specified bean." ); assertTrue( beanDescriptor.isBeanConstrained(), "Bean should be constrained due to constraints on Person." ); }
protected void initBeanValidator(Field<?> component, MetaPropertyPath metaPropertyPath) { MetaProperty metaProperty = metaPropertyPath.getMetaProperty(); MetaClass propertyEnclosingMetaClass = metadataTools.getPropertyEnclosingMetaClass(metaPropertyPath); Class enclosingJavaClass = propertyEnclosingMetaClass.getJavaClass(); if (enclosingJavaClass != KeyValueEntity.class && !DynamicAttributesUtils.isDynamicAttribute(metaProperty)) { javax.validation.Validator validator = beanValidation.getValidator(); BeanDescriptor beanDescriptor = validator.getConstraintsForClass(enclosingJavaClass); if (beanDescriptor.isBeanConstrained()) { component.addValidator(beanLocator.getPrototype(BeanPropertyValidator.NAME, enclosingJavaClass, metaProperty.getName())); } } }