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