The error can simply be reproduced by using JavaFX properties. Here are some code snippets to reproduce the error:
{{ * Model: * public class TestModel { private Property<@Size(max = 5) String> id = new SimpleStringProperty(); }} }
Calling {{validator.validateValue(TestModel.class, "id", "123456789");}} will end in the following RTE:
{{Exception _Exception in thread "main" javax.validation.ValidationException: HV000221: An error occurred while extracting values in value extractor org.hibernate.validator.internal.engine.valueextraction.ObservableValueValueExtractor. at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorHelper.extractValues(ValueExtractorHelper.java:47) at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:103) at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:569) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:527) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:496) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:461) at org.hibernate.validator.internal.engine.ValidatorImpl.validateValueInContext(ValidatorImpl.java:815) at org.hibernate.validator.internal.engine.ValidatorImpl.validateValue(ValidatorImpl.java:240) at org.hibernate.demos.validation.javafx.test.ValidateValue.main(ValidateValue.java:15) Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to javafx.beans.value.ObservableValue at org.hibernate.validator.internal.engine.valueextraction.ObservableValueValueExtractor.extractValues(ObservableValueValueExtractor.java:20) at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorHelper.extractValues(ValueExtractorHelper.java:41) }} _
It looks like the {{extractValues}} method of {{ObservableValueValueExtractor}} can not be called since this needs a {{ObservableValue}} as parameter but Hibernate validator unwraps the value already earlier and passes the internal value (in this sample the id String) to the method instead of the property. |
|