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 2024/03/25 09:17:34 UTC

(camel-quarkus) branch 3.8.x updated: Fix potential UnsatisfiedLinkError for Azure extensions in native mode (#5916)

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

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


The following commit(s) were added to refs/heads/3.8.x by this push:
     new 6379944974 Fix potential UnsatisfiedLinkError for Azure extensions in native mode (#5916)
6379944974 is described below

commit 63799449749945f35ffc8cdd6428c9b11a6d4fe8
Author: James Netherton <ja...@users.noreply.github.com>
AuthorDate: Mon Mar 25 04:03:02 2024 +0000

    Fix potential UnsatisfiedLinkError for Azure extensions in native mode (#5916)
    
    Fixes #5912
---
 .../netty/deployment/AzureCoreSupportProcessor.java     | 17 +++++++++++++++++
 .../AbstractClientApplicationBaseSubstitutions.java     |  2 +-
 .../blob/deployment/AzureStorageBlobProcessor.java      | 14 --------------
 3 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java b/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java
index 4af01eb684..d85be77c0f 100644
--- a/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java
+++ b/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java
@@ -22,6 +22,7 @@ import java.util.stream.Stream;
 
 import com.azure.core.annotation.ServiceInterface;
 import com.azure.core.http.HttpClientProvider;
+import com.microsoft.aad.msal4j.AbstractClientApplicationBaseSubstitutions.Msal4jIsPresent;
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
@@ -29,8 +30,10 @@ import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.NativeImageProxyDefinitionBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.RuntimeReinitializedClassBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
 import io.quarkus.deployment.util.ServiceUtil;
+import io.quarkus.utilities.OS;
 import org.jboss.jandex.DotName;
 
 public class AzureCoreSupportProcessor {
@@ -93,4 +96,18 @@ public class AzureCoreSupportProcessor {
                 .forEach(proxyDefinitions::produce);
     }
 
+    @BuildStep(onlyIf = Msal4jIsPresent.class)
+    void enableLoadingOfNativeLibraries(BuildProducer<RuntimeReinitializedClassBuildItem> runtimeReinitializedClass) {
+        OS os = OS.determineOS();
+        if (os.equals(OS.LINUX) || os.equals(OS.MAC)) {
+            String iSecurityLibraryClassName = "com.microsoft.aad.msal4jextensions.persistence.%s.ISecurityLibrary"
+                    .formatted(os.name().toLowerCase());
+            runtimeReinitializedClass.produce(new RuntimeReinitializedClassBuildItem(iSecurityLibraryClassName));
+        }
+
+        if (os.equals(OS.WINDOWS)) {
+            runtimeReinitializedClass.produce(new RuntimeReinitializedClassBuildItem("com.sun.jna.platform.win32.Crypt32"));
+            runtimeReinitializedClass.produce(new RuntimeReinitializedClassBuildItem("com.sun.jna.platform.win32.Kernel32"));
+        }
+    }
 }
diff --git a/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java b/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java
index 746d4b917b..c3ec5a3f50 100644
--- a/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java
+++ b/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java
@@ -59,7 +59,7 @@ public final class AbstractClientApplicationBaseSubstitutions {
         return supplier;
     }
 
-    static final class Msal4jIsPresent implements BooleanSupplier {
+    public static final class Msal4jIsPresent implements BooleanSupplier {
         @Override
         public boolean getAsBoolean() {
             try {
diff --git a/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java b/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java
index 91b9c79de9..ff38b1668a 100644
--- a/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java
+++ b/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.quarkus.component.azure.storage.blob.deployment;
 
-import com.azure.identity.implementation.IdentityClient;
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
@@ -25,7 +24,6 @@ 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 io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
 import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
 
@@ -69,16 +67,4 @@ class AzureStorageBlobProcessor {
         nativeResources.produce(new NativeImageResourceBuildItem(
                 "azure-storage-blob.properties"));
     }
-
-    @BuildStep
-    void runtimeInitializedClasses(BuildProducer<RuntimeInitializedClassBuildItem> runtimeInitializedClass) {
-        // Required by azure-identity
-        runtimeInitializedClass.produce(new RuntimeInitializedClassBuildItem("com.sun.jna.platform.win32.Crypt32"));
-        runtimeInitializedClass.produce(new RuntimeInitializedClassBuildItem("com.sun.jna.platform.win32.Kernel32"));
-        runtimeInitializedClass.produce(new RuntimeInitializedClassBuildItem(IdentityClient.class.getName()));
-        runtimeInitializedClass.produce(
-                new RuntimeInitializedClassBuildItem("com.microsoft.aad.msal4jextensions.persistence.linux.ISecurityLibrary"));
-        runtimeInitializedClass.produce(
-                new RuntimeInitializedClassBuildItem("com.microsoft.aad.msal4jextensions.persistence.mac.ISecurityLibrary"));
-    }
 }