Search in sources :

Example 1 with BeanContainerListener

use of io.quarkus.arc.runtime.BeanContainerListener in project quarkus by quarkusio.

the class HibernateValidatorRecorder method initializeValidatorFactory.

public BeanContainerListener initializeValidatorFactory(Set<Class<?>> classesToBeValidated, Set<String> detectedBuiltinConstraints, boolean hasXmlConfiguration, boolean jpaInClasspath, ShutdownContext shutdownContext, LocalesBuildTimeConfig localesBuildTimeConfig, HibernateValidatorBuildTimeConfig hibernateValidatorBuildTimeConfig) {
    BeanContainerListener beanContainerListener = new BeanContainerListener() {

        @Override
        public void created(BeanContainer container) {
            PredefinedScopeHibernateValidatorConfiguration configuration = Validation.byProvider(PredefinedScopeHibernateValidator.class).configure();
            if (!hasXmlConfiguration) {
                configuration.ignoreXmlConfiguration();
            }
            LocaleResolver localeResolver = null;
            InstanceHandle<LocaleResolver> configuredLocaleResolver = Arc.container().instance("locale-resolver-wrapper");
            if (configuredLocaleResolver.isAvailable()) {
                localeResolver = configuredLocaleResolver.get();
                configuration.localeResolver(localeResolver);
            }
            configuration.builtinConstraints(detectedBuiltinConstraints).initializeBeanMetaData(classesToBeValidated).locales(localesBuildTimeConfig.locales).defaultLocale(localesBuildTimeConfig.defaultLocale).beanMetaDataClassNormalizer(new ArcProxyBeanMetaDataClassNormalizer());
            if (hibernateValidatorBuildTimeConfig.expressionLanguage.constraintExpressionFeatureLevel.isPresent()) {
                configuration.constraintExpressionLanguageFeatureLevel(hibernateValidatorBuildTimeConfig.expressionLanguage.constraintExpressionFeatureLevel.get());
            }
            InstanceHandle<ConstraintValidatorFactory> configuredConstraintValidatorFactory = Arc.container().instance(ConstraintValidatorFactory.class);
            if (configuredConstraintValidatorFactory.isAvailable()) {
                configuration.constraintValidatorFactory(configuredConstraintValidatorFactory.get());
            } else {
                configuration.constraintValidatorFactory(new ArcConstraintValidatorFactoryImpl());
            }
            InstanceHandle<MessageInterpolator> configuredMessageInterpolator = Arc.container().instance(MessageInterpolator.class);
            if (configuredMessageInterpolator.isAvailable()) {
                configuration.messageInterpolator(configuredMessageInterpolator.get());
            }
            InstanceHandle<TraversableResolver> configuredTraversableResolver = Arc.container().instance(TraversableResolver.class);
            if (configuredTraversableResolver.isAvailable()) {
                configuration.traversableResolver(configuredTraversableResolver.get());
            } else {
                // we still define the one we want to use so that we do not rely on runtime automatic detection
                if (jpaInClasspath) {
                    configuration.traversableResolver(new JPATraversableResolver());
                } else {
                    configuration.traversableResolver(new TraverseAllTraversableResolver());
                }
            }
            InstanceHandle<ParameterNameProvider> configuredParameterNameProvider = Arc.container().instance(ParameterNameProvider.class);
            if (configuredParameterNameProvider.isAvailable()) {
                configuration.parameterNameProvider(configuredParameterNameProvider.get());
            }
            InstanceHandle<ClockProvider> configuredClockProvider = Arc.container().instance(ClockProvider.class);
            if (configuredClockProvider.isAvailable()) {
                configuration.clockProvider(configuredClockProvider.get());
            }
            // Hibernate Validator-specific configuration
            configuration.failFast(hibernateValidatorBuildTimeConfig.failFast);
            configuration.allowOverridingMethodAlterParameterConstraint(hibernateValidatorBuildTimeConfig.methodValidation.allowOverridingParameterConstraints);
            configuration.allowParallelMethodsDefineParameterConstraints(hibernateValidatorBuildTimeConfig.methodValidation.allowParameterConstraintsOnParallelMethods);
            configuration.allowMultipleCascadedValidationOnReturnValues(hibernateValidatorBuildTimeConfig.methodValidation.allowMultipleCascadedValidationOnReturnValues);
            InstanceHandle<ScriptEvaluatorFactory> configuredScriptEvaluatorFactory = Arc.container().instance(ScriptEvaluatorFactory.class);
            if (configuredScriptEvaluatorFactory.isAvailable()) {
                configuration.scriptEvaluatorFactory(configuredScriptEvaluatorFactory.get());
            }
            InstanceHandle<GetterPropertySelectionStrategy> configuredGetterPropertySelectionStrategy = Arc.container().instance(GetterPropertySelectionStrategy.class);
            if (configuredGetterPropertySelectionStrategy.isAvailable()) {
                configuration.getterPropertySelectionStrategy(configuredGetterPropertySelectionStrategy.get());
            }
            InstanceHandle<PropertyNodeNameProvider> configuredPropertyNodeNameProvider = Arc.container().instance(PropertyNodeNameProvider.class);
            if (configuredPropertyNodeNameProvider.isAvailable()) {
                configuration.propertyNodeNameProvider(configuredPropertyNodeNameProvider.get());
            }
            // Automatically add all the values extractors declared as beans
            for (ValueExtractor<?> valueExtractor : Arc.container().beanManager().createInstance().select(TYPE_LITERAL_VALUE_EXTRACTOR_WITH_WILDCARD)) {
                configuration.addValueExtractor(valueExtractor);
            }
            ValidatorFactory validatorFactory = configuration.buildValidatorFactory();
            ValidatorHolder.initialize(validatorFactory);
            // Close the ValidatorFactory on shutdown
            shutdownContext.addShutdownTask(new Runnable() {

                @Override
                public void run() {
                    validatorFactory.close();
                }
            });
        }
    };
    return beanContainerListener;
}
Also used : ConstraintValidatorFactory(javax.validation.ConstraintValidatorFactory) GetterPropertySelectionStrategy(org.hibernate.validator.spi.properties.GetterPropertySelectionStrategy) BeanContainer(io.quarkus.arc.runtime.BeanContainer) JPATraversableResolver(org.hibernate.validator.internal.engine.resolver.JPATraversableResolver) ClockProvider(javax.validation.ClockProvider) PredefinedScopeHibernateValidator(org.hibernate.validator.PredefinedScopeHibernateValidator) ScriptEvaluatorFactory(org.hibernate.validator.spi.scripting.ScriptEvaluatorFactory) PropertyNodeNameProvider(org.hibernate.validator.spi.nodenameprovider.PropertyNodeNameProvider) LocaleResolver(org.hibernate.validator.spi.messageinterpolation.LocaleResolver) ValidatorFactory(javax.validation.ValidatorFactory) ConstraintValidatorFactory(javax.validation.ConstraintValidatorFactory) JPATraversableResolver(org.hibernate.validator.internal.engine.resolver.JPATraversableResolver) TraversableResolver(javax.validation.TraversableResolver) ParameterNameProvider(javax.validation.ParameterNameProvider) BeanContainerListener(io.quarkus.arc.runtime.BeanContainerListener) PredefinedScopeHibernateValidatorConfiguration(org.hibernate.validator.PredefinedScopeHibernateValidatorConfiguration) MessageInterpolator(javax.validation.MessageInterpolator)

Aggregations

BeanContainer (io.quarkus.arc.runtime.BeanContainer)1 BeanContainerListener (io.quarkus.arc.runtime.BeanContainerListener)1 ClockProvider (javax.validation.ClockProvider)1 ConstraintValidatorFactory (javax.validation.ConstraintValidatorFactory)1 MessageInterpolator (javax.validation.MessageInterpolator)1 ParameterNameProvider (javax.validation.ParameterNameProvider)1 TraversableResolver (javax.validation.TraversableResolver)1 ValidatorFactory (javax.validation.ValidatorFactory)1 PredefinedScopeHibernateValidator (org.hibernate.validator.PredefinedScopeHibernateValidator)1 PredefinedScopeHibernateValidatorConfiguration (org.hibernate.validator.PredefinedScopeHibernateValidatorConfiguration)1 JPATraversableResolver (org.hibernate.validator.internal.engine.resolver.JPATraversableResolver)1 LocaleResolver (org.hibernate.validator.spi.messageinterpolation.LocaleResolver)1 PropertyNodeNameProvider (org.hibernate.validator.spi.nodenameprovider.PropertyNodeNameProvider)1 GetterPropertySelectionStrategy (org.hibernate.validator.spi.properties.GetterPropertySelectionStrategy)1 ScriptEvaluatorFactory (org.hibernate.validator.spi.scripting.ScriptEvaluatorFactory)1