This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 92008b8 CAMEL-14185: [bean-validator] Allow to provide custom ValidatorFactory 92008b8 is described below commit 92008b8f221a8cfde8ae0500c38879267c900132 Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Fri Nov 15 17:01:23 2019 +0100 CAMEL-14185: [bean-validator] Allow to provide custom ValidatorFactory --- .../bean/validator/BeanValidatorComponent.java | 4 ++ .../bean/validator/BeanValidatorEndpoint.java | 22 ++++++- .../bean/validator/ValidatorFactoryTest.java | 73 ++++++++++++++++++++++ 3 files changed, 97 insertions(+), 2 deletions(-) diff --git a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java index 8cf5137..ba97c37 100644 --- a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java +++ b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java @@ -22,6 +22,7 @@ import javax.validation.ConstraintValidatorFactory; import javax.validation.MessageInterpolator; import javax.validation.TraversableResolver; import javax.validation.ValidationProviderResolver; +import javax.validation.ValidatorFactory; import org.apache.camel.Endpoint; import org.apache.camel.spi.Metadata; @@ -45,6 +46,8 @@ public class BeanValidatorComponent extends DefaultComponent { private TraversableResolver traversableResolver; @Metadata(label = "advanced") private ConstraintValidatorFactory constraintValidatorFactory; + @Metadata(label = "advanced") + private ValidatorFactory validatorFactory; public BeanValidatorComponent() { } @@ -59,6 +62,7 @@ public class BeanValidatorComponent extends DefaultComponent { endpoint.setMessageInterpolator(messageInterpolator); endpoint.setTraversableResolver(traversableResolver); endpoint.setConstraintValidatorFactory(constraintValidatorFactory); + endpoint.setValidatorFactory(validatorFactory); setProperties(endpoint, parameters); return endpoint; diff --git a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorEndpoint.java b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorEndpoint.java index ab1412f..2303bf1 100644 --- a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorEndpoint.java +++ b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorEndpoint.java @@ -57,6 +57,8 @@ public class BeanValidatorEndpoint extends DefaultEndpoint { private TraversableResolver traversableResolver; @UriParam(label = "advanced") private ConstraintValidatorFactory constraintValidatorFactory; + @UriParam(label = "advanced") + private ValidatorFactory validatorFactory; public BeanValidatorEndpoint(String endpointUri, Component component) { super(endpointUri, component); @@ -68,8 +70,13 @@ public class BeanValidatorEndpoint extends DefaultEndpoint { if (group != null) { producer.setGroup(getCamelContext().getClassResolver().resolveMandatoryClass(group)); } - ValidatorFactory validatorFactory = buildValidatorFactory(isOsgiContext(), isIgnoreXmlConfiguration(), - validationProviderResolver, messageInterpolator, traversableResolver, constraintValidatorFactory); + + ValidatorFactory validatorFactory = this.validatorFactory; + if (validatorFactory == null) { + validatorFactory = buildValidatorFactory(isOsgiContext(), isIgnoreXmlConfiguration(), + validationProviderResolver, messageInterpolator, traversableResolver, constraintValidatorFactory); + } + producer.setValidatorFactory(validatorFactory); return producer; } @@ -161,4 +168,15 @@ public class BeanValidatorEndpoint extends DefaultEndpoint { public void setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) { this.constraintValidatorFactory = constraintValidatorFactory; } + + public ValidatorFactory getValidatorFactory() { + return validatorFactory; + } + + /** + * To use a custom {@link ValidatorFactory} + */ + public void setValidatorFactory(ValidatorFactory validatorFactory) { + this.validatorFactory = validatorFactory; + } } diff --git a/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/ValidatorFactoryTest.java b/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/ValidatorFactoryTest.java new file mode 100644 index 0000000..6e74478 --- /dev/null +++ b/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/ValidatorFactoryTest.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.bean.validator; + +import javax.validation.Validation; +import javax.validation.ValidatorFactory; +import javax.validation.bootstrap.GenericBootstrap; + +import org.apache.camel.BindToRegistry; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Before; +import org.junit.Test; + +public class ValidatorFactoryTest extends CamelTestSupport { + + @BindToRegistry("myValidatorFactory") + private ValidatorFactory validatorFactory; + + @Override + @Before + public void setUp() throws Exception { + GenericBootstrap bootstrap = Validation.byDefaultProvider(); + bootstrap.providerResolver(new HibernateValidationProviderResolver()); + + this.validatorFactory = bootstrap.configure().buildValidatorFactory(); + + super.setUp(); + } + + @Test + public void configureValidatorFactoryFromRegistry() throws Exception { + if (isPlatform("aix")) { + // cannot run on aix + return; + } + + BeanValidatorEndpoint endpoint = context.getEndpoint("bean-validator?validatorFactory=#myValidatorFactory", BeanValidatorEndpoint.class); + BeanValidatorProducer producer = (BeanValidatorProducer)endpoint.createProducer(); + + assertSame(endpoint.getValidatorFactory(), this.validatorFactory); + assertSame(producer.getValidatorFactory(), this.validatorFactory); + } + + @Test + public void configureValidatorFactory() throws Exception { + if (isPlatform("aix")) { + // cannot run on aix + return; + } + + BeanValidatorEndpoint endpoint = context.getEndpoint("bean-validator", BeanValidatorEndpoint.class); + BeanValidatorProducer producer = (BeanValidatorProducer)endpoint.createProducer(); + + assertNull(endpoint.getValidatorFactory()); + assertNotSame(endpoint.getValidatorFactory(), this.validatorFactory); + assertNotNull(producer.getValidatorFactory()); + assertNotSame(producer.getValidatorFactory(), this.validatorFactory); + } +}