34
34
import org .hibernate .validator .HibernateValidatorContext ;
35
35
import org .hibernate .validator .HibernateValidatorFactory ;
36
36
import org .hibernate .validator .cfg .ConstraintMapping ;
37
+ import org .hibernate .validator .constraintvalidation .HibernateConstraintValidatorInitializationContext ;
37
38
import org .hibernate .validator .internal .cfg .context .DefaultConstraintMapping ;
38
39
import org .hibernate .validator .internal .engine .constraintdefinition .ConstraintDefinitionContribution ;
39
40
import org .hibernate .validator .internal .engine .constraintvalidation .ConstraintValidatorManager ;
41
+ import org .hibernate .validator .internal .engine .constraintvalidation .HibernateConstraintValidatorInitializationContextImpl ;
40
42
import org .hibernate .validator .internal .engine .groups .ValidationOrderGenerator ;
41
43
import org .hibernate .validator .internal .engine .scripting .DefaultScriptEvaluatorFactory ;
42
44
import org .hibernate .validator .internal .engine .valueextraction .ValueExtractorManager ;
@@ -177,8 +179,6 @@ public ValidatorFactoryImpl(ConfigurationState configurationState) {
177
179
getAllowParallelMethodsDefineParameterConstraints ( hibernateSpecificConfig , properties )
178
180
).build ();
179
181
180
- this .constraintValidatorManager = new ConstraintValidatorManager ( configurationState .getConstraintValidatorFactory () );
181
-
182
182
this .validatorFactoryScopedContext = new ValidatorFactoryScopedContext (
183
183
configurationState .getMessageInterpolator (),
184
184
configurationState .getTraversableResolver (),
@@ -191,6 +191,11 @@ public ValidatorFactoryImpl(ConfigurationState configurationState) {
191
191
getConstraintValidatorPayload ( hibernateSpecificConfig )
192
192
);
193
193
194
+ this .constraintValidatorManager = new ConstraintValidatorManager (
195
+ configurationState .getConstraintValidatorFactory (),
196
+ this .validatorFactoryScopedContext .getConstraintValidatorInitializationContext ()
197
+ );
198
+
194
199
this .validationOrderGenerator = new ValidationOrderGenerator ();
195
200
196
201
if ( LOG .isDebugEnabled () ) {
@@ -702,8 +707,16 @@ static class ValidatorFactoryScopedContext {
702
707
*/
703
708
private final boolean traversableResolverResultCacheEnabled ;
704
709
710
+ /**
711
+ * The constraint validator payload.
712
+ */
705
713
private final Object constraintValidatorPayload ;
706
714
715
+ /**
716
+ * The constraint validator initialization context.
717
+ */
718
+ private final HibernateConstraintValidatorInitializationContextImpl constraintValidatorInitializationContext ;
719
+
707
720
private ValidatorFactoryScopedContext (MessageInterpolator messageInterpolator ,
708
721
TraversableResolver traversableResolver ,
709
722
ExecutableParameterNameProvider parameterNameProvider ,
@@ -713,6 +726,22 @@ private ValidatorFactoryScopedContext(MessageInterpolator messageInterpolator,
713
726
boolean failFast ,
714
727
boolean traversableResolverResultCacheEnabled ,
715
728
Object constraintValidatorPayload ) {
729
+ this ( messageInterpolator , traversableResolver , parameterNameProvider , clockProvider , temporalValidationTolerance , scriptEvaluatorFactory , failFast ,
730
+ traversableResolverResultCacheEnabled , constraintValidatorPayload ,
731
+ new HibernateConstraintValidatorInitializationContextImpl ( scriptEvaluatorFactory , clockProvider ,
732
+ temporalValidationTolerance , constraintValidatorPayload ) );
733
+ }
734
+
735
+ private ValidatorFactoryScopedContext (MessageInterpolator messageInterpolator ,
736
+ TraversableResolver traversableResolver ,
737
+ ExecutableParameterNameProvider parameterNameProvider ,
738
+ ClockProvider clockProvider ,
739
+ Duration temporalValidationTolerance ,
740
+ ScriptEvaluatorFactory scriptEvaluatorFactory ,
741
+ boolean failFast ,
742
+ boolean traversableResolverResultCacheEnabled ,
743
+ Object constraintValidatorPayload ,
744
+ HibernateConstraintValidatorInitializationContextImpl constraintValidatorInitializationContext ) {
716
745
this .messageInterpolator = messageInterpolator ;
717
746
this .traversableResolver = traversableResolver ;
718
747
this .parameterNameProvider = parameterNameProvider ;
@@ -722,6 +751,7 @@ private ValidatorFactoryScopedContext(MessageInterpolator messageInterpolator,
722
751
this .failFast = failFast ;
723
752
this .traversableResolverResultCacheEnabled = traversableResolverResultCacheEnabled ;
724
753
this .constraintValidatorPayload = constraintValidatorPayload ;
754
+ this .constraintValidatorInitializationContext = constraintValidatorInitializationContext ;
725
755
}
726
756
727
757
public MessageInterpolator getMessageInterpolator () {
@@ -760,6 +790,10 @@ public Object getConstraintValidatorPayload() {
760
790
return this .constraintValidatorPayload ;
761
791
}
762
792
793
+ public HibernateConstraintValidatorInitializationContext getConstraintValidatorInitializationContext () {
794
+ return this .constraintValidatorInitializationContext ;
795
+ }
796
+
763
797
static class Builder {
764
798
private final ValidatorFactoryScopedContext defaultContext ;
765
799
@@ -772,6 +806,7 @@ static class Builder {
772
806
private boolean failFast ;
773
807
private boolean traversableResolverResultCacheEnabled ;
774
808
private Object constraintValidatorPayload ;
809
+ private HibernateConstraintValidatorInitializationContextImpl constraintValidatorInitializationContext ;
775
810
776
811
Builder (ValidatorFactoryScopedContext defaultContext ) {
777
812
Contracts .assertNotNull ( defaultContext , "Default context cannot be null." );
@@ -786,6 +821,7 @@ static class Builder {
786
821
this .failFast = defaultContext .failFast ;
787
822
this .traversableResolverResultCacheEnabled = defaultContext .traversableResolverResultCacheEnabled ;
788
823
this .constraintValidatorPayload = defaultContext .constraintValidatorPayload ;
824
+ this .constraintValidatorInitializationContext = defaultContext .constraintValidatorInitializationContext ;
789
825
}
790
826
791
827
public Builder setMessageInterpolator (MessageInterpolator messageInterpolator ) {
@@ -874,7 +910,14 @@ public ValidatorFactoryScopedContext build() {
874
910
scriptEvaluatorFactory ,
875
911
failFast ,
876
912
traversableResolverResultCacheEnabled ,
877
- constraintValidatorPayload
913
+ constraintValidatorPayload ,
914
+ HibernateConstraintValidatorInitializationContextImpl .of (
915
+ constraintValidatorInitializationContext ,
916
+ scriptEvaluatorFactory ,
917
+ clockProvider ,
918
+ temporalValidationTolerance ,
919
+ constraintValidatorPayload
920
+ )
878
921
);
879
922
}
880
923
}
0 commit comments