You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2023/03/24 07:12:44 UTC

[camel-quarkus] branch 2.13.x updated: Add jira model classes and jackson joda datatype to @BuildStep

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

jamesnetherton pushed a commit to branch 2.13.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/2.13.x by this push:
     new 7b9aaa140c Add jira model classes and jackson joda datatype to @BuildStep
7b9aaa140c is described below

commit 7b9aaa140c33647e1cd347f86b87fb080000288d
Author: Claudio Miranda <cl...@claudius.com.br>
AuthorDate: Mon Mar 20 19:00:01 2023 -0300

    Add jira model classes and jackson joda datatype to @BuildStep
    
    https://github.com/apache/camel-quarkus/issues/4676
---
 .../component/jackson/JacksonProcessor.java        |  8 ++++--
 .../component/jira/deployment/JiraProcessor.java   | 29 +++++++++++++++++++---
 integration-tests/jira/README.adoc                 |  2 ++
 3 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/extensions/jackson/deployment/src/main/java/org/apache/camel/quarkus/component/jackson/JacksonProcessor.java b/extensions/jackson/deployment/src/main/java/org/apache/camel/quarkus/component/jackson/JacksonProcessor.java
index 4789246bd1..5ed0585da0 100644
--- a/extensions/jackson/deployment/src/main/java/org/apache/camel/quarkus/component/jackson/JacksonProcessor.java
+++ b/extensions/jackson/deployment/src/main/java/org/apache/camel/quarkus/component/jackson/JacksonProcessor.java
@@ -19,7 +19,7 @@ package org.apache.camel.quarkus.component.jackson;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.fasterxml.jackson.databind.JsonNode;
+import io.quarkus.bootstrap.classloading.QuarkusClassLoader;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
@@ -37,7 +37,11 @@ public class JacksonProcessor {
     List<ReflectiveClassBuildItem> registerReflectiveClasses() {
         List<ReflectiveClassBuildItem> items = new ArrayList<>();
         items.add(new ReflectiveClassBuildItem(false, true, "com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule"));
-        items.add(new ReflectiveClassBuildItem(false, false, JsonNode.class));
+        items.add(new ReflectiveClassBuildItem(false, false, "com.fasterxml.jackson.databind.JsonNode"));
+        if (QuarkusClassLoader.isClassPresentAtRuntime("com.fasterxml.jackson.datatype.joda.JodaModule")) {
+            items.add(new ReflectiveClassBuildItem(true, true, "com.fasterxml.jackson.datatype.joda.JodaModule"));
+            items.add(new ReflectiveClassBuildItem(true, true, "org.joda.time.DateTime"));
+        }
         return items;
     }
 }
diff --git a/extensions/jira/deployment/src/main/java/org/apache/camel/quarkus/component/jira/deployment/JiraProcessor.java b/extensions/jira/deployment/src/main/java/org/apache/camel/quarkus/component/jira/deployment/JiraProcessor.java
index 0e3556afe7..6e36bbddea 100644
--- a/extensions/jira/deployment/src/main/java/org/apache/camel/quarkus/component/jira/deployment/JiraProcessor.java
+++ b/extensions/jira/deployment/src/main/java/org/apache/camel/quarkus/component/jira/deployment/JiraProcessor.java
@@ -19,17 +19,20 @@ package org.apache.camel.quarkus.component.jira.deployment;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.atlassian.jira.rest.client.api.domain.Issue;
 import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.jboss.jandex.IndexView;
 import org.joda.time.DateTimeZone;
 
 class JiraProcessor {
 
     private static final String FEATURE = "camel-jira";
+    private static final String JIRA_MODEL_PACKAGE = "com.atlassian.jira.rest.client.api.domain";
 
     @BuildStep
     ExtensionSslNativeSupportBuildItem activateSslNativeSupport() {
@@ -55,8 +58,26 @@ class JiraProcessor {
     }
 
     @BuildStep
-    ReflectiveClassBuildItem registerForReflection() {
-        // Required by org.apache.camel.component.jira.consumer.WatchUpdatesConsumer
-        return new ReflectiveClassBuildItem(true, false, Issue.class.getName());
+    ReflectiveClassBuildItem registerJiraClassesForReflection(CombinedIndexBuildItem combinedIndex) {
+        IndexView index = combinedIndex.getIndex();
+        String[] modelClasses = index.getKnownClasses().stream()
+                .map(ci -> ci.name().toString())
+                .filter(n -> n.startsWith(JIRA_MODEL_PACKAGE))
+                .toArray(String[]::new);
+        return new ReflectiveClassBuildItem(true, false, modelClasses);
+    }
+
+    @BuildStep
+    IndexDependencyBuildItem registerDependencyForIndex() {
+        return new IndexDependencyBuildItem("com.atlassian.jira", "jira-rest-java-client-api");
+    }
+
+    @BuildStep
+    List<ReflectiveClassBuildItem> registerReflectiveClasses() {
+        List<ReflectiveClassBuildItem> items = new ArrayList<>();
+        items.add(new ReflectiveClassBuildItem(true, false, "com.atlassian.jira.rest.client.api.StatusCategory"));
+        items.add(new ReflectiveClassBuildItem(true, false, "org.codehaus.jettison.json.JSONArray"));
+        items.add(new ReflectiveClassBuildItem(true, false, "org.codehaus.jettison.json.JSONObject"));
+        return items;
     }
 }
diff --git a/integration-tests/jira/README.adoc b/integration-tests/jira/README.adoc
index d183308de9..0462988db3 100644
--- a/integration-tests/jira/README.adoc
+++ b/integration-tests/jira/README.adoc
@@ -13,6 +13,8 @@ export JIRA_URL=http://localhost:8080/
 export JIRA_USERNAME=my-jira-username
 export JIRA_PASSWORD=my-jira-password
 
+NOTE: You can create a personal `API Token` instead, so you don't have to share the user's password.
+
 # If your Jira server requires OAuth authentication
 export JIRA_OAUTH_ACCESS_TOKEN=your-access-token
 export JIRA_OAUTH_CONSUMER_KEY=your-consumer-key