For some reason if class have some optional field and other regular field, valueContext for every field is using OptionalValueUnwrapper to unwrap and thowing cast exception since it is trying cast everyfield into option [V validatedValue = (V) valueContext.getCurrentValidatedValue()|https://github.com/hibernate/hibernate-validator/blob/e90fea5f5704b1b1f8c657a51fc2f9bde6f8380f/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintTree.java#L446]
{code:java} public class KafkaProducerFactory extends KafkaClientFactory { static final int DEFAULT_BROKER_PORT = 9092; @NotNull @NotEmpty private String name; @NotEmpty private ImmutableSet<InetSocketAddress> bootstrapServers =of(); private Acknowledgement acknowledgement = ALL; @NotNull @UnwrapValidatedValue private Optional<CompressionType> compression = Optional.of(CompressionType.NONE);
} {code}
I tired below code to validate {code} Set<ConstraintViolation<T>> invalids = Validation.byProvider(HibernateValidator.class).configure().buildValidatorFactory().getValidator().validate(this); {code} and {code} Set<ConstraintViolation<T>> invalids = Validation.buildDefaultValidatorFactory().getValidator().validate(this); {code}
Edited: Added stack trace {code:java} java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Optional at org.hibernate.validator.internal.engine.valuehandling.OptionalValueUnwrapper.handleValidatedValue(OptionalValueUnwrapper.java:20) at org.hibernate.validator.internal.engine.ValueContext.getCurrentValidatedValue(ValueContext.java:121) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:110) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:87) at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:73) at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:619) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:582) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:526) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:494) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:459) at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:409) at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:206) {code:java} |
|