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 2025/04/30 07:48:49 UTC

(camel-quarkus) branch 3.20.x updated (63235bc75a -> 3681414f16)

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

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


    from 63235bc75a Upgrade to Quarkus CXF 3.20.2
     new 73f38c4f24 Fixes #7211 Enable ssh eddsa test for RHEL
     new 57753fc551 fixes #7317 Longer interval for azureServiceBus.scheduled
     new 3681414f16 Fix dynamic instantiation of Azure HttpResponseException types in native mode

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../deployment/AzureCoreSupportProcessor.java      | 23 +++++++++++++++++++---
 .../deployment/AzureServicebusProcessor.java       |  6 ++++++
 .../azure/eventhubs/it/AzureEventhubsResource.java | 17 ++++++++++++++++
 .../azure/eventhubs/it/AzureEventhubsTest.java     |  8 ++++++++
 .../azure/key/vault/it/AzureKeyVaultResource.java  | 17 ++++++++++++++++
 .../azure/key/vault/it/AzureKeyVaultTest.java      |  7 +++++++
 .../servicebus/it/AzureServiceBusResource.java     | 17 ++++++++++++++++
 .../azure/servicebus/it/AzureServiceBusTest.java   | 19 ++++++++++++++----
 .../storage/blob/it/AzureStorageBlobResource.java  | 17 ++++++++++++++++
 .../storage/blob/it/AzureStorageBlobTest.java      |  8 ++++++++
 .../queue/it/AzureStorageQueueResource.java        | 17 ++++++++++++++++
 .../storage/queue/it/AzureStorageQueueTest.java    |  7 +++++++
 integration-tests/ssh/README.adoc                  | 12 +++++++++++
 .../camel/quarkus/component/ssh/it/SshTest.java    |  2 --
 14 files changed, 168 insertions(+), 9 deletions(-)
 create mode 100644 integration-tests/ssh/README.adoc


(camel-quarkus) 03/03: Fix dynamic instantiation of Azure HttpResponseException types in native mode

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 3681414f1657abdb5d1cc0f7d7aa2d8345691f93
Author: James Netherton <ja...@gmail.com>
AuthorDate: Tue Apr 29 12:01:34 2025 +0100

    Fix dynamic instantiation of Azure HttpResponseException types in native mode
    
    Fixes #7319
---
 .../deployment/AzureCoreSupportProcessor.java      | 23 +++++++++++++++++++---
 .../deployment/AzureServicebusProcessor.java       |  6 ++++++
 .../azure/eventhubs/it/AzureEventhubsResource.java | 17 ++++++++++++++++
 .../azure/eventhubs/it/AzureEventhubsTest.java     |  8 ++++++++
 .../azure/key/vault/it/AzureKeyVaultResource.java  | 17 ++++++++++++++++
 .../azure/key/vault/it/AzureKeyVaultTest.java      |  7 +++++++
 .../servicebus/it/AzureServiceBusResource.java     | 17 ++++++++++++++++
 .../azure/servicebus/it/AzureServiceBusTest.java   |  8 ++++++++
 .../storage/blob/it/AzureStorageBlobResource.java  | 17 ++++++++++++++++
 .../storage/blob/it/AzureStorageBlobTest.java      |  8 ++++++++
 .../queue/it/AzureStorageQueueResource.java        | 17 ++++++++++++++++
 .../storage/queue/it/AzureStorageQueueTest.java    |  7 +++++++
 12 files changed, 149 insertions(+), 3 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 90c6cde3a1..b603a2a2c9 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
@@ -19,9 +19,11 @@ package org.apache.camel.quarkus.support.reactor.netty.deployment;
 import java.io.IOException;
 import java.util.Set;
 import java.util.function.BooleanSupplier;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import com.azure.core.annotation.ServiceInterface;
+import com.azure.core.exception.HttpResponseException;
 import com.azure.core.http.HttpClientProvider;
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
@@ -34,18 +36,22 @@ import io.quarkus.deployment.builditem.nativeimage.RuntimeReinitializedClassBuil
 import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
 import io.quarkus.deployment.util.ServiceUtil;
 import io.quarkus.utilities.OS;
+import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
 
 public class AzureCoreSupportProcessor {
     private static final DotName SERVICE_INTERFACE_DOT_NAME = DotName.createSimple(ServiceInterface.class.getName());
 
     @BuildStep
-    IndexDependencyBuildItem indexDependency() {
-        return new IndexDependencyBuildItem("com.azure", "azure-core");
+    void indexDependency(BuildProducer<IndexDependencyBuildItem> indexedDependencies) {
+        indexedDependencies.produce(new IndexDependencyBuildItem("com.azure", "azure-core"));
+        indexedDependencies.produce(new IndexDependencyBuildItem("com.azure", "azure-identity"));
     }
 
     @BuildStep
-    void reflectiveClasses(BuildProducer<ReflectiveClassBuildItem> reflectiveClasses) {
+    void reflectiveClasses(
+            CombinedIndexBuildItem combinedIndex,
+            BuildProducer<ReflectiveClassBuildItem> reflectiveClasses) {
         reflectiveClasses.produce(ReflectiveClassBuildItem.builder(com.azure.core.util.DateTimeRfc1123.class,
                 com.azure.core.http.HttpHeaderName.class,
                 com.azure.core.http.rest.StreamResponse.class,
@@ -54,6 +60,17 @@ public class AzureCoreSupportProcessor {
         reflectiveClasses.produce(ReflectiveClassBuildItem.builder("com.microsoft.aad.msal4j.AadInstanceDiscoveryResponse",
                 "com.microsoft.aad.msal4j.InstanceDiscoveryMetadataEntry").fields().build());
 
+        // HttpResponseException instances may be dynamically instantiated and have methods invoked reflectively
+        Set<String> httpResponseExceptionClasses = combinedIndex.getIndex()
+                .getAllKnownSubclasses(HttpResponseException.class)
+                .stream()
+                .map(ClassInfo::name)
+                .map(DotName::toString)
+                .collect(Collectors.toUnmodifiableSet());
+
+        reflectiveClasses.produce(ReflectiveClassBuildItem.builder(httpResponseExceptionClasses.toArray(new String[0]))
+                .methods()
+                .build());
     }
 
     @BuildStep
diff --git a/extensions/azure-servicebus/deployment/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/deployment/AzureServicebusProcessor.java b/extensions/azure-servicebus/deployment/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/deployment/AzureServicebusProcessor.java
index 5f532a5ef6..9b9ac0f863 100644
--- a/extensions/azure-servicebus/deployment/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/deployment/AzureServicebusProcessor.java
+++ b/extensions/azure-servicebus/deployment/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/deployment/AzureServicebusProcessor.java
@@ -21,6 +21,7 @@ import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
 
 class AzureServicebusProcessor {
@@ -43,4 +44,9 @@ class AzureServicebusProcessor {
         runtimeInitializedClass
                 .produce(new RuntimeInitializedClassBuildItem(DigestProxyChallengeProcessorImpl.class.getName()));
     }
+
+    @BuildStep
+    IndexDependencyBuildItem indexDependency() {
+        return new IndexDependencyBuildItem("com.azure", "azure-messaging-servicebus");
+    }
 }
diff --git a/integration-test-groups/azure/azure-eventhubs/src/main/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsResource.java b/integration-test-groups/azure/azure-eventhubs/src/main/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsResource.java
index c69dd53710..44c3b9287d 100644
--- a/integration-test-groups/azure/azure-eventhubs/src/main/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsResource.java
+++ b/integration-test-groups/azure/azure-eventhubs/src/main/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsResource.java
@@ -23,6 +23,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
+import com.azure.core.exception.HttpResponseException;
+import com.azure.core.implementation.ReflectiveInvoker;
+import com.azure.core.implementation.http.UnexpectedExceptionInformation;
+import com.azure.core.implementation.http.rest.ResponseExceptionConstructorCache;
+import com.azure.storage.blob.implementation.models.BlobStorageExceptionInternal;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import jakarta.ws.rs.Consumes;
@@ -146,4 +151,16 @@ public class AzureEventhubsResource {
     public void stopRoute(@PathParam("routeId") String routeId) throws Exception {
         context.getRouteController().stopRoute(routeId);
     }
+
+    @GET
+    @Path("exception/cache")
+    @Produces(MediaType.TEXT_PLAIN)
+    public boolean cachedHttpResponseException() {
+        UnexpectedExceptionInformation exceptionInformation = new UnexpectedExceptionInformation(
+                BlobStorageExceptionInternal.class);
+        Class<? extends HttpResponseException> exceptionType = exceptionInformation.getExceptionType();
+        ReflectiveInvoker reflectiveInvoker = new ResponseExceptionConstructorCache().get(exceptionType,
+                exceptionInformation.getExceptionBodyType());
+        return reflectiveInvoker != null;
+    }
 }
diff --git a/integration-test-groups/azure/azure-eventhubs/src/test/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsTest.java b/integration-test-groups/azure/azure-eventhubs/src/test/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsTest.java
index 8d774afa83..80f3b95260 100644
--- a/integration-test-groups/azure/azure-eventhubs/src/test/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsTest.java
+++ b/integration-test-groups/azure/azure-eventhubs/src/test/java/org/apache/camel/quarkus/component/azure/eventhubs/it/AzureEventhubsTest.java
@@ -441,4 +441,12 @@ class AzureEventhubsTest {
                     .statusCode(204);
         }
     }
+
+    @Test
+    void dynamicExceptionInstantiation() {
+        RestAssured.get("/azure-eventhubs/exception/cache")
+                .then()
+                .statusCode(200)
+                .body(is("true"));
+    }
 }
diff --git a/integration-test-groups/azure/azure-key-vault/src/main/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultResource.java b/integration-test-groups/azure/azure-key-vault/src/main/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultResource.java
index 6e760768b1..b0f018e3f8 100644
--- a/integration-test-groups/azure/azure-key-vault/src/main/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultResource.java
+++ b/integration-test-groups/azure/azure-key-vault/src/main/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultResource.java
@@ -18,6 +18,11 @@ package org.apache.camel.quarkus.component.azure.key.vault.it;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import com.azure.core.exception.HttpResponseException;
+import com.azure.core.implementation.ReflectiveInvoker;
+import com.azure.core.implementation.http.UnexpectedExceptionInformation;
+import com.azure.core.implementation.http.rest.ResponseExceptionConstructorCache;
+import com.azure.security.keyvault.secrets.implementation.models.KeyVaultErrorException;
 import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.enterprise.event.Observes;
@@ -138,4 +143,16 @@ public class AzureKeyVaultResource {
     public boolean contextReloadStatus() {
         return contextReloaded.get();
     }
+
+    @GET
+    @Path("exception/cache")
+    @Produces(MediaType.TEXT_PLAIN)
+    public boolean cachedHttpResponseException() {
+        UnexpectedExceptionInformation exceptionInformation = new UnexpectedExceptionInformation(
+                KeyVaultErrorException.class);
+        Class<? extends HttpResponseException> exceptionType = exceptionInformation.getExceptionType();
+        ReflectiveInvoker reflectiveInvoker = new ResponseExceptionConstructorCache().get(exceptionType,
+                exceptionInformation.getExceptionBodyType());
+        return reflectiveInvoker != null;
+    }
 }
diff --git a/integration-test-groups/azure/azure-key-vault/src/test/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultTest.java b/integration-test-groups/azure/azure-key-vault/src/test/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultTest.java
index 67a101fc68..04f4ad68dc 100644
--- a/integration-test-groups/azure/azure-key-vault/src/test/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultTest.java
+++ b/integration-test-groups/azure/azure-key-vault/src/test/java/org/apache/camel/quarkus/component/azure/key/vault/it/AzureKeyVaultTest.java
@@ -71,4 +71,11 @@ class AzureKeyVaultTest extends AbstractAzureKeyVaultTest {
         }
     }
 
+    @Test
+    void dynamicExceptionInstantiation() {
+        RestAssured.get("/azure-key-vault/exception/cache")
+                .then()
+                .statusCode(200)
+                .body(is("true"));
+    }
 }
diff --git a/integration-test-groups/azure/azure-servicebus/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusResource.java b/integration-test-groups/azure/azure-servicebus/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusResource.java
index e7312828b4..74a3249c2f 100644
--- a/integration-test-groups/azure/azure-servicebus/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusResource.java
+++ b/integration-test-groups/azure/azure-servicebus/src/main/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusResource.java
@@ -26,7 +26,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
+import com.azure.core.exception.HttpResponseException;
+import com.azure.core.implementation.ReflectiveInvoker;
+import com.azure.core.implementation.http.UnexpectedExceptionInformation;
+import com.azure.core.implementation.http.rest.ResponseExceptionConstructorCache;
 import com.azure.core.util.BinaryData;
+import com.azure.messaging.servicebus.administration.implementation.models.ServiceBusManagementErrorException;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import jakarta.ws.rs.Consumes;
@@ -170,4 +175,16 @@ public class AzureServiceBusResource {
         LOG.infof("Stopping route: %s", routeId);
         context.getRouteController().stopRoute(routeId);
     }
+
+    @GET
+    @Path("exception/cache")
+    @Produces(MediaType.TEXT_PLAIN)
+    public boolean cachedHttpResponseException() {
+        UnexpectedExceptionInformation exceptionInformation = new UnexpectedExceptionInformation(
+                ServiceBusManagementErrorException.class);
+        Class<? extends HttpResponseException> exceptionType = exceptionInformation.getExceptionType();
+        ReflectiveInvoker reflectiveInvoker = new ResponseExceptionConstructorCache().get(exceptionType,
+                exceptionInformation.getExceptionBodyType());
+        return reflectiveInvoker != null;
+    }
 }
diff --git a/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java b/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java
index 6660ebbfc2..f922f7e782 100644
--- a/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java
+++ b/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java
@@ -355,6 +355,14 @@ class AzureServiceBusTest {
         }
     }
 
+    @Test
+    void dynamicExceptionInstantiation() {
+        RestAssured.get("/azure-servicebus/exception/cache")
+                .then()
+                .statusCode(200)
+                .body(is("true"));
+    }
+
     static Stream<Arguments> produceConsumeOptions() {
         String destinationTypes = "queue";
 
diff --git a/integration-test-groups/azure/azure-storage-blob/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobResource.java b/integration-test-groups/azure/azure-storage-blob/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobResource.java
index f93789156a..156af66d5d 100644
--- a/integration-test-groups/azure/azure-storage-blob/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobResource.java
+++ b/integration-test-groups/azure/azure-storage-blob/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobResource.java
@@ -30,9 +30,14 @@ import java.util.Map;
 import java.util.Random;
 import java.util.stream.Collectors;
 
+import com.azure.core.exception.HttpResponseException;
 import com.azure.core.http.rest.PagedIterable;
+import com.azure.core.implementation.ReflectiveInvoker;
+import com.azure.core.implementation.http.UnexpectedExceptionInformation;
+import com.azure.core.implementation.http.rest.ResponseExceptionConstructorCache;
 import com.azure.storage.blob.changefeed.models.BlobChangefeedEvent;
 import com.azure.storage.blob.changefeed.models.BlobChangefeedEventType;
+import com.azure.storage.blob.implementation.models.BlobStorageExceptionInternal;
 import com.azure.storage.blob.models.BlobContainerItem;
 import com.azure.storage.blob.models.BlobItem;
 import com.azure.storage.blob.models.BlobStorageException;
@@ -430,6 +435,18 @@ public class AzureStorageBlobResource {
         }
     }
 
+    @GET
+    @Path("exception/cache")
+    @Produces(MediaType.TEXT_PLAIN)
+    public boolean cachedHttpResponseException() {
+        UnexpectedExceptionInformation exceptionInformation = new UnexpectedExceptionInformation(
+                BlobStorageExceptionInternal.class);
+        Class<? extends HttpResponseException> exceptionType = exceptionInformation.getExceptionType();
+        ReflectiveInvoker reflectiveInvoker = new ResponseExceptionConstructorCache().get(exceptionType,
+                exceptionInformation.getExceptionBodyType());
+        return reflectiveInvoker != null;
+    }
+
     private void extractBlockNames(JsonObjectBuilder builder, List<Block> blocks, BlockListType listType) {
         JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
         blocks.stream().map(Block::getName).forEach(arrayBuilder::add);
diff --git a/integration-test-groups/azure/azure-storage-blob/src/test/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobTest.java b/integration-test-groups/azure/azure-storage-blob/src/test/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobTest.java
index 3ec86637f2..ec7f2f59a9 100644
--- a/integration-test-groups/azure/azure-storage-blob/src/test/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobTest.java
+++ b/integration-test-groups/azure/azure-storage-blob/src/test/java/org/apache/camel/quarkus/component/azure/storage/blob/it/AzureStorageBlobTest.java
@@ -602,4 +602,12 @@ class AzureStorageBlobTest {
                     .statusCode(anyOf(is(204), is(404)));
         }
     }
+
+    @Test
+    public void dynamicExceptionInstantiation() {
+        RestAssured.get("/azure-storage-blob/exception/cache")
+                .then()
+                .statusCode(200)
+                .body(is("true"));
+    }
 }
diff --git a/integration-test-groups/azure/azure-storage-queue/src/main/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueResource.java b/integration-test-groups/azure/azure-storage-queue/src/main/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueResource.java
index 9b2c4f9461..06059a05f7 100644
--- a/integration-test-groups/azure/azure-storage-queue/src/main/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueResource.java
+++ b/integration-test-groups/azure/azure-storage-queue/src/main/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueResource.java
@@ -23,12 +23,17 @@ import java.util.List;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
+import com.azure.core.exception.HttpResponseException;
 import com.azure.core.http.policy.HttpLogDetailLevel;
 import com.azure.core.http.policy.HttpLogOptions;
+import com.azure.core.implementation.ReflectiveInvoker;
+import com.azure.core.implementation.http.UnexpectedExceptionInformation;
+import com.azure.core.implementation.http.rest.ResponseExceptionConstructorCache;
 import com.azure.core.util.BinaryData;
 import com.azure.storage.common.StorageSharedKeyCredential;
 import com.azure.storage.queue.QueueServiceClient;
 import com.azure.storage.queue.QueueServiceClientBuilder;
+import com.azure.storage.queue.implementation.models.QueueStorageExceptionInternal;
 import com.azure.storage.queue.models.PeekedMessageItem;
 import com.azure.storage.queue.models.QueueItem;
 import com.azure.storage.queue.models.QueueMessageItem;
@@ -223,6 +228,18 @@ public class AzureStorageQueueResource {
                 .collect(Collectors.joining("\n"));
     }
 
+    @GET
+    @Path("exception/cache")
+    @Produces(MediaType.TEXT_PLAIN)
+    public boolean cachedHttpResponseException() {
+        UnexpectedExceptionInformation exceptionInformation = new UnexpectedExceptionInformation(
+                QueueStorageExceptionInternal.class);
+        Class<? extends HttpResponseException> exceptionType = exceptionInformation.getExceptionType();
+        ReflectiveInvoker reflectiveInvoker = new ResponseExceptionConstructorCache().get(exceptionType,
+                exceptionInformation.getExceptionBodyType());
+        return reflectiveInvoker != null;
+    }
+
     private String componentUri(final QueueOperationDefinition operation) {
         return String.format("azure-storage-queue://%s/%s?operation=%s",
                 azureStorageAccountName, QUEUE_NAME,
diff --git a/integration-test-groups/azure/azure-storage-queue/src/test/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueTest.java b/integration-test-groups/azure/azure-storage-queue/src/test/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueTest.java
index 91e1c69130..a18c60357d 100644
--- a/integration-test-groups/azure/azure-storage-queue/src/test/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueTest.java
+++ b/integration-test-groups/azure/azure-storage-queue/src/test/java/org/apache/camel/quarkus/component/azure/storage/queue/it/AzureStorageQueueTest.java
@@ -177,4 +177,11 @@ class AzureStorageQueueTest {
                 .as(List.class);
     }
 
+    @Test
+    public void dynamicExceptionInstantiation() {
+        RestAssured.get("/azure-storage-queue/exception/cache")
+                .then()
+                .statusCode(200)
+                .body(is("true"));
+    }
 }


(camel-quarkus) 01/03: Fixes #7211 Enable ssh eddsa test for RHEL

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 73f38c4f242f98e175cecb095064484cbfe9ab33
Author: JiriOndrusek <on...@gmail.com>
AuthorDate: Tue Apr 29 16:13:22 2025 +0200

    Fixes #7211 Enable ssh eddsa test for RHEL
---
 integration-tests/ssh/README.adoc                            | 12 ++++++++++++
 .../org/apache/camel/quarkus/component/ssh/it/SshTest.java   |  2 --
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/integration-tests/ssh/README.adoc b/integration-tests/ssh/README.adoc
new file mode 100644
index 0000000000..7479dc32f9
--- /dev/null
+++ b/integration-tests/ssh/README.adoc
@@ -0,0 +1,12 @@
+== Ssh integration tests
+
+=== Testing on RHEL8
+
+Native image (based on UBI9 by default) requires `GLIBC 2.33`, which is not present on RHEL8.
+Please use native image based on `ubi8` for the native build in RHEL8. (For example `ubi-quarkus-mandrel-builder-image:jdk-21`)
+
+Example (via property in cmd):
+[source,shell]
+----
+mvn clean verify -Pntive -Ddocker  -f integration-tests/ssh  -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:jdk-21
+----
\ No newline at end of file
diff --git a/integration-tests/ssh/src/test/java/org/apache/camel/quarkus/component/ssh/it/SshTest.java b/integration-tests/ssh/src/test/java/org/apache/camel/quarkus/component/ssh/it/SshTest.java
index 2789a15c7d..30da31ee8d 100644
--- a/integration-tests/ssh/src/test/java/org/apache/camel/quarkus/component/ssh/it/SshTest.java
+++ b/integration-tests/ssh/src/test/java/org/apache/camel/quarkus/component/ssh/it/SshTest.java
@@ -26,7 +26,6 @@ import io.smallrye.certs.Format;
 import io.smallrye.certs.junit5.Certificate;
 import org.apache.camel.component.ssh.SshConstants;
 import org.apache.camel.quarkus.test.DisabledIfFipsMode;
-import org.apache.camel.quarkus.test.DisabledOnRhel;
 import org.apache.camel.quarkus.test.support.certificate.TestCertificates;
 import org.hamcrest.Matchers;
 import org.junit.jupiter.api.Test;
@@ -116,7 +115,6 @@ class SshTest {
     }
 
     @DisabledIfFipsMode //ED25519 keys are not allowed in FIPS mode
-    @DisabledOnRhel(since = 8) //DSA is deprecated on RHEL8+, see https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/8.4_release_notes/deprecated_functionality#deprecated-functionality_security
     @Test
     public void testProducerWithEdDSAKeyType() {
         RestAssured.given()


(camel-quarkus) 02/03: fixes #7317 Longer interval for azureServiceBus.scheduled

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 57753fc551603829b7883d0e8b86a60fb94a9fe9
Author: JiriOndrusek <on...@gmail.com>
AuthorDate: Tue Apr 29 16:14:14 2025 +0200

    fixes #7317 Longer interval for azureServiceBus.scheduled
---
 .../component/azure/servicebus/it/AzureServiceBusTest.java    | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java b/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java
index 1634c3deb3..6660ebbfc2 100644
--- a/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java
+++ b/integration-test-groups/azure/azure-servicebus/src/test/java/org/apache/camel/quarkus/component/azure/servicebus/it/AzureServiceBusTest.java
@@ -264,9 +264,9 @@ class AzureServiceBusTest {
                     .then()
                     .statusCode(204);
 
-            // Schedule message for 10 seconds in the future
+            // Schedule message for 15 seconds in the future
             long scheduledEnqueueTime = Instant.now()
-                    .plus(Duration.of(10, ChronoUnit.SECONDS))
+                    .plus(Duration.of(15, ChronoUnit.SECONDS))
                     .toEpochMilli();
 
             RestAssured.given()
@@ -279,7 +279,9 @@ class AzureServiceBusTest {
                     .then()
                     .statusCode(201);
 
-            while (Instant.now().toEpochMilli() < scheduledEnqueueTime) {
+            //we are checking that there is no message in the next 10 seconds.
+            //we should rather avoid checking the message near the scheduled time, because process can be delayed and receives the message
+            while (Instant.now().toEpochMilli() < (scheduledEnqueueTime - 5000)) {
                 // No message should be received before the scheduled time
                 RestAssured.given()
                         .queryParam("endpointUri", "mock:servicebus-queue-scheduled-consumer-results")
@@ -288,7 +290,8 @@ class AzureServiceBusTest {
                         .statusCode(200)
                         .body("size()", is(0));
                 try {
-                    Thread.sleep(250);
+                    //wait those 5 seconds, we were not checking
+                    Thread.sleep(5250);
                 } catch (InterruptedException e) {
                     Thread.currentThread().interrupt();
                 }