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>
 

Reply via email to