You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/02/06 12:05:07 UTC

[camel] 14/18: CAMEL-16102: Source code generate @InvokeOnHeader for reflection free

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch on-header
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a37ac64e63052b340f82f54bf41bba2e965ff6a3
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Feb 6 09:39:00 2021 +0100

    CAMEL-16102: Source code generate @InvokeOnHeader for reflection free
---
 .../camel/catalog/components/spring-redis.json     |  1 +
 .../camel-infinispan-common/pom.xml                | 39 --------------
 .../InfinispanProducerInvokeOnHeaderFactory.java   | 62 ++++++++++++++++++++++
 ...e.camel.component.infinispan.InfinispanProducer |  2 +
 .../services/org/apache/camel/other.properties     |  7 +++
 .../src/generated/resources/infinispan-common.json | 14 +++++
 ...ujiServiceNowProducerInvokeOnHeaderFactory.java |  6 +--
 ...nkiServiceNowProducerInvokeOnHeaderFactory.java | 20 +++----
 .../releases/fuji/FujiServiceNowProducer.java      |  1 -
 .../helsinki/HelsinkiServiceNowProducer.java       |  1 -
 .../camel/support/HeaderSelectorProducer.java      | 15 ++++++
 11 files changed, 114 insertions(+), 54 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-redis.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-redis.json
index baa7b66..f219a0b 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-redis.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/spring-redis.json
@@ -22,6 +22,7 @@
     "lenientProperties": false
   },
   "componentProperties": {
+    "redisTemplate": { "kind": "property", "displayName": "Redis Template", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.springframework.data.redis.core.RedisTemplate", "deprecated": false, "autowired": true, "secret": false, "description": "Reference to a pre-configured RedisTemplate instance to use." },
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during star [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
diff --git a/components/camel-infinispan/camel-infinispan-common/pom.xml b/components/camel-infinispan/camel-infinispan-common/pom.xml
index 1c857bf..4838dc92 100644
--- a/components/camel-infinispan/camel-infinispan-common/pom.xml
+++ b/components/camel-infinispan/camel-infinispan-common/pom.xml
@@ -69,43 +69,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.camel</groupId>
-                <artifactId>camel-package-maven-plugin</artifactId>
-                <configuration>
-                    <!-- set to true to make build fail fast if missing documentation in docs files -->
-                    <failFast>false</failFast>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate</id>
-                        <goals>
-                            <goal>generate</goal>
-                        </goals>
-                        <phase/>
-                    </execution>
-                    <execution>
-                        <id>generate-postcompile</id>
-                        <goals>
-                            <goal>generate-postcompile</goal>
-                        </goals>
-                        <phase/>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/components/camel-infinispan/camel-infinispan-common/src/generated/java/org/apache/camel/component/infinispan/InfinispanProducerInvokeOnHeaderFactory.java b/components/camel-infinispan/camel-infinispan-common/src/generated/java/org/apache/camel/component/infinispan/InfinispanProducerInvokeOnHeaderFactory.java
new file mode 100644
index 0000000..32ea622
--- /dev/null
+++ b/components/camel-infinispan/camel-infinispan-common/src/generated/java/org/apache/camel/component/infinispan/InfinispanProducerInvokeOnHeaderFactory.java
@@ -0,0 +1,62 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.infinispan;
+
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.InvokeOnHeaderStrategy;
+import org.apache.camel.component.infinispan.InfinispanProducer;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class InfinispanProducerInvokeOnHeaderFactory implements InvokeOnHeaderStrategy {
+
+    @Override
+    public Object invoke(Object obj, String key, Exchange exchange, AsyncCallback callback) throws Exception {
+        org.apache.camel.component.infinispan.InfinispanProducer target = (org.apache.camel.component.infinispan.InfinispanProducer) obj;
+        switch (key) {
+        case "clear":
+        case "CLEAR": target.onClear(exchange.getMessage()); return null;
+        case "clearasync":
+        case "CLEARASYNC": target.onCLearAsync(exchange.getMessage()); return null;
+        case "compute":
+        case "COMPUTE": target.onCompute(exchange.getMessage()); return null;
+        case "computeasync":
+        case "COMPUTEASYNC": target.onComputeAsync(exchange.getMessage()); return null;
+        case "containskey":
+        case "CONTAINSKEY": target.onContainsKey(exchange.getMessage()); return null;
+        case "containsvalue":
+        case "CONTAINSVALUE": target.onContainsValue(exchange.getMessage()); return null;
+        case "get":
+        case "GET": target.onGet(exchange.getMessage()); return null;
+        case "getordefault":
+        case "GETORDEFAULT": target.onGetOrDefault(exchange.getMessage()); return null;
+        case "put":
+        case "PUT": target.onPut(exchange.getMessage()); return null;
+        case "putall":
+        case "PUTALL": target.onPutAll(exchange.getMessage()); return null;
+        case "putallasync":
+        case "PUTALLASYNC": target.onPutAllAsync(exchange.getMessage()); return null;
+        case "putasync":
+        case "PUTASYNC": target.onPutAsync(exchange.getMessage()); return null;
+        case "putifabsent":
+        case "PUTIFABSENT": target.onPutIfAbsent(exchange.getMessage()); return null;
+        case "putifabsentasync":
+        case "PUTIFABSENTASYNC": target.onPutIfAbsentAsync(exchange.getMessage()); return null;
+        case "remove":
+        case "REMOVE": target.onRemove(exchange.getMessage()); return null;
+        case "removeasync":
+        case "REMOVEASYNC": target.onRemoveAsync(exchange.getMessage()); return null;
+        case "replace":
+        case "REPLACE": target.onReplace(exchange.getMessage()); return null;
+        case "replaceasync":
+        case "REPLACEASYNC": target.onReplaceAsync(exchange.getMessage()); return null;
+        case "size":
+        case "SIZE": target.onSize(exchange.getMessage()); return null;
+        default: return null;
+        }
+    }
+
+}
+
diff --git a/components/camel-infinispan/camel-infinispan-common/src/generated/resources/META-INF/services/org/apache/camel/invoke-on-header/org.apache.camel.component.infinispan.InfinispanProducer b/components/camel-infinispan/camel-infinispan-common/src/generated/resources/META-INF/services/org/apache/camel/invoke-on-header/org.apache.camel.component.infinispan.InfinispanProducer
new file mode 100644
index 0000000..9b6bc17
--- /dev/null
+++ b/components/camel-infinispan/camel-infinispan-common/src/generated/resources/META-INF/services/org/apache/camel/invoke-on-header/org.apache.camel.component.infinispan.InfinispanProducer
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.infinispan.InfinispanProducerInvokeOnHeaderFactory
diff --git a/components/camel-infinispan/camel-infinispan-common/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-infinispan/camel-infinispan-common/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000..f807e1e
--- /dev/null
+++ b/components/camel-infinispan/camel-infinispan-common/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=infinispan-common
+groupId=org.apache.camel
+artifactId=camel-infinispan-common
+version=3.8.0-SNAPSHOT
+projectName=Camel :: Infinispan :: Common
+projectDescription=Camel Infinispan Common
diff --git a/components/camel-infinispan/camel-infinispan-common/src/generated/resources/infinispan-common.json b/components/camel-infinispan/camel-infinispan-common/src/generated/resources/infinispan-common.json
new file mode 100644
index 0000000..2d03326
--- /dev/null
+++ b/components/camel-infinispan/camel-infinispan-common/src/generated/resources/infinispan-common.json
@@ -0,0 +1,14 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "infinispan-common",
+    "title": "Infinispan Common",
+    "description": "Camel Infinispan Common",
+    "deprecated": false,
+    "firstVersion": "2.13.0",
+    "supportLevel": "Stable",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-infinispan-common",
+    "version": "3.8.0-SNAPSHOT"
+  }
+}
diff --git a/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducerInvokeOnHeaderFactory.java b/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducerInvokeOnHeaderFactory.java
index 46ce8d9..32e984a5 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducerInvokeOnHeaderFactory.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducerInvokeOnHeaderFactory.java
@@ -16,9 +16,9 @@ public class FujiServiceNowProducerInvokeOnHeaderFactory implements InvokeOnHead
     public Object invoke(Object obj, String key, Exchange exchange, AsyncCallback callback) throws Exception {
         org.apache.camel.component.servicenow.releases.fuji.FujiServiceNowProducer target = (org.apache.camel.component.servicenow.releases.fuji.FujiServiceNowProducer) obj;
         switch (key) {
-        case "aggregate": target.invokeProcessor2(exchange.getMessage()); return null;
-        case "import": target.invokeProcessor3(exchange.getMessage()); return null;
-        case "table": target.invokeProcessor1(exchange.getMessage()); return null;
+        case "aggregate": target.invokeProcessor2(exchange); return null;
+        case "import": target.invokeProcessor3(exchange); return null;
+        case "table": target.invokeProcessor1(exchange); return null;
         default: return null;
         }
     }
diff --git a/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducerInvokeOnHeaderFactory.java b/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducerInvokeOnHeaderFactory.java
index 09bbf6c..f1e9bfd 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducerInvokeOnHeaderFactory.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/generated/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducerInvokeOnHeaderFactory.java
@@ -16,16 +16,16 @@ public class HelsinkiServiceNowProducerInvokeOnHeaderFactory implements InvokeOn
     public Object invoke(Object obj, String key, Exchange exchange, AsyncCallback callback) throws Exception {
         org.apache.camel.component.servicenow.releases.helsinki.HelsinkiServiceNowProducer target = (org.apache.camel.component.servicenow.releases.helsinki.HelsinkiServiceNowProducer) obj;
         switch (key) {
-        case "aggregate": target.invokeProcessor2(exchange.getMessage()); return null;
-        case "attachment": target.invokeProcessor4(exchange.getMessage()); return null;
-        case "import": target.invokeProcessor3(exchange.getMessage()); return null;
-        case "misc": target.invokeProcessor6(exchange.getMessage()); return null;
-        case "scorecards": target.invokeProcessor5(exchange.getMessage()); return null;
-        case "service_catalog": target.invokeProcessor7(exchange.getMessage()); return null;
-        case "service_catalog_cart": target.invokeProcessor9(exchange.getMessage()); return null;
-        case "service_catalog_categories": target.invokeProcessor10(exchange.getMessage()); return null;
-        case "service_catalog_items": target.invokeProcessor8(exchange.getMessage()); return null;
-        case "table": target.invokeProcessor1(exchange.getMessage()); return null;
+        case "aggregate": target.invokeProcessor2(exchange); return null;
+        case "attachment": target.invokeProcessor4(exchange); return null;
+        case "import": target.invokeProcessor3(exchange); return null;
+        case "misc": target.invokeProcessor6(exchange); return null;
+        case "scorecards": target.invokeProcessor5(exchange); return null;
+        case "service_catalog": target.invokeProcessor7(exchange); return null;
+        case "service_catalog_cart": target.invokeProcessor9(exchange); return null;
+        case "service_catalog_categories": target.invokeProcessor10(exchange); return null;
+        case "service_catalog_items": target.invokeProcessor8(exchange); return null;
+        case "table": target.invokeProcessor1(exchange); return null;
         default: return null;
         }
     }
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducer.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducer.java
index 5a5e1cc..5e12a38 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducer.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/fuji/FujiServiceNowProducer.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.servicenow.releases.fuji;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.Message;
 import org.apache.camel.component.servicenow.AbstractServiceNowProducer;
 import org.apache.camel.component.servicenow.ServiceNowConstants;
 import org.apache.camel.component.servicenow.ServiceNowEndpoint;
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducer.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducer.java
index f4da0f9..75c5f07 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducer.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowProducer.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.servicenow.releases.helsinki;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.Message;
 import org.apache.camel.component.servicenow.AbstractServiceNowProducer;
 import org.apache.camel.component.servicenow.ServiceNowConstants;
 import org.apache.camel.component.servicenow.ServiceNowEndpoint;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java b/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java
index f03c8dc..6837c68 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/HeaderSelectorProducer.java
@@ -44,6 +44,7 @@ public abstract class HeaderSelectorProducer extends DefaultAsyncProducer implem
     private final Object target;
     private CamelContext camelContext;
     private InvokeOnHeaderStrategy strategy;
+    private InvokeOnHeaderStrategy strategy2;
 
     public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier) {
         this(endpoint, headerSupplier, () -> null, null);
@@ -146,6 +147,17 @@ public abstract class HeaderSelectorProducer extends DefaultAsyncProducer implem
         strategy = camelContext.adapt(ExtendedCamelContext.class).getBootstrapFactoryFinder(RESOURCE_PATH)
                 .newInstance(key, InvokeOnHeaderStrategy.class)
                 .orElseThrow(() -> new IllegalArgumentException("Cannot find " + fqn + " in classpath."));
+
+        Class<?> sclazz = this.getClass().getSuperclass();
+        if (sclazz != null && !sclazz.getName().equals("java.lang.Object")
+                && !sclazz.getName().equals(HeaderSelectorProducer.class.getName())) {
+            // some components may have a common base class they extend from (such as camel-infinispan)
+            String key2 = this.getClass().getSuperclass().getName();
+            String fqn2 = RESOURCE_PATH + key2;
+            strategy2 = camelContext.adapt(ExtendedCamelContext.class).getBootstrapFactoryFinder(RESOURCE_PATH)
+                    .newInstance(key2, InvokeOnHeaderStrategy.class)
+                    .orElseThrow(() -> new IllegalArgumentException("Cannot find " + fqn2 + " in classpath."));
+        }
     }
 
     @Override
@@ -163,6 +175,9 @@ public abstract class HeaderSelectorProducer extends DefaultAsyncProducer implem
 
             LOGGER.debug("Invoking @InvokeOnHeader method: {}", action);
             Object answer = strategy.invoke(target, action, exchange, callback);
+            if (answer == null && strategy2 != null) {
+                answer = strategy2.invoke(target, action, exchange, callback);
+            }
             LOGGER.trace("Invoked @InvokeOnHeader method: {} -> {}", action, answer);
             if (answer != null) {
                 exchange.getMessage().setBody(answer);