public class LocalValidatorFactoryBean extends SpringValidatorAdapter implements ApplicationContextAware, InitializingBean, DisposableBean
javax.validation
(JSR-303) setup in a Spring
application context: It bootstraps a javax.validation.ValidationFactory
and
exposes it through the Spring Validator
interface
as well as through the JSR-303 javax.validation.Validator
interface and the
javax.validation.ValidatorFactory
interface itself.
When talking to an instance of this bean through the Spring or JSR-303 Validator interfaces,
you'll be talking to the default Validator of the underlying ValidatorFactory. This is very
convenient in that you don't have to perform yet another call on the factory, assuming that
you will almost always use the default Validator anyway. This can also be injected directly
into any target dependency of type Validator
!
As of Spring 5.0, this class requires Bean Validation 1.1, with special support
for Hibernate Validator 5.x (see setValidationMessageSource(org.springframework.context.MessageSource)
).
This class is also being used by Spring's MVC configuration namespace, in case of the
javax.validation
API being present but no explicit Validator having been configured.
javax.validation.ValidatorFactory
,
javax.validation.Validator
,
javax.validation.Validation#buildDefaultValidatorFactory()
,
javax.validation.ValidatorFactory#getValidator()
Modifier and Type | Class and Description |
---|---|
private static class |
LocalValidatorFactoryBean.HibernateValidatorDelegate
Inner class to avoid a hard-coded Hibernate Validator dependency.
|
Modifier and Type | Field and Description |
---|---|
private ApplicationContext |
applicationContext |
private ConstraintValidatorFactory |
constraintValidatorFactory |
private Resource[] |
mappingLocations |
private MessageInterpolator |
messageInterpolator |
private ParameterNameDiscoverer |
parameterNameDiscoverer |
private java.lang.Class |
providerClass |
private TraversableResolver |
traversableResolver |
private java.util.Map<java.lang.String,java.lang.String> |
validationPropertyMap |
private ValidationProviderResolver |
validationProviderResolver |
private ValidatorFactory |
validatorFactory |
Constructor and Description |
---|
LocalValidatorFactoryBean() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Invoked by a BeanFactory after it has set all bean properties supplied
(and satisfied BeanFactoryAware and ApplicationContextAware).
|
void |
close() |
private void |
configureParameterNameProviderIfPossible(<any> configuration) |
void |
destroy()
Invoked by a BeanFactory on destruction of a singleton.
|
ConstraintValidatorFactory |
getConstraintValidatorFactory() |
MessageInterpolator |
getMessageInterpolator() |
ParameterNameProvider |
getParameterNameProvider() |
TraversableResolver |
getTraversableResolver() |
java.util.Map<java.lang.String,java.lang.String> |
getValidationPropertyMap()
Allow Map access to the bean validation properties to be passed to the validation provider,
with the option to add or override specific entries.
|
Validator |
getValidator() |
protected void |
postProcessConfiguration(<any> configuration)
Post-process the given Bean Validation configuration,
adding to or overriding any of its settings.
|
void |
setApplicationContext(ApplicationContext applicationContext)
Set the ApplicationContext that this object runs in.
|
void |
setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory)
Specify a custom ConstraintValidatorFactory to use for this ValidatorFactory.
|
void |
setMappingLocations(Resource... mappingLocations)
Specify resource locations to load XML constraint mapping files from, if any.
|
void |
setMessageInterpolator(MessageInterpolator messageInterpolator)
Specify a custom MessageInterpolator to use for this ValidatorFactory
and its exposed default Validator.
|
void |
setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Set the ParameterNameDiscoverer to use for resolving method and constructor
parameter names if needed for message interpolation.
|
void |
setProviderClass(java.lang.Class providerClass)
Specify the desired provider class, if any.
|
void |
setTraversableResolver(TraversableResolver traversableResolver)
Specify a custom TraversableResolver to use for this ValidatorFactory
and its exposed default Validator.
|
void |
setValidationMessageSource(MessageSource messageSource)
Specify a custom Spring MessageSource for resolving validation messages,
instead of relying on JSR-303's default "ValidationMessages.properties" bundle
in the classpath.
|
void |
setValidationProperties(java.util.Properties jpaProperties)
Specify bean validation properties to be passed to the validation provider.
|
void |
setValidationPropertyMap(java.util.Map<java.lang.String,java.lang.String> validationProperties)
Specify bean validation properties to be passed to the validation provider as a Map.
|
void |
setValidationProviderResolver(ValidationProviderResolver validationProviderResolver)
Specify a JSR-303
ValidationProviderResolver for bootstrapping the
provider of choice, as an alternative to META-INF driven resolution. |
ValidatorContext |
usingContext() |
determineErrorCode, determineField, forExecutables, getArgumentsForConstraint, getConstraintsForClass, getRejectedValue, getResolvableField, processConstraintViolations, setTargetValidator, supports, unwrap, validate, validate, validate, validateProperty, validateValue
private java.lang.Class providerClass
private ValidationProviderResolver validationProviderResolver
private MessageInterpolator messageInterpolator
private TraversableResolver traversableResolver
private ConstraintValidatorFactory constraintValidatorFactory
private ParameterNameDiscoverer parameterNameDiscoverer
private Resource[] mappingLocations
private final java.util.Map<java.lang.String,java.lang.String> validationPropertyMap
private ApplicationContext applicationContext
private ValidatorFactory validatorFactory
public void setProviderClass(java.lang.Class providerClass)
If not specified, JSR-303's default search mechanism will be used.
javax.validation.Validation#byProvider(Class)
,
javax.validation.Validation#byDefaultProvider()
public void setValidationProviderResolver(ValidationProviderResolver validationProviderResolver)
ValidationProviderResolver
for bootstrapping the
provider of choice, as an alternative to META-INF
driven resolution.public void setMessageInterpolator(MessageInterpolator messageInterpolator)
public void setValidationMessageSource(MessageSource messageSource)
NOTE: This feature requires Hibernate Validator 4.3 or higher on the classpath.
You may nevertheless use a different validation provider but Hibernate Validator's
ResourceBundleMessageInterpolator
class must be accessible during configuration.
Specify either this property or "messageInterpolator"
,
not both. If you would like to build a custom MessageInterpolator, consider deriving from
Hibernate Validator's ResourceBundleMessageInterpolator
and passing in a
Spring-based ResourceBundleLocator
when constructing your interpolator.
ResourceBundleMessageInterpolator
public void setTraversableResolver(TraversableResolver traversableResolver)
public void setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory)
Default is a SpringConstraintValidatorFactory
, delegating to the
containing ApplicationContext for creating autowired ConstraintValidator instances.
public void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)
Default is a DefaultParameterNameDiscoverer
.
public void setMappingLocations(Resource... mappingLocations)
public void setValidationProperties(java.util.Properties jpaProperties)
Can be populated with a String "value" (parsed via PropertiesEditor) or a "props" element in XML bean definitions.
javax.validation.Configuration#addProperty(String, String)
public void setValidationPropertyMap(java.util.Map<java.lang.String,java.lang.String> validationProperties)
Can be populated with a "map" or "props" element in XML bean definitions.
javax.validation.Configuration#addProperty(String, String)
public java.util.Map<java.lang.String,java.lang.String> getValidationPropertyMap()
Useful for specifying entries directly, for example via "validationPropertyMap[myKey]".
public void setApplicationContext(ApplicationContext applicationContext)
ApplicationContextAware
Invoked after population of normal bean properties but before an init callback such
as InitializingBean.afterPropertiesSet()
or a custom init-method. Invoked after ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)
,
ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)
and
MessageSourceAware
, if applicable.
setApplicationContext
in interface ApplicationContextAware
applicationContext
- the ApplicationContext object to be used by this objectBeanInitializationException
public void afterPropertiesSet()
InitializingBean
This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.
afterPropertiesSet
in interface InitializingBean
private void configureParameterNameProviderIfPossible(<any> configuration)
protected void postProcessConfiguration(<any> configuration)
Invoked right before building the ValidatorFactory
.
configuration
- the Configuration object, pre-populated with
settings driven by LocalValidatorFactoryBean's propertiespublic Validator getValidator()
public ValidatorContext usingContext()
public MessageInterpolator getMessageInterpolator()
public TraversableResolver getTraversableResolver()
public ConstraintValidatorFactory getConstraintValidatorFactory()
public ParameterNameProvider getParameterNameProvider()
public void close()
public void destroy()
DisposableBean
destroy
in interface DisposableBean