Skip to content

Commit 3304647

Browse files
committed
HV-1821 Support using a non-Hibernate Validator configuration class
It was supported before and got broken. It stayed unnoticed because we didn't have a test for that so adding a proper test too.
1 parent 9c61b95 commit 3304647

File tree

2 files changed

+228
-6
lines changed

2 files changed

+228
-6
lines changed

engine/src/main/java/org/hibernate/validator/internal/engine/ValidatorFactoryConfigurationHelper.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ static Object determineConstraintValidatorPayload(ConfigurationState configurati
262262

263263
static ExpressionLanguageFeatureLevel determineConstraintExpressionLanguageFeatureLevel(AbstractConfigurationImpl<?> hibernateSpecificConfig,
264264
Map<String, String> properties) {
265-
if ( hibernateSpecificConfig.getConstraintExpressionLanguageFeatureLevel() != null ) {
265+
if ( hibernateSpecificConfig != null && hibernateSpecificConfig.getConstraintExpressionLanguageFeatureLevel() != null ) {
266266
LOG.logConstraintExpressionLanguageFeatureLevel( hibernateSpecificConfig.getConstraintExpressionLanguageFeatureLevel() );
267267
return ExpressionLanguageFeatureLevel.interpretDefaultForConstraints( hibernateSpecificConfig.getConstraintExpressionLanguageFeatureLevel() );
268268
}
@@ -284,7 +284,7 @@ static ExpressionLanguageFeatureLevel determineConstraintExpressionLanguageFeatu
284284

285285
static ExpressionLanguageFeatureLevel determineCustomViolationExpressionLanguageFeatureLevel(AbstractConfigurationImpl<?> hibernateSpecificConfig,
286286
Map<String, String> properties) {
287-
if ( hibernateSpecificConfig.getCustomViolationExpressionLanguageFeatureLevel() != null ) {
287+
if ( hibernateSpecificConfig != null && hibernateSpecificConfig.getCustomViolationExpressionLanguageFeatureLevel() != null ) {
288288
LOG.logCustomViolationExpressionLanguageFeatureLevel( hibernateSpecificConfig.getCustomViolationExpressionLanguageFeatureLevel() );
289289
return ExpressionLanguageFeatureLevel.interpretDefaultForCustomViolations( hibernateSpecificConfig.getCustomViolationExpressionLanguageFeatureLevel() );
290290
}
@@ -306,7 +306,7 @@ static ExpressionLanguageFeatureLevel determineCustomViolationExpressionLanguage
306306

307307
static GetterPropertySelectionStrategy determineGetterPropertySelectionStrategy(AbstractConfigurationImpl<?> hibernateSpecificConfig, Map<String, String> properties,
308308
ClassLoader externalClassLoader) {
309-
if ( hibernateSpecificConfig.getGetterPropertySelectionStrategy() != null ) {
309+
if ( hibernateSpecificConfig != null && hibernateSpecificConfig.getGetterPropertySelectionStrategy() != null ) {
310310
LOG.usingGetterPropertySelectionStrategy( hibernateSpecificConfig.getGetterPropertySelectionStrategy().getClass() );
311311
return hibernateSpecificConfig.getGetterPropertySelectionStrategy();
312312
}
@@ -332,7 +332,7 @@ static GetterPropertySelectionStrategy determineGetterPropertySelectionStrategy(
332332
}
333333

334334
static BeanMetaDataClassNormalizer determineBeanMetaDataClassNormalizer(AbstractConfigurationImpl<?> hibernateSpecificConfig) {
335-
if ( hibernateSpecificConfig.getBeanMetaDataClassNormalizer() != null ) {
335+
if ( hibernateSpecificConfig != null && hibernateSpecificConfig.getBeanMetaDataClassNormalizer() != null ) {
336336
return hibernateSpecificConfig.getBeanMetaDataClassNormalizer();
337337
}
338338

@@ -341,7 +341,7 @@ static BeanMetaDataClassNormalizer determineBeanMetaDataClassNormalizer(Abstract
341341

342342
static PropertyNodeNameProvider determinePropertyNodeNameProvider(AbstractConfigurationImpl<?> hibernateSpecificConfig, Map<String, String> properties,
343343
ClassLoader externalClassLoader) {
344-
if ( hibernateSpecificConfig.getPropertyNodeNameProvider() != null ) {
344+
if ( hibernateSpecificConfig != null && hibernateSpecificConfig.getPropertyNodeNameProvider() != null ) {
345345
LOG.usingPropertyNodeNameProvider( hibernateSpecificConfig.getPropertyNodeNameProvider().getClass() );
346346

347347
return hibernateSpecificConfig.getPropertyNodeNameProvider();
@@ -367,7 +367,7 @@ static PropertyNodeNameProvider determinePropertyNodeNameProvider(AbstractConfig
367367

368368
static LocaleResolver determineLocaleResolver(AbstractConfigurationImpl<?> hibernateSpecificConfig, Map<String, String> properties,
369369
ClassLoader externalClassLoader) {
370-
if ( hibernateSpecificConfig.getLocaleResolver() != null ) {
370+
if ( hibernateSpecificConfig != null && hibernateSpecificConfig.getLocaleResolver() != null ) {
371371
LOG.usingLocaleResolver( hibernateSpecificConfig.getLocaleResolver().getClass() );
372372

373373
return hibernateSpecificConfig.getLocaleResolver();
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
/*
2+
* Hibernate Validator, declare and validate application constraints
3+
*
4+
* License: Apache License, Version 2.0
5+
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
6+
*/
7+
package org.hibernate.validator.test.cfg;
8+
9+
import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertThat;
10+
import static org.hibernate.validator.testutil.ConstraintViolationAssert.violationOf;
11+
12+
import java.io.InputStream;
13+
import java.util.Collections;
14+
import java.util.Map;
15+
import java.util.Set;
16+
17+
import javax.validation.BootstrapConfiguration;
18+
import javax.validation.ClockProvider;
19+
import javax.validation.Configuration;
20+
import javax.validation.ConstraintValidatorFactory;
21+
import javax.validation.MessageInterpolator;
22+
import javax.validation.ParameterNameProvider;
23+
import javax.validation.TraversableResolver;
24+
import javax.validation.Validation;
25+
import javax.validation.Validator;
26+
import javax.validation.ValidatorFactory;
27+
import javax.validation.constraints.NotNull;
28+
import javax.validation.spi.BootstrapState;
29+
import javax.validation.spi.ConfigurationState;
30+
import javax.validation.spi.ValidationProvider;
31+
import javax.validation.valueextraction.ValueExtractor;
32+
33+
import org.hibernate.validator.internal.engine.DefaultClockProvider;
34+
import org.hibernate.validator.internal.engine.DefaultParameterNameProvider;
35+
import org.hibernate.validator.internal.engine.ValidatorFactoryImpl;
36+
import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl;
37+
import org.hibernate.validator.internal.engine.resolver.TraversableResolvers;
38+
import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
39+
import org.hibernate.validator.testutil.TestForIssue;
40+
import org.testng.annotations.Test;
41+
42+
/**
43+
* @author Guillaume Smet
44+
*/
45+
public class NonHibernateValidatorConfigTest {
46+
47+
@Test
48+
@TestForIssue(jiraKey = "HV-1821")
49+
public void testNonHibernateValidatorConfig() {
50+
ValidatorFactory validatorFactory = Validation.byProvider( NonHibernateValidatorProvider.class )
51+
.configure()
52+
.buildValidatorFactory();
53+
Validator validator = validatorFactory.getValidator();
54+
assertThat( validator.validate( new Bean() ) ).containsOnlyViolations( violationOf( NotNull.class ) );
55+
}
56+
57+
public static final class NonHibernateValidatorProvider implements ValidationProvider<NonHibernateValidatorConfiguration> {
58+
59+
@Override
60+
public NonHibernateValidatorConfiguration createSpecializedConfiguration(BootstrapState state) {
61+
return new NonHibernateValidatorConfiguration();
62+
}
63+
64+
@Override
65+
public Configuration<?> createGenericConfiguration(BootstrapState state) {
66+
return new NonHibernateValidatorConfiguration();
67+
}
68+
69+
@Override
70+
public ValidatorFactory buildValidatorFactory(ConfigurationState configurationState) {
71+
return new ValidatorFactoryImpl( configurationState );
72+
}
73+
}
74+
75+
public static final class NonHibernateValidatorConfiguration implements Configuration<NonHibernateValidatorConfiguration>, ConfigurationState {
76+
77+
private final MessageInterpolator defaultMessageInterpolator;
78+
private final TraversableResolver defaultTraversableResolver;
79+
private final ConstraintValidatorFactory defaultConstraintValidatorFactory;
80+
private final ParameterNameProvider defaultParameterNameProvider;
81+
private final ClockProvider defaultClockProvider;
82+
83+
public NonHibernateValidatorConfiguration() {
84+
this.defaultMessageInterpolator = new ParameterMessageInterpolator();
85+
this.defaultTraversableResolver = TraversableResolvers.getDefault();
86+
this.defaultConstraintValidatorFactory = new ConstraintValidatorFactoryImpl();
87+
this.defaultParameterNameProvider = new DefaultParameterNameProvider();
88+
this.defaultClockProvider = DefaultClockProvider.INSTANCE;
89+
}
90+
91+
@Override
92+
public NonHibernateValidatorConfiguration ignoreXmlConfiguration() {
93+
return this;
94+
}
95+
96+
@Override
97+
public NonHibernateValidatorConfiguration messageInterpolator(MessageInterpolator interpolator) {
98+
return this;
99+
}
100+
101+
@Override
102+
public NonHibernateValidatorConfiguration traversableResolver(TraversableResolver resolver) {
103+
return this;
104+
}
105+
106+
@Override
107+
public NonHibernateValidatorConfiguration constraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) {
108+
return this;
109+
}
110+
111+
@Override
112+
public NonHibernateValidatorConfiguration parameterNameProvider(ParameterNameProvider parameterNameProvider) {
113+
return this;
114+
}
115+
116+
@Override
117+
public NonHibernateValidatorConfiguration clockProvider(ClockProvider clockProvider) {
118+
return this;
119+
}
120+
121+
@Override
122+
public NonHibernateValidatorConfiguration addValueExtractor(ValueExtractor<?> extractor) {
123+
return this;
124+
}
125+
126+
@Override
127+
public NonHibernateValidatorConfiguration addMapping(InputStream stream) {
128+
return this;
129+
}
130+
131+
@Override
132+
public NonHibernateValidatorConfiguration addProperty(String name, String value) {
133+
return this;
134+
}
135+
136+
@Override
137+
public MessageInterpolator getDefaultMessageInterpolator() {
138+
return defaultMessageInterpolator;
139+
}
140+
141+
@Override
142+
public TraversableResolver getDefaultTraversableResolver() {
143+
return defaultTraversableResolver;
144+
}
145+
146+
@Override
147+
public ConstraintValidatorFactory getDefaultConstraintValidatorFactory() {
148+
return defaultConstraintValidatorFactory;
149+
}
150+
151+
@Override
152+
public ParameterNameProvider getDefaultParameterNameProvider() {
153+
return defaultParameterNameProvider;
154+
}
155+
156+
@Override
157+
public ClockProvider getDefaultClockProvider() {
158+
return defaultClockProvider;
159+
}
160+
161+
@Override
162+
public BootstrapConfiguration getBootstrapConfiguration() {
163+
return null;
164+
}
165+
166+
@Override
167+
public ValidatorFactory buildValidatorFactory() {
168+
return new NonHibernateValidatorProvider().buildValidatorFactory( this );
169+
}
170+
171+
@Override
172+
public boolean isIgnoreXmlConfiguration() {
173+
return true;
174+
}
175+
176+
@Override
177+
public MessageInterpolator getMessageInterpolator() {
178+
return defaultMessageInterpolator;
179+
}
180+
181+
@Override
182+
public Set<InputStream> getMappingStreams() {
183+
return Collections.emptySet();
184+
}
185+
186+
@Override
187+
public Set<ValueExtractor<?>> getValueExtractors() {
188+
return Collections.emptySet();
189+
}
190+
191+
@Override
192+
public ConstraintValidatorFactory getConstraintValidatorFactory() {
193+
return defaultConstraintValidatorFactory;
194+
}
195+
196+
@Override
197+
public TraversableResolver getTraversableResolver() {
198+
return defaultTraversableResolver;
199+
}
200+
201+
@Override
202+
public ParameterNameProvider getParameterNameProvider() {
203+
return defaultParameterNameProvider;
204+
}
205+
206+
@Override
207+
public ClockProvider getClockProvider() {
208+
return defaultClockProvider;
209+
}
210+
211+
@Override
212+
public Map<String, String> getProperties() {
213+
return Collections.emptyMap();
214+
}
215+
}
216+
217+
public static final class Bean {
218+
219+
@NotNull
220+
public String property;
221+
}
222+
}

0 commit comments

Comments
 (0)