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-quarkus.git
commit a2d7095282e659517f4606c21f7835e0b40b0b65 Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Fri Nov 15 09:41:55 2019 +0100 Make the BeanValidatorComponent leverage the ValidatorFactory computed by Quarkus --- build/eclipse-formatter-config.xml | 2 +- .../pages/list-of-camel-quarkus-extensions.adoc | 2 +- extensions/bean-validator/deployment/pom.xml | 2 +- .../deployment/BeanValidatorProcessor.java | 24 +++++++ extensions/bean-validator/pom.xml | 2 +- extensions/bean-validator/runtime/pom.xml | 22 +++++- .../bean/validator/BeanValidatorRecorder.java | 81 ++++++++++++++++++++++ ...tituteHibernateValidationProviderResolver.java} | 19 ++--- .../graal/SubstituteValidatorFactories.java | 40 +++++++++++ extensions/readme.adoc | 2 +- integration-tests/bean-validator/pom.xml | 2 +- .../src/main/resources/application.properties | 22 ++++++ pom.xml | 1 + poms/bom/pom.xml | 21 +++--- 14 files changed, 210 insertions(+), 32 deletions(-) diff --git a/build/eclipse-formatter-config.xml b/build/eclipse-formatter-config.xml index d0cd7cc..35b6889 100644 --- a/build/eclipse-formatter-config.xml +++ b/build/eclipse-formatter-config.xml @@ -265,7 +265,7 @@ <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/> <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="CHECKSTYLE:OFF"/> <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="CHECKSTYLE:ON"/> - <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/> <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/> </profile> </profiles> diff --git a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc index 439be68..dc9584e 100644 --- a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc +++ b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc @@ -6,7 +6,7 @@ As of Camel Quarkus {camel-quarkus-last-release} the following Camel artifacts a == Camel Components // components: START -Number of Camel components: 34 in 30 JAR artifacts (0 deprecated) +Number of Camel components: 35 in 31 JAR artifacts (0 deprecated) [width="100%",cols="4,1,5",options="header"] |=== diff --git a/extensions/bean-validator/deployment/pom.xml b/extensions/bean-validator/deployment/pom.xml index ef828d1..40bfc44 100644 --- a/extensions/bean-validator/deployment/pom.xml +++ b/extensions/bean-validator/deployment/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-bean-validator-parent</artifactId> - <version>0.3.2-SNAPSHOT</version> + <version>0.4.1-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> diff --git a/extensions/bean-validator/deployment/src/main/java/org/apache/camel/quarkus/component/bean/validator/deployment/BeanValidatorProcessor.java b/extensions/bean-validator/deployment/src/main/java/org/apache/camel/quarkus/component/bean/validator/deployment/BeanValidatorProcessor.java index 1b9be1b..47e1ecd 100644 --- a/extensions/bean-validator/deployment/src/main/java/org/apache/camel/quarkus/component/bean/validator/deployment/BeanValidatorProcessor.java +++ b/extensions/bean-validator/deployment/src/main/java/org/apache/camel/quarkus/component/bean/validator/deployment/BeanValidatorProcessor.java @@ -17,7 +17,14 @@ package org.apache.camel.quarkus.component.bean.validator.deployment; import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.annotations.ExecutionTime; +import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.FeatureBuildItem; +import org.apache.camel.component.bean.validator.BeanValidatorComponent; +import org.apache.camel.quarkus.component.bean.validator.BeanValidatorRecorder; +import org.apache.camel.quarkus.core.CamelServiceFilter; +import org.apache.camel.quarkus.core.deployment.CamelRuntimeBeanBuildItem; +import org.apache.camel.quarkus.core.deployment.CamelServiceFilterBuildItem; class BeanValidatorProcessor { @@ -28,4 +35,21 @@ class BeanValidatorProcessor { return new FeatureBuildItem(FEATURE); } + /* + * The bean-validator component is programmatically configured by the extension thus + * we can safely prevent camel to instantiate a default instance. + */ + @BuildStep + CamelServiceFilterBuildItem serviceFilter() { + return new CamelServiceFilterBuildItem(CamelServiceFilter.forComponent("bean-validator")); + } + + @Record(ExecutionTime.STATIC_INIT) + @BuildStep + CamelRuntimeBeanBuildItem beanValidatorComponent(BeanValidatorRecorder recorder) { + return new CamelRuntimeBeanBuildItem( + "bean-validator", + BeanValidatorComponent.class.getName(), + recorder.createBeanValidatorComponent()); + } } diff --git a/extensions/bean-validator/pom.xml b/extensions/bean-validator/pom.xml index bef510b..cc29598 100644 --- a/extensions/bean-validator/pom.xml +++ b/extensions/bean-validator/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-build-parent</artifactId> - <version>0.3.2-SNAPSHOT</version> + <version>0.4.1-SNAPSHOT</version> <relativePath>../../poms/build-parent/pom.xml</relativePath> </parent> diff --git a/extensions/bean-validator/runtime/pom.xml b/extensions/bean-validator/runtime/pom.xml index cc5efa8..33c61b8 100644 --- a/extensions/bean-validator/runtime/pom.xml +++ b/extensions/bean-validator/runtime/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-bean-validator-parent</artifactId> - <version>0.3.2-SNAPSHOT</version> + <version>0.4.1-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> @@ -61,11 +61,27 @@ <artifactId>camel-bean-validator</artifactId> <exclusions> <exclusion> - <artifactId>org.hibernate.validator</artifactId> - <groupId>hibernate-validator</groupId> + <groupId>org.hibernate.validator</groupId> + <artifactId>hibernate-validator</artifactId> + </exclusion> + <exclusion> + <groupId>org.glassfish</groupId> + <artifactId>javax.el</artifactId> + </exclusion> + <exclusion> + <groupId>javax.el</groupId> + <artifactId>javax.el-api</artifactId> </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.glassfish</groupId> + <artifactId>jakarta.el</artifactId> + </dependency> + <dependency> + <groupId>com.oracle.substratevm</groupId> + <artifactId>svm</artifactId> + </dependency> </dependencies> <build> diff --git a/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/BeanValidatorRecorder.java b/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/BeanValidatorRecorder.java new file mode 100644 index 0000000..eb15f94 --- /dev/null +++ b/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/BeanValidatorRecorder.java @@ -0,0 +1,81 @@ +/* + * 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.quarkus.component.bean.validator; + +import java.util.Map; +import javax.validation.ValidatorFactory; + +import io.quarkus.runtime.RuntimeValue; +import io.quarkus.runtime.annotations.Recorder; +import org.apache.camel.CamelContext; +import org.apache.camel.Component; +import org.apache.camel.Endpoint; +import org.apache.camel.Producer; +import org.apache.camel.component.bean.validator.BeanValidatorComponent; +import org.apache.camel.component.bean.validator.BeanValidatorEndpoint; +import org.apache.camel.component.bean.validator.BeanValidatorProducer; +import org.apache.camel.support.CamelContextHelper; + +@Recorder +public class BeanValidatorRecorder { + public RuntimeValue<BeanValidatorComponent> createBeanValidatorComponent() { + return new RuntimeValue<>(new QuarkusBeanValidatorComponent()); + } + + static class QuarkusBeanValidatorComponent extends BeanValidatorComponent { + @Override + protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { + BeanValidatorEndpoint endpoint = new QuarkusBeanValidatorEndpoint(uri, this); + endpoint.setLabel(remaining); + + setProperties(endpoint, parameters); + + return endpoint; + } + } + + static class QuarkusBeanValidatorEndpoint extends BeanValidatorEndpoint { + public QuarkusBeanValidatorEndpoint(String endpointUri, Component component) { + super(endpointUri, component); + } + + /* + * TODO: we should add an option to programmatically set a ValidatorFactory + * to the BeanValidatorComponent or to automatically look it up from + * the registry + */ + @Override + public Producer createProducer() throws Exception { + final CamelContext camelContext = getCamelContext(); + final BeanValidatorProducer producer = new BeanValidatorProducer(this); + final String group = getGroup(); + + if (group != null) { + producer.setGroup(camelContext.getClassResolver().resolveMandatoryClass(group)); + } + + ValidatorFactory validatorFactory = CamelContextHelper.mandatoryLookup( + camelContext, + "quarkus-hibernate-validator-factory", + ValidatorFactory.class); + + producer.setValidatorFactory(validatorFactory); + + return producer; + } + } +} diff --git a/extensions/bean-validator/deployment/src/main/java/org/apache/camel/quarkus/component/bean/validator/deployment/BeanValidatorProcessor.java b/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/graal/SubstituteHibernateValidationProviderResolver.java similarity index 68% copy from extensions/bean-validator/deployment/src/main/java/org/apache/camel/quarkus/component/bean/validator/deployment/BeanValidatorProcessor.java copy to extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/graal/SubstituteHibernateValidationProviderResolver.java index 1b9be1b..f3378c0 100644 --- a/extensions/bean-validator/deployment/src/main/java/org/apache/camel/quarkus/component/bean/validator/deployment/BeanValidatorProcessor.java +++ b/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/graal/SubstituteHibernateValidationProviderResolver.java @@ -14,18 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.quarkus.component.bean.validator.deployment; +package org.apache.camel.quarkus.component.bean.validator.graal; -import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.builditem.FeatureBuildItem; - -class BeanValidatorProcessor { - - private static final String FEATURE = "camel-bean-validator"; - - @BuildStep - FeatureBuildItem feature() { - return new FeatureBuildItem(FEATURE); - } +import com.oracle.svm.core.annotate.Substitute; +import com.oracle.svm.core.annotate.TargetClass; +import org.apache.camel.component.bean.validator.HibernateValidationProviderResolver; +@Substitute +@TargetClass(HibernateValidationProviderResolver.class) +final class SubstituteHibernateValidationProviderResolver { } diff --git a/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/graal/SubstituteValidatorFactories.java b/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/graal/SubstituteValidatorFactories.java new file mode 100644 index 0000000..2ab008c --- /dev/null +++ b/extensions/bean-validator/runtime/src/main/java/org/apache/camel/quarkus/component/bean/validator/graal/SubstituteValidatorFactories.java @@ -0,0 +1,40 @@ +/* + * 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.quarkus.component.bean.validator.graal; + +import javax.validation.ConstraintValidatorFactory; +import javax.validation.MessageInterpolator; +import javax.validation.TraversableResolver; +import javax.validation.ValidationProviderResolver; +import javax.validation.ValidatorFactory; + +import com.oracle.svm.core.annotate.Substitute; +import com.oracle.svm.core.annotate.TargetClass; +import org.apache.camel.component.bean.validator.ValidatorFactories; + +@TargetClass(ValidatorFactories.class) +final class SubstituteValidatorFactories { + @Substitute + public static ValidatorFactory buildValidatorFactory( + boolean osgi, + ValidationProviderResolver validationProviderResolver, + MessageInterpolator messageInterpolator, + TraversableResolver traversableResolver, + ConstraintValidatorFactory constraintValidatorFactory) { + throw new UnsupportedOperationException(); + } +} diff --git a/extensions/readme.adoc b/extensions/readme.adoc index c233963..06ab51d 100644 --- a/extensions/readme.adoc +++ b/extensions/readme.adoc @@ -5,7 +5,7 @@ Apache Camel Quarkus supports the following Camel artifacts as Quarkus Extension == Camel Components // components: START -Number of Camel components: 34 in 30 JAR artifacts (0 deprecated) +Number of Camel components: 35 in 31 JAR artifacts (0 deprecated) [width="100%",cols="4,1,5",options="header"] |=== diff --git a/integration-tests/bean-validator/pom.xml b/integration-tests/bean-validator/pom.xml index 55c0662..cd48916 100644 --- a/integration-tests/bean-validator/pom.xml +++ b/integration-tests/bean-validator/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-integration-tests</artifactId> - <version>0.3.2-SNAPSHOT</version> + <version>0.4.1-SNAPSHOT</version> </parent> <artifactId>camel-quarkus-integration-test-bean-validator</artifactId> diff --git a/integration-tests/bean-validator/src/main/resources/application.properties b/integration-tests/bean-validator/src/main/resources/application.properties new file mode 100644 index 0000000..9c51e3d --- /dev/null +++ b/integration-tests/bean-validator/src/main/resources/application.properties @@ -0,0 +1,22 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- +# +# Quarkus +# +quarkus.log.file.enable = false +quarkus.log.category."org.apache.camel.quarkus.core.deployment".level = INFO +quarkus.log.category."org.apache.camel.quarkus.component.bean.validator".level = DEBUG diff --git a/pom.xml b/pom.xml index 358e608..b0391d2 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,7 @@ <jetty.version>9.4.18.v20190429</jetty.version> <xstream.version>1.4.11</xstream.version> <snakeyaml.version>1.25</snakeyaml.version> + <joda-time.version>2.10.5</joda-time.version> <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> <maven.compiler.target>1.8</maven.compiler.target> diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml index b8134a4..507cf5a 100644 --- a/poms/bom/pom.xml +++ b/poms/bom/pom.xml @@ -535,6 +535,11 @@ </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-scheduler</artifactId> + <version>${camel-quarkus.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-servlet</artifactId> <version>${camel-quarkus.version}</version> </dependency> @@ -575,6 +580,11 @@ </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-xslt</artifactId> + <version>${camel-quarkus.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-zipfile</artifactId> <version>${camel-quarkus.version}</version> </dependency> @@ -610,17 +620,6 @@ <artifactId>snakeyaml</artifactId> <version>${snakeyaml.version}</version> </dependency> - <dependency> - <groupId>org.apache.camel.quarkus</groupId> - <artifactId>camel-quarkus-scheduler</artifactId> - <version>${camel-quarkus.version}</version> - </dependency> - <dependency> - <groupId>org.apache.camel.quarkus</groupId> - <artifactId>camel-quarkus-xslt</artifactId> - <version>${camel-quarkus.version}</version> - </dependency> - </dependencies> </dependencyManagement>