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 <jamesnether...@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"));
-    }
 }

Reply via email to