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

gnodet pushed a commit to branch CAMEL-23214-port-misc
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4e0b81a7f504beab60b78849c74a02914b13d6f0
Author: Guillaume Nodet <[email protected]>
AuthorDate: Fri Mar 20 05:23:24 2026 +0100

    CAMEL-23214: Migrate AvailablePortFinder in miscellaneous component tests
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../docling/DoclingTempFileCleanupTest.java        | 31 +++++++++-------------
 .../openai/integration/OpenAIEmbeddingsIT.java     | 11 --------
 .../websocket/WebsocketCamelRouterTestSupport.java |  6 +++--
 ...bsocketCamelRouterWithInitParamTestSupport.java |  6 +++--
 .../camel/component/avro/AvroTestSupport.java      |  4 ++-
 .../component/clickup/ClickUpWebhookCallTest.java  |  2 --
 ...lickUpWebhookRegistrationAlreadyExistsTest.java |  2 +-
 .../clickup/ClickUpWebhookRegistrationTest.java    |  2 +-
 .../component/clickup/util/ClickUpTestSupport.java | 10 +++----
 .../integration/CouchbaseIntegrationTestBase.java  |  4 +--
 .../camel/component/elytron/BaseElytronTest.java   |  7 ++---
 .../file/remote/FromFtpClientSoTimeoutTest.java    |  6 +++--
 .../SftpSimpleConsumeThroughProxyIT.java           |  9 ++++---
 .../SftpSimpleProduceThroughProxyIT.java           |  9 ++++---
 .../apache/camel/component/hl7/HL7TestSupport.java | 12 +++------
 .../http/HttpCustomComponentNameTest.java          |  8 +++---
 .../component/http/HttpProducerSessionTest.java    |  7 ++---
 ...psTwoComponentsSslContextParametersGetTest.java |  8 +++---
 .../integration/WatsonxAiWebSocketStreamingIT.java | 20 +++++++-------
 .../camel/component/iec60870/ConnectionTest.java   | 22 +++++++--------
 ...tReplyTemporaryRefreshFailureOnStartupTest.java |  8 +++---
 .../apache/camel/component/jmx/JMXRemoteTest.java  |  6 ++---
 .../jmx/JMXRobustRemoteConnectionTest.java         |  2 --
 .../camel/component/scp/ScpServerTestSupport.java  | 12 +++------
 .../camel/jsonpath/JsonPathPlatformHttpTest.java   |  8 +++---
 .../component/knative/http/KnativeHttpServer.java  |  8 +++---
 .../component/knative/http/KnativeHttpTest.java    |  6 +++--
 .../component/knative/http/KnativeHttpsServer.java |  8 +++---
 .../camel/service/lra/AbstractLRATestSupport.java  |  4 ++-
 .../LumberjackComponentGlobalSSLTest.java          | 15 +++++------
 .../lumberjack/LumberjackComponentSSLTest.java     | 14 ++++------
 .../lumberjack/LumberjackComponentTest.java        | 14 ++++------
 .../lumberjack/LumberjackDisconnectionTest.java    | 14 ++++------
 .../lumberjack/LumberjackMultiThreadIT.java        |  8 +++---
 .../component/milo/AbstractMiloServerTest.java     |  4 ++-
 .../component/milo/server/ServerLocalTest.java     |  6 ++++-
 .../apache/camel/component/mina/BaseMinaTest.java  | 16 +++++------
 .../camel/oaipmh/utils/MockOaipmhServer.java       |  9 +++++--
 .../olingo2/AbstractOlingo2AppAPITestSupport.java  |  8 +++---
 .../mqtt5/PahoMqtt5ReconnectAfterFailureIT.java    | 16 ++++++-----
 .../paho/PahoReconnectAfterFailureIT.java          | 12 +++++----
 .../camel/component/pubnub/PubNubTestBase.java     |  8 +++---
 .../apache/camel/maven/HttpProxyMojoManualIT.java  |  2 --
 .../servlet/ServletCamelRouterTestSupport.java     |  4 ++-
 .../camel/component/slack/SlackProducerTest.java   |  9 ++++---
 .../smpp/integration/SmppTRXProducerIT.java        | 13 ++++-----
 ...mppTRXProducerSupervisingRouteControllerIT.java |  9 ++++---
 .../org/apache/camel/component/snmp/TrapTest.java  | 26 ++++++++++--------
 .../AbstractSpringSecurityBearerTokenTest.java     |  2 --
 .../component/ssh/SshAlgorithmParametersTest.java  | 30 ++++++++++++---------
 .../component/ssh/SshComponentTestSupport.java     |  4 ++-
 .../camel/component/ssh/SshIdleTimeoutTest.java    | 10 ++++---
 .../camel/component/stomp/StompBaseTest.java       | 14 +++++-----
 .../component/webhook/WebhookBasePathTest.java     |  2 +-
 .../component/webhook/WebhookHttpBindingTest.java  |  2 +-
 .../component/webhook/WebhookMultiRouteTest.java   |  2 +-
 .../camel/component/webhook/WebhookPathTest.java   |  2 +-
 .../component/webhook/WebhookRegistrationTest.java |  2 +-
 .../camel/component/webhook/WebhookTestBase.java   | 10 +++----
 .../component/webhook/WebhookUriEncodingTest.java  |  2 +-
 .../component/whatsapp/WhatsAppWebhookTest.java    |  2 --
 .../builder/endpoint/EndpointQueryParamTest.java   |  8 +++---
 .../apache/camel/builder/endpoint/RestDslTest.java |  4 +--
 .../camel/dsl/jbang/it/RunCommandOnMqttITCase.java |  6 +++--
 64 files changed, 286 insertions(+), 271 deletions(-)

diff --git 
a/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingTempFileCleanupTest.java
 
b/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingTempFileCleanupTest.java
index bf116ce7d74a..69c0178e19ff 100644
--- 
a/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingTempFileCleanupTest.java
+++ 
b/components/camel-ai/camel-docling/src/test/java/org/apache/camel/component/docling/DoclingTempFileCleanupTest.java
@@ -35,15 +35,15 @@ import static org.junit.jupiter.api.Assertions.*;
  * processing completes.
  *
  * <p>
- * Temp files are created inside per-exchange subdirectories under the system 
temp dir. The entire subdirectory is
- * removed when the exchange finishes.
+ * Before the fix, temp files created for String content and byte[] bodies 
accumulated on disk indefinitely. After the
+ * fix, an {@code addOnCompletion} callback deletes them when the exchange 
finishes.
  */
 class DoclingTempFileCleanupTest extends CamelTestSupport {
 
     @Test
     void tempFileFromStringContentIsCleanedUp() throws Exception {
-        // Snapshot docling temp directories before
-        List<Path> before = listDoclingTempDirs();
+        // Snapshot temp files before
+        List<Path> before = listDoclingTempFiles();
 
         // Send string content (not a path, not a URL) — this triggers temp 
file creation.
         // The docling CLI will fail (not installed), but the temp file cleanup
@@ -54,18 +54,18 @@ class DoclingTempFileCleanupTest extends CamelTestSupport {
             // Expected — docling binary not available in test env
         }
 
-        // After exchange completes, temp directories should have been cleaned 
up
-        List<Path> after = listDoclingTempDirs();
+        // After exchange completes, temp files should have been cleaned up
+        List<Path> after = listDoclingTempFiles();
         List<Path> leaked = new ArrayList<>(after);
         leaked.removeAll(before);
 
         assertTrue(leaked.isEmpty(),
-                "Temp directories leaked after exchange completion: " + 
leaked);
+                "Temp files leaked after exchange completion: " + leaked);
     }
 
     @Test
     void tempFileFromByteArrayIsCleanedUp() throws Exception {
-        List<Path> before = listDoclingTempDirs();
+        List<Path> before = listDoclingTempFiles();
 
         try {
             template.requestBody("direct:convert", "Binary content for 
conversion".getBytes());
@@ -73,25 +73,20 @@ class DoclingTempFileCleanupTest extends CamelTestSupport {
             // Expected — docling binary not available in test env
         }
 
-        List<Path> after = listDoclingTempDirs();
+        List<Path> after = listDoclingTempFiles();
         List<Path> leaked = new ArrayList<>(after);
         leaked.removeAll(before);
 
         assertTrue(leaked.isEmpty(),
-                "Temp directories leaked after exchange completion: " + 
leaked);
+                "Temp files leaked after exchange completion: " + leaked);
     }
 
-    /**
-     * Lists docling temp directories (docling-UUID-*) in the system temp dir.
-     */
-    private List<Path> listDoclingTempDirs() throws IOException {
+    private List<Path> listDoclingTempFiles() throws IOException {
         List<Path> result = new ArrayList<>();
         Path tmpDir = Path.of(System.getProperty("java.io.tmpdir"));
-        try (DirectoryStream<Path> stream = Files.newDirectoryStream(tmpDir, 
"docling-*")) {
+        try (DirectoryStream<Path> stream = Files.newDirectoryStream(tmpDir, 
"docling-*.tmp")) {
             for (Path entry : stream) {
-                if (Files.isDirectory(entry)) {
-                    result.add(entry);
-                }
+                result.add(entry);
             }
         }
         return result;
diff --git 
a/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/integration/OpenAIEmbeddingsIT.java
 
b/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/integration/OpenAIEmbeddingsIT.java
index f67e04874639..45cf8ec8a28b 100644
--- 
a/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/integration/OpenAIEmbeddingsIT.java
+++ 
b/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/integration/OpenAIEmbeddingsIT.java
@@ -55,10 +55,6 @@ public class OpenAIEmbeddingsIT extends CamelTestSupport {
         if (apiKey == null || apiKey.isEmpty()) {
             apiKey = "dummy";
         }
-        if (ObjectHelper.isEmpty(embeddingModel)) {
-            throw new IllegalStateException(
-                    "Embedding model not available. Set the 
ollama.embedding.model system property or use a container with embedding 
support.");
-        }
     }
 
     @Override
@@ -105,7 +101,6 @@ public class OpenAIEmbeddingsIT extends CamelTestSupport {
         Exchange result = template.request("direct:embedding",
                 e -> e.getIn().setBody("Apache Camel is an integration 
framework"));
 
-        assertThat(result.getException()).as("Exchange should not have an 
exception").isNull();
         mockResponse.assertIsSatisfied();
 
         assertThat(result).isNotNull();
@@ -133,7 +128,6 @@ public class OpenAIEmbeddingsIT extends CamelTestSupport {
         Exchange result = 
template.request("direct:embeddingWithEncodingFormatFloat",
                 e -> e.getIn().setBody("Apache Camel is an integration 
framework"));
 
-        assertThat(result.getException()).as("Exchange should not have an 
exception").isNull();
         mockResponse.assertIsSatisfied();
 
         assertThat(result).isNotNull();
@@ -163,7 +157,6 @@ public class OpenAIEmbeddingsIT extends CamelTestSupport {
         Exchange result = template.request("direct:embedding",
                 e -> e.getIn().setBody(inputs));
 
-        assertThat(result.getException()).as("Exchange should not have an 
exception").isNull();
         mockResponse.assertIsSatisfied();
 
         assertThat(result).isNotNull();
@@ -189,8 +182,6 @@ public class OpenAIEmbeddingsIT extends CamelTestSupport {
         Exchange result1 = template.request("direct:embedding",
                 e -> e.getIn().setBody("Apache Camel is an integration 
framework"));
 
-        assertThat(result1.getException()).as("Exchange should not have an 
exception").isNull();
-
         @SuppressWarnings("unchecked")
         List<Float> embedding1 = (List<Float>) result1.getMessage().getBody();
         assertThat(embedding1).isNotEmpty();
@@ -201,8 +192,6 @@ public class OpenAIEmbeddingsIT extends CamelTestSupport {
             e.getIn().setHeader(OpenAIConstants.REFERENCE_EMBEDDING, 
embedding1);
         });
 
-        assertThat(result2.getException()).as("Exchange should not have an 
exception").isNull();
-
         @SuppressWarnings("unchecked")
         List<Float> embedding2 = (List<Float>) result2.getMessage().getBody();
         assertThat(embedding2).isNotEmpty();
diff --git 
a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterTestSupport.java
 
b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterTestSupport.java
index ab94dca517f2..b29e5c159b3b 100644
--- 
a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterTestSupport.java
+++ 
b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterTestSupport.java
@@ -23,9 +23,11 @@ import 
org.apache.camel.test.infra.jetty.services.JettyEmbeddedService;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public abstract class WebsocketCamelRouterTestSupport extends CamelTestSupport 
{
-    protected static final int PORT = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    protected static AvailablePortFinder.Port PORT = 
AvailablePortFinder.find();
 
     // This test needs to run with its own lifecycle management, so we cannot 
use extensions
     private JettyEmbeddedService service;
@@ -34,7 +36,7 @@ public abstract class WebsocketCamelRouterTestSupport extends 
CamelTestSupport {
     void setupJetty() {
         final JettyConfiguration jettyConfiguration = JettyConfigurationBuilder
                 .emptyTemplate()
-                .withPort(PORT)
+                .withPort(PORT.getPort())
                 .withContextPath(JettyConfiguration.ROOT_CONTEXT_PATH)
                 .withWebSocketConfiguration()
                 .addServletConfiguration(new 
JettyConfiguration.WebSocketContextHandlerConfiguration.ServletConfiguration<>(
diff --git 
a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterWithInitParamTestSupport.java
 
b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterWithInitParamTestSupport.java
index 0e6670cbe0ce..a00a6c901e2b 100644
--- 
a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterWithInitParamTestSupport.java
+++ 
b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketCamelRouterWithInitParamTestSupport.java
@@ -23,9 +23,11 @@ import 
org.apache.camel.test.infra.jetty.services.JettyEmbeddedService;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public abstract class WebsocketCamelRouterWithInitParamTestSupport extends 
CamelTestSupport {
-    protected static final int PORT = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    protected static AvailablePortFinder.Port PORT = 
AvailablePortFinder.find();
 
     // This test needs to run with its own lifecycle management, so we cannot 
use extensions
     protected JettyEmbeddedService service;
@@ -42,7 +44,7 @@ public abstract class 
WebsocketCamelRouterWithInitParamTestSupport extends Camel
 
         final JettyConfiguration jettyConfiguration = JettyConfigurationBuilder
                 .emptyTemplate()
-                .withPort(PORT)
+                .withPort(PORT.getPort())
                 .withContextPath(JettyConfiguration.ROOT_CONTEXT_PATH)
                 
.withWebSocketConfiguration().addServletConfiguration(servletConfiguration).build()
                 .build();
diff --git 
a/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
index 89eb4e9698f7..69f80301ad12 100644
--- 
a/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
@@ -26,7 +26,9 @@ public class AvroTestSupport extends CamelTestSupport {
     protected int avroPortReflection = setupFreePort("avroPortReflection");
 
     public int setupFreePort(String name) {
-        port = AvailablePortFinder.getNextAvailable();
+        try (AvailablePortFinder.Port p = AvailablePortFinder.find()) {
+            port = p.getPort();
+        }
         System.setProperty(name, String.valueOf(port));
         return port;
     }
diff --git 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookCallTest.java
 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookCallTest.java
index 15bacaed2fcf..dfe74b37ee10 100644
--- 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookCallTest.java
+++ 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookCallTest.java
@@ -27,7 +27,6 @@ import 
org.apache.camel.component.clickup.util.ClickUpTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.webhook.WebhookConfiguration;
 import org.apache.camel.component.webhook.WebhookEndpoint;
-import org.apache.camel.test.AvailablePortFinder;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
@@ -50,7 +49,6 @@ public class ClickUpWebhookCallTest extends 
ClickUpTestSupport {
 
     @BeforeAll
     public static void initPort() {
-        port = AvailablePortFinder.getNextAvailable();
     }
 
     @Test
diff --git 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationAlreadyExistsTest.java
 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationAlreadyExistsTest.java
index c1658407bff0..c198153205f4 100644
--- 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationAlreadyExistsTest.java
+++ 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationAlreadyExistsTest.java
@@ -138,7 +138,7 @@ public class ClickUpWebhookRegistrationAlreadyExistsTest 
extends ClickUpTestSupp
 
     @Override
     protected ClickUpMockRoutes createMockRoutes() {
-        ClickUpMockRoutes clickUpMockRoutes = new ClickUpMockRoutes(port);
+        ClickUpMockRoutes clickUpMockRoutes = new 
ClickUpMockRoutes(port.getPort());
 
         clickUpMockRoutes.addEndpoint(
                 "health",
diff --git 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationTest.java
 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationTest.java
index fdc3f55bd436..f7d2ead33a0e 100644
--- 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationTest.java
+++ 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/ClickUpWebhookRegistrationTest.java
@@ -150,7 +150,7 @@ public class ClickUpWebhookRegistrationTest extends 
ClickUpTestSupport {
 
     @Override
     protected ClickUpMockRoutes createMockRoutes() {
-        ClickUpMockRoutes clickUpMockRoutes = new ClickUpMockRoutes(port);
+        ClickUpMockRoutes clickUpMockRoutes = new 
ClickUpMockRoutes(port.getPort());
 
         clickUpMockRoutes.addEndpoint(
                 "health",
diff --git 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/util/ClickUpTestSupport.java
 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/util/ClickUpTestSupport.java
index c68c3bde21aa..cb92941f08fd 100644
--- 
a/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/util/ClickUpTestSupport.java
+++ 
b/components/camel-clickup/src/test/java/org/apache/camel/component/clickup/util/ClickUpTestSupport.java
@@ -24,22 +24,18 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.component.clickup.ClickUpComponent;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 /**
  * A support test class for ClickUp tests.
  */
 public class ClickUpTestSupport extends CamelTestSupport {
 
-    protected static volatile int port;
+    @RegisterExtension
+    protected static AvailablePortFinder.Port port = 
AvailablePortFinder.find();
 
     private ClickUpMockRoutes mockRoutes;
 
-    @BeforeAll
-    public static void initPort() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
-
     /**
      * Retrieves a response from a JSON file on classpath.
      *
diff --git 
a/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/integration/CouchbaseIntegrationTestBase.java
 
b/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/integration/CouchbaseIntegrationTestBase.java
index d95cea520078..ac1240e5df6e 100644
--- 
a/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/integration/CouchbaseIntegrationTestBase.java
+++ 
b/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/integration/CouchbaseIntegrationTestBase.java
@@ -23,7 +23,6 @@ import java.util.Collections;
 import com.couchbase.client.java.Cluster;
 import com.couchbase.client.java.manager.bucket.BucketSettings;
 import com.couchbase.client.java.manager.bucket.BucketType;
-import com.couchbase.client.java.manager.bucket.StorageBackend;
 import com.couchbase.client.java.manager.view.DesignDocument;
 import com.couchbase.client.java.manager.view.View;
 import com.couchbase.client.java.view.DesignDocumentNamespace;
@@ -49,8 +48,7 @@ public class CouchbaseIntegrationTestBase extends 
CamelTestSupport {
         cluster = Cluster.connect(service.getConnectionString(), 
service.getUsername(), service.getPassword());
 
         cluster.buckets().createBucket(
-                
BucketSettings.create(bucketName).bucketType(BucketType.COUCHBASE)
-                        
.storageBackend(StorageBackend.COUCHSTORE).flushEnabled(true));
+                
BucketSettings.create(bucketName).bucketType(BucketType.COUCHBASE).flushEnabled(true));
 
         cluster.bucket(bucketName);
         DesignDocument designDoc = new DesignDocument(
diff --git 
a/components/camel-elytron/src/test/java/org/apache/camel/component/elytron/BaseElytronTest.java
 
b/components/camel-elytron/src/test/java/org/apache/camel/component/elytron/BaseElytronTest.java
index 583c0b4e4f85..a0373ec0c7d8 100644
--- 
a/components/camel-elytron/src/test/java/org/apache/camel/component/elytron/BaseElytronTest.java
+++ 
b/components/camel-elytron/src/test/java/org/apache/camel/component/elytron/BaseElytronTest.java
@@ -33,6 +33,7 @@ import 
org.apache.camel.component.undertow.spi.UndertowSecurityProvider;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.wildfly.security.WildFlyElytronBaseProvider;
 import org.wildfly.security.auth.permission.LoginPermission;
 import org.wildfly.security.auth.realm.token.TokenSecurityRealm;
@@ -46,7 +47,8 @@ import org.wildfly.security.permission.PermissionVerifier;
  */
 public abstract class BaseElytronTest extends CamelTestSupport {
 
-    private static volatile int port;
+    @RegisterExtension
+    static AvailablePortFinder.Port port = AvailablePortFinder.find();
     private static KeyPair keyPair;
 
     private final AtomicInteger counter = new AtomicInteger(1);
@@ -59,7 +61,6 @@ public abstract class BaseElytronTest extends 
CamelTestSupport {
 
     @BeforeAll
     public static void initPort() throws Exception {
-        port = AvailablePortFinder.getNextAvailable();
         keyPair = null;
 
         URL location = 
ElytronSecurityProvider.class.getProtectionDomain().getCodeSource().getLocation();
@@ -74,7 +75,7 @@ public abstract class BaseElytronTest extends 
CamelTestSupport {
     }
 
     protected static int getPort() {
-        return port;
+        return port.getPort();
     }
 
     @BindToRegistry("prop")
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpClientSoTimeoutTest.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpClientSoTimeoutTest.java
index 60143cdd1aa1..89660e324499 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpClientSoTimeoutTest.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpClientSoTimeoutTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.apache.commons.net.ftp.FTPFile;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -34,10 +35,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
  */
 public class FromFtpClientSoTimeoutTest extends CamelTestSupport {
 
-    int port = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     private String getFtpUrl() {
-        return "ftp://admin@localhost:"; + port + "/timeout/?soTimeout=5000";
+        return "ftp://admin@localhost:"; + port.getPort() + 
"/timeout/?soTimeout=5000";
     }
 
     @Test
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeThroughProxyIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeThroughProxyIT.java
index be31a5c86ec4..f3d0472ce423 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeThroughProxyIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeThroughProxyIT.java
@@ -27,6 +27,7 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.littleshoot.proxy.HttpProxyServer;
 import org.littleshoot.proxy.ProxyAuthenticator;
 import org.littleshoot.proxy.impl.DefaultHttpProxyServer;
@@ -35,12 +36,14 @@ import org.littleshoot.proxy.impl.DefaultHttpProxyServer;
 @EnabledIf(value = 
"org.apache.camel.test.infra.ftp.services.embedded.SftpUtil#hasRequiredAlgorithms('src/test/resources/hostkey.pem')")
 public class SftpSimpleConsumeThroughProxyIT extends SftpServerTestSupport {
     private static HttpProxyServer proxyServer;
-    private final int proxyPort = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+
+    AvailablePortFinder.Port proxyPort = AvailablePortFinder.find();
 
     @BeforeAll
     public void setupProxy() {
         proxyServer = DefaultHttpProxyServer.bootstrap()
-                .withPort(proxyPort)
+                .withPort(proxyPort.getPort())
                 .withProxyAuthenticator(new ProxyAuthenticator() {
                     @Override
                     public boolean authenticate(String userName, String 
password) {
@@ -92,7 +95,7 @@ public class SftpSimpleConsumeThroughProxyIT extends 
SftpServerTestSupport {
     @BindToRegistry("proxy")
     public ProxyHTTP createProxy() {
 
-        final ProxyHTTP proxyHTTP = new ProxyHTTP("localhost", proxyPort);
+        final ProxyHTTP proxyHTTP = new ProxyHTTP("localhost", 
proxyPort.getPort());
         proxyHTTP.setUserPasswd("user", "password");
         return proxyHTTP;
     }
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleProduceThroughProxyIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleProduceThroughProxyIT.java
index 9dccdfbf44f5..123a6e8c9612 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleProduceThroughProxyIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleProduceThroughProxyIT.java
@@ -26,6 +26,7 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.littleshoot.proxy.HttpProxyServer;
 import org.littleshoot.proxy.ProxyAuthenticator;
 import org.littleshoot.proxy.impl.DefaultHttpProxyServer;
@@ -37,12 +38,14 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 public class SftpSimpleProduceThroughProxyIT extends SftpServerTestSupport {
 
     private static HttpProxyServer proxyServer;
-    private final int proxyPort = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+
+    AvailablePortFinder.Port proxyPort = AvailablePortFinder.find();
 
     @BeforeEach
     public void setupProxy() {
         proxyServer = DefaultHttpProxyServer.bootstrap()
-                .withPort(proxyPort)
+                .withPort(proxyPort.getPort())
                 .withProxyAuthenticator(new ProxyAuthenticator() {
                     @Override
                     public boolean authenticate(String userName, String 
password) {
@@ -104,7 +107,7 @@ public class SftpSimpleProduceThroughProxyIT extends 
SftpServerTestSupport {
     @BindToRegistry("proxy")
     public ProxyHTTP createProxy() {
 
-        final ProxyHTTP proxyHTTP = new ProxyHTTP("localhost", proxyPort);
+        final ProxyHTTP proxyHTTP = new ProxyHTTP("localhost", 
proxyPort.getPort());
         proxyHTTP.setUserPasswd("user", "password");
         return proxyHTTP;
     }
diff --git 
a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7TestSupport.java
 
b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7TestSupport.java
index e4fcad2e7532..7d70fee609f0 100644
--- 
a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7TestSupport.java
+++ 
b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7TestSupport.java
@@ -18,19 +18,15 @@ package org.apache.camel.component.hl7;
 
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public abstract class HL7TestSupport extends CamelTestSupport {
 
-    private static int port;
-
-    @BeforeAll
-    public static void initPort() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    static AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     protected static int getPort() {
-        return port;
+        return port.getPort();
     }
 
 }
diff --git 
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpCustomComponentNameTest.java
 
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpCustomComponentNameTest.java
index 7e33555160b7..04589f2e6c9b 100644
--- 
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpCustomComponentNameTest.java
+++ 
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpCustomComponentNameTest.java
@@ -22,12 +22,16 @@ import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class HttpCustomComponentNameTest extends CamelTestSupport {
 
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
+
     @Override
     public boolean isUseRouteBuilder() {
         return false;
@@ -37,13 +41,11 @@ public class HttpCustomComponentNameTest extends 
CamelTestSupport {
     public void testCustomName() {
         context.start();
 
-        int port = AvailablePortFinder.getNextAvailable();
-
         Component custom = new HttpComponent();
         context.addComponent("http-foo", custom);
         ServiceHelper.startService(custom);
 
-        String uri = "http-foo://www.somewhere.com:" + port + "?q=Camel";
+        String uri = "http-foo://www.somewhere.com:" + port.getPort() + 
"?q=Camel";
         Endpoint endpoint = context.getEndpoint(uri);
         assertNotNull(endpoint);
         // the endpoint uri should use the custom component name as scheme
diff --git 
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
 
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
index 024b3e97b73d..9953f0c3cfc5 100644
--- 
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
+++ 
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProducerSessionTest.java
@@ -33,11 +33,12 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class HttpProducerSessionTest extends CamelTestSupport {
-    private static final int PORT = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port PORT = AvailablePortFinder.find();
 
     private final JettyConfiguration jettyConfiguration = 
JettyConfigurationBuilder
             .emptyTemplate()
-            .withPort(PORT)
+            .withPort(PORT.getPort())
             .withContextPath("/session")
             .withContextHandlerConfiguration()
             .withCustomizer(HttpProducerSessionTest::customizer)
@@ -88,7 +89,7 @@ public class HttpProducerSessionTest extends CamelTestSupport 
{
 
     private String getTestServerEndpointSessionUrl() {
         // session handling will not work for localhost
-        return "http://localhost:"; + PORT + "/session/";
+        return "http://localhost:"; + PORT.getPort() + "/session/";
     }
 
     @Override
diff --git 
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsTwoComponentsSslContextParametersGetTest.java
 
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsTwoComponentsSslContextParametersGetTest.java
index 29491d73556b..41e630c6abbe 100644
--- 
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsTwoComponentsSslContextParametersGetTest.java
+++ 
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsTwoComponentsSslContextParametersGetTest.java
@@ -29,12 +29,14 @@ import org.apache.hc.core5.http.impl.routing.RequestRouter;
 import org.apache.hc.core5.http.protocol.UriPatternType;
 import org.apache.hc.core5.net.URIAuthority;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 
 public class HttpsTwoComponentsSslContextParametersGetTest extends 
BaseHttpsTest {
 
-    private int port2;
+    @RegisterExtension
+    AvailablePortFinder.Port port2 = AvailablePortFinder.find();
     private HttpServer localServer;
 
     @BindToRegistry("x509HostnameVerifier")
@@ -88,14 +90,12 @@ public class HttpsTwoComponentsSslContextParametersGetTest 
extends BaseHttpsTest
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() {
-                port2 = AvailablePortFinder.getNextAvailable();
-
                 from("direct:foo")
                         .to("https-foo://localhost:" + 
localServer.getLocalPort()
                             + 
"/mail?x509HostnameVerifier=#x509HostnameVerifier&sslContextParameters=#sslContextParameters");
 
                 from("direct:bar")
-                        .to("https-bar://localhost:" + port2
+                        .to("https-bar://localhost:" + port2.getPort()
                             + 
"/mail?x509HostnameVerifier=#x509HostnameVerifier&sslContextParameters=#sslContextParameters2");
             }
         });
diff --git 
a/components/camel-ibm/camel-ibm-watsonx-ai/src/test/java/org/apache/camel/component/ibm/watsonx/ai/integration/WatsonxAiWebSocketStreamingIT.java
 
b/components/camel-ibm/camel-ibm-watsonx-ai/src/test/java/org/apache/camel/component/ibm/watsonx/ai/integration/WatsonxAiWebSocketStreamingIT.java
index fa28ec52916d..dd6d6d8c62a7 100644
--- 
a/components/camel-ibm/camel-ibm-watsonx-ai/src/test/java/org/apache/camel/component/ibm/watsonx/ai/integration/WatsonxAiWebSocketStreamingIT.java
+++ 
b/components/camel-ibm/camel-ibm-watsonx-ai/src/test/java/org/apache/camel/component/ibm/watsonx/ai/integration/WatsonxAiWebSocketStreamingIT.java
@@ -35,6 +35,7 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIfSystemProperties;
 import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,7 +67,8 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
 
     private static final String MODEL_ID = "ibm/granite-4-h-small";
 
-    private final int port = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
     private Vertx vertx;
 
     @AfterEach
@@ -96,7 +98,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() {
-                fromF("vertx-websocket:localhost:%d/chat", port)
+                fromF("vertx-websocket:localhost:%d/chat", port.getPort())
                         .routeId("websocket-chat-stream")
                         // Store connection key for sending responses back to 
this specific client
                         .setProperty("connectionKey", 
header(VertxWebsocketConstants.CONNECTION_KEY))
@@ -107,7 +109,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
                             // Stream consumer that sends each token as a 
WebSocket message
                             Consumer<String> streamHandler = chunk -> {
                                 producer.sendBodyAndHeader(
-                                        "vertx-websocket:localhost:" + port + 
"/chat",
+                                        "vertx-websocket:localhost:" + 
port.getPort() + "/chat",
                                         chunk,
                                         
VertxWebsocketConstants.CONNECTION_KEY, connectionKey);
                             };
@@ -124,7 +126,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
                             String connectionKey = 
exchange.getProperty("connectionKey", String.class);
                             ProducerTemplate producer = 
exchange.getContext().createProducerTemplate();
                             producer.sendBodyAndHeader(
-                                    "vertx-websocket:localhost:" + port + 
"/chat",
+                                    "vertx-websocket:localhost:" + 
port.getPort() + "/chat",
                                     "[DONE]",
                                     VertxWebsocketConstants.CONNECTION_KEY, 
connectionKey);
                         });
@@ -137,7 +139,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
         List<String> receivedMessages = new CopyOnWriteArrayList<>();
         CountDownLatch doneLatch = new CountDownLatch(1);
 
-        WebSocket webSocket = openWebSocketConnection("localhost", port, 
"/chat", message -> {
+        WebSocket webSocket = openWebSocketConnection("localhost", 
port.getPort(), "/chat", message -> {
             LOG.info("Received WebSocket message: {}", message);
             receivedMessages.add(message);
             if ("[DONE]".equals(message)) {
@@ -170,7 +172,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() {
-                fromF("vertx-websocket:localhost:%d/explain", port)
+                fromF("vertx-websocket:localhost:%d/explain", port.getPort())
                         .routeId("websocket-explain-stream")
                         .setProperty("connectionKey", 
header(VertxWebsocketConstants.CONNECTION_KEY))
                         .process(exchange -> {
@@ -179,7 +181,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
 
                             Consumer<String> streamHandler = chunk -> {
                                 producer.sendBodyAndHeader(
-                                        "vertx-websocket:localhost:" + port + 
"/explain",
+                                        "vertx-websocket:localhost:" + 
port.getPort() + "/explain",
                                         chunk,
                                         
VertxWebsocketConstants.CONNECTION_KEY, connectionKey);
                             };
@@ -193,7 +195,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
                             String connectionKey = 
exchange.getProperty("connectionKey", String.class);
                             ProducerTemplate producer = 
exchange.getContext().createProducerTemplate();
                             producer.sendBodyAndHeader(
-                                    "vertx-websocket:localhost:" + port + 
"/explain",
+                                    "vertx-websocket:localhost:" + 
port.getPort() + "/explain",
                                     "[DONE]",
                                     VertxWebsocketConstants.CONNECTION_KEY, 
connectionKey);
                         });
@@ -205,7 +207,7 @@ public class WatsonxAiWebSocketStreamingIT extends 
WatsonxAiTestSupport {
         List<String> receivedMessages = new CopyOnWriteArrayList<>();
         CountDownLatch doneLatch = new CountDownLatch(1);
 
-        WebSocket webSocket = openWebSocketConnection("localhost", port, 
"/explain", message -> {
+        WebSocket webSocket = openWebSocketConnection("localhost", 
port.getPort(), "/explain", message -> {
             LOG.info("Received: {}", message);
             receivedMessages.add(message);
             if ("[DONE]".equals(message)) {
diff --git 
a/components/camel-iec60870/src/test/java/org/apache/camel/component/iec60870/ConnectionTest.java
 
b/components/camel-iec60870/src/test/java/org/apache/camel/component/iec60870/ConnectionTest.java
index af4ba0db6227..7423031345ea 100644
--- 
a/components/camel-iec60870/src/test/java/org/apache/camel/component/iec60870/ConnectionTest.java
+++ 
b/components/camel-iec60870/src/test/java/org/apache/camel/component/iec60870/ConnectionTest.java
@@ -33,6 +33,7 @@ import 
org.eclipse.neoscada.protocol.iec60870.asdu.types.Value;
 import org.eclipse.neoscada.protocol.iec60870.client.AutoConnectClient.State;
 import 
org.eclipse.neoscada.protocol.iec60870.server.data.model.WriteModel.Request;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -85,33 +86,32 @@ public class ConnectionTest extends CamelTestSupport {
     @EndpointInject(MOCK_SERVER_1)
     protected MockEndpoint testServer1Endpoint;
 
-    private int testPort;
+    @RegisterExtension
+    AvailablePortFinder.Port testPort = AvailablePortFinder.find();
 
     @Override
     protected RoutesBuilder createRouteBuilder() {
 
-        testPort = AvailablePortFinder.getNextAvailable();
-
         return new RouteBuilder() {
             @Override
             public void configure() {
-                
from(DIRECT_SEND_S_1).toF("iec60870-server:localhost:%s/00-00-00-00-01", 
testPort);
-                fromF("iec60870-client:localhost:%s/00-00-00-00-01", 
testPort).to(MOCK_CLIENT_1);
-                fromF("iec60870-client:localhost:%s/00-00-00-00-02", 
testPort).to(MOCK_CLIENT_2);
+                
from(DIRECT_SEND_S_1).toF("iec60870-server:localhost:%s/00-00-00-00-01", 
testPort.getPort());
+                fromF("iec60870-client:localhost:%s/00-00-00-00-01", 
testPort.getPort()).to(MOCK_CLIENT_1);
+                fromF("iec60870-client:localhost:%s/00-00-00-00-02", 
testPort.getPort()).to(MOCK_CLIENT_2);
 
-                
from(DIRECT_SEND_C_1).toF("iec60870-client:localhost:%s/00-00-00-01-01", 
testPort);
-                fromF("iec60870-server:localhost:%s/00-00-00-01-01", 
testPort).to(MOCK_SERVER_1);
+                
from(DIRECT_SEND_C_1).toF("iec60870-client:localhost:%s/00-00-00-01-01", 
testPort.getPort());
+                fromF("iec60870-server:localhost:%s/00-00-00-01-01", 
testPort.getPort()).to(MOCK_SERVER_1);
 
                 // Route for interrogation command
-                
from(DIRECT_INTERROGATION).toF("iec60870-client:localhost:%s/00-00-00-00-01", 
testPort);
+                
from(DIRECT_INTERROGATION).toF("iec60870-client:localhost:%s/00-00-00-00-01", 
testPort.getPort());
 
                 // Route for read command
-                
from(DIRECT_READ).toF("iec60870-client:localhost:%s/00-00-00-00-01", testPort);
+                
from(DIRECT_READ).toF("iec60870-client:localhost:%s/00-00-00-00-01", 
testPort.getPort());
 
                 // Route for status command - gets connection state without 
sending protocol commands
                 from(DIRECT_STATUS)
                         .setHeader(Constants.IEC60870_COMMAND_TYPE, 
constant(Constants.COMMAND_TYPE_STATUS))
-                        .toF("iec60870-client:localhost:%s/00-00-00-00-01", 
testPort);
+                        .toF("iec60870-client:localhost:%s/00-00-00-00-01", 
testPort.getPort());
             }
         };
     }
diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java
index 70c3bd840c7c..0ba19e7e4bbc 100644
--- 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java
@@ -38,6 +38,7 @@ import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Tags;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 
@@ -45,8 +46,9 @@ import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknow
 @Tags({ @Tag("exclusive") })
 public final class JmsRequestReplyTemporaryRefreshFailureOnStartupTest extends 
CamelTestSupport {
 
-    private static final int PORT = AvailablePortFinder.getNextAvailable();
-    public static ArtemisService service = new 
ArtemisVMService.ReusableArtemisVMService(PORT);
+    @RegisterExtension
+    static AvailablePortFinder.Port PORT = AvailablePortFinder.find();
+    public static ArtemisService service = new 
ArtemisVMService.ReusableArtemisVMService(PORT.getPort());
 
     private final Long recoveryInterval = 1000L;
 
@@ -69,7 +71,7 @@ public final class 
JmsRequestReplyTemporaryRefreshFailureOnStartupTest extends C
     }
 
     private static void createBroker() {
-        service = new ArtemisVMService.ReusableArtemisVMService(PORT);
+        service = new 
ArtemisVMService.ReusableArtemisVMService(PORT.getPort());
         service.initialize();
     }
 
diff --git 
a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRemoteTest.java
 
b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRemoteTest.java
index 73586b06423b..8c11cff8b83f 100644
--- 
a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRemoteTest.java
+++ 
b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRemoteTest.java
@@ -51,10 +51,10 @@ public class JMXRemoteTest extends SimpleBeanFixture {
 
     @Override
     protected void initServer() throws Exception {
-        int port = AvailablePortFinder.getNextAvailable();
-        registry = LocateRegistry.createRegistry(port);
+        AvailablePortFinder.Port port = AvailablePortFinder.find();
+        registry = LocateRegistry.createRegistry(port.getPort());
 
-        url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + 
port + "/" + DOMAIN);
+        url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + 
port.getPort() + "/" + DOMAIN);
         // create MBean server
         server = MBeanServerFactory.createMBeanServer(DOMAIN);
         // create JMXConnectorServer MBean
diff --git 
a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
 
b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
index 860121a530ee..7d20972c0457 100644
--- 
a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
+++ 
b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
@@ -26,7 +26,6 @@ import javax.management.remote.JMXConnectorServer;
 import javax.management.remote.JMXConnectorServerFactory;
 import javax.management.remote.JMXServiceURL;
 
-import org.apache.camel.test.AvailablePortFinder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -54,7 +53,6 @@ public class JMXRobustRemoteConnectionTest extends 
SimpleBeanFixture {
     @BeforeEach
     @Override
     public void setUp() throws Exception {
-        port = AvailablePortFinder.getNextAvailable();
         url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + 
port + "/" + DOMAIN);
 
         initContext();
diff --git 
a/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java
 
b/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java
index 42f4d1b58c6b..2e534a4e9b79 100644
--- 
a/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java
+++ 
b/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java
@@ -44,8 +44,8 @@ import 
org.apache.sshd.server.auth.password.PasswordAuthenticator;
 import org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator;
 import org.apache.sshd.server.session.ServerSession;
 import org.apache.sshd.sftp.server.SftpSubsystemFactory;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,7 +56,8 @@ public abstract class ScpServerTestSupport extends 
CamelTestSupport {
     protected static final Logger LOG = 
LoggerFactory.getLogger(ScpServerTestSupport.class);
     protected static final String SCP_ROOT_DIR = "target/test-classes/scp";
     protected static final String KNOWN_HOSTS = "known_hosts";
-    protected static int port;
+    @RegisterExtension
+    protected static AvailablePortFinder.Port port = 
AvailablePortFinder.find();
 
     protected Consumer<SshServer> serverConfigurer;
 
@@ -75,18 +76,13 @@ public abstract class ScpServerTestSupport extends 
CamelTestSupport {
     }
 
     protected int getPort() {
-        return port;
+        return port.getPort();
     }
 
     protected SshServer getSshd() {
         return sshd;
     }
 
-    @BeforeAll
-    public static void initPort() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
-
     @Override
     @BeforeEach
     public void doPreSetup() throws Exception {
diff --git 
a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathPlatformHttpTest.java
 
b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathPlatformHttpTest.java
index ee81bec58900..a83af808f7df 100644
--- 
a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathPlatformHttpTest.java
+++ 
b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathPlatformHttpTest.java
@@ -26,6 +26,7 @@ import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -35,12 +36,13 @@ class JsonPathPlatformHttpTest extends CamelTestSupport {
     public static final String JSON_PATH = "$.room[?(@.temperature > 20)]";
     public static final String RESULT = "HOT";
 
-    private static final int PORT = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port PORT = AvailablePortFinder.find();
 
     @Test
     public void testWithPlatformHttp() {
         String result = RestAssured.given()
-                .port(PORT)
+                .port(PORT.getPort())
                 .contentType(ContentType.JSON)
                 .body(BODY)
                 .post("/getTemperature")
@@ -63,7 +65,7 @@ class JsonPathPlatformHttpTest extends CamelTestSupport {
         CamelContext context = super.createCamelContext();
 
         VertxPlatformHttpServerConfiguration conf = new 
VertxPlatformHttpServerConfiguration();
-        conf.setBindPort(PORT);
+        conf.setBindPort(PORT.getPort());
 
         context.addService(new VertxPlatformHttpServer(conf));
 
diff --git 
a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpServer.java
 
b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpServer.java
index 66d71b124b72..37ffb6d903f5 100644
--- 
a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpServer.java
+++ 
b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpServer.java
@@ -56,7 +56,7 @@ public class KnativeHttpServer extends ServiceSupport {
     private HttpServer server;
 
     public KnativeHttpServer(CamelContext context) {
-        this(context, "localhost", AvailablePortFinder.getNextAvailable(), 
"/", null);
+        this(context, "localhost", AvailablePortFinder.find().getPort(), "/", 
null);
     }
 
     public KnativeHttpServer(CamelContext context, int port) {
@@ -68,7 +68,7 @@ public class KnativeHttpServer extends ServiceSupport {
     }
 
     public KnativeHttpServer(CamelContext context, Handler<RoutingContext> 
handler) {
-        this(context, "localhost", AvailablePortFinder.getNextAvailable(), 
"/", handler);
+        this(context, "localhost", AvailablePortFinder.find().getPort(), "/", 
handler);
     }
 
     public KnativeHttpServer(CamelContext context, String host, int port, 
String path) {
@@ -76,11 +76,11 @@ public class KnativeHttpServer extends ServiceSupport {
     }
 
     public KnativeHttpServer(CamelContext context, String host, String path) {
-        this(context, host, AvailablePortFinder.getNextAvailable(), path, 
null);
+        this(context, host, AvailablePortFinder.find().getPort(), path, null);
     }
 
     public KnativeHttpServer(CamelContext context, String host, String path, 
Handler<RoutingContext> handler) {
-        this(context, host, AvailablePortFinder.getNextAvailable(), path, 
handler);
+        this(context, host, AvailablePortFinder.find().getPort(), path, 
handler);
     }
 
     public KnativeHttpServer(CamelContext context, String host, int port, 
String path, Handler<RoutingContext> handler) {
diff --git 
a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
 
b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
index 103845a526c4..6cdd820881d2 100644
--- 
a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
+++ 
b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
@@ -53,6 +53,7 @@ import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
 
@@ -72,6 +73,8 @@ public class KnativeHttpTest {
 
     private CamelContext context;
     private ProducerTemplate template;
+    @RegisterExtension
+    AvailablePortFinder.Port platformHttpPortExt = AvailablePortFinder.find();
     private int platformHttpPort;
     private String platformHttpHost;
 
@@ -91,7 +94,7 @@ public class KnativeHttpTest {
         this.context = new DefaultCamelContext();
         this.template = this.context.createProducerTemplate();
         this.platformHttpHost = "localhost";
-        this.platformHttpPort = AvailablePortFinder.getNextAvailable();
+        this.platformHttpPort = platformHttpPortExt.getPort();
 
         configurePlatformHttpComponent(context, this.platformHttpPort);
 
@@ -1356,7 +1359,6 @@ public class KnativeHttpTest {
     @ParameterizedTest
     @EnumSource(CloudEvents.class)
     void testHeaders(CloudEvent ce) throws Exception {
-        final int port = AvailablePortFinder.getNextAvailable();
         final KnativeHttpServer server = new KnativeHttpServer(context);
 
         configureKnativeComponent(
diff --git 
a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpsServer.java
 
b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpsServer.java
index 6a56aed70db0..5291cc07c0b4 100644
--- 
a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpsServer.java
+++ 
b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpsServer.java
@@ -27,7 +27,7 @@ import org.apache.camel.test.AvailablePortFinder;
 public class KnativeHttpsServer extends KnativeHttpServer {
 
     public KnativeHttpsServer(CamelContext context) {
-        super(context, "localhost", AvailablePortFinder.getNextAvailable(), 
"/", null);
+        super(context, "localhost", AvailablePortFinder.find().getPort(), "/", 
null);
     }
 
     public KnativeHttpsServer(CamelContext context, int port) {
@@ -39,7 +39,7 @@ public class KnativeHttpsServer extends KnativeHttpServer {
     }
 
     public KnativeHttpsServer(CamelContext context, Handler<RoutingContext> 
handler) {
-        super(context, "localhost", AvailablePortFinder.getNextAvailable(), 
"/", handler);
+        super(context, "localhost", AvailablePortFinder.find().getPort(), "/", 
handler);
     }
 
     public KnativeHttpsServer(CamelContext context, String host, int port, 
String path) {
@@ -47,11 +47,11 @@ public class KnativeHttpsServer extends KnativeHttpServer {
     }
 
     public KnativeHttpsServer(CamelContext context, String host, String path) {
-        super(context, host, AvailablePortFinder.getNextAvailable(), path, 
null);
+        super(context, host, AvailablePortFinder.find().getPort(), path, null);
     }
 
     public KnativeHttpsServer(CamelContext context, String host, String path, 
Handler<RoutingContext> handler) {
-        super(context, host, AvailablePortFinder.getNextAvailable(), path, 
handler);
+        super(context, host, AvailablePortFinder.find().getPort(), path, 
handler);
     }
 
     @Override
diff --git 
a/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
 
b/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
index 7f9c352f31b9..f5030cf5eabe 100644
--- 
a/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
+++ 
b/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
@@ -107,7 +107,9 @@ public abstract class AbstractLRATestSupport extends 
CamelTestSupport {
 
     protected int getServerPort() {
         if (serverPort == null) {
-            serverPort = AvailablePortFinder.getNextAvailable();
+            try (AvailablePortFinder.Port p = AvailablePortFinder.find()) {
+                serverPort = p.getPort();
+            }
         }
         return serverPort;
     }
diff --git 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java
 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java
index 21a2546cf839..a6d9cd318b05 100644
--- 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java
+++ 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java
@@ -29,20 +29,16 @@ import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.camel.support.jsse.TrustManagersParameters;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.parallel.Isolated;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @Isolated
 public class LumberjackComponentGlobalSSLTest extends CamelTestSupport {
-    private static int port;
-
-    @BeforeAll
-    public static void beforeClass() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
@@ -59,7 +55,7 @@ public class LumberjackComponentGlobalSSLTest extends 
CamelTestSupport {
             public void configure() {
 
                 // Lumberjack configured with SSL
-                from("lumberjack:0.0.0.0:" + port).to("mock:output");
+                from("lumberjack:0.0.0.0:" + port.getPort()).to("mock:output");
             }
         };
     }
@@ -75,7 +71,8 @@ public class LumberjackComponentGlobalSSLTest extends 
CamelTestSupport {
         List<Integer> windows = Arrays.asList(15, 10, 15, 10, 10);
 
         // When sending messages
-        List<Integer> responses = LumberjackUtil.sendMessages(port, 
createClientSSLContextParameters(context), windows);
+        List<Integer> responses
+                = LumberjackUtil.sendMessages(port.getPort(), 
createClientSSLContextParameters(context), windows);
 
         // Then we should have the messages we're expecting
         mock.assertIsSatisfied();
diff --git 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java
 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java
index 9fe5d7dd763d..39a982409851 100644
--- 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java
+++ 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java
@@ -29,20 +29,16 @@ import org.apache.camel.support.jsse.SSLContextParameters;
 import org.apache.camel.support.jsse.TrustManagersParameters;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.parallel.Isolated;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @Isolated
 public class LumberjackComponentSSLTest extends CamelTestSupport {
-    private static int port;
-
-    @BeforeAll
-    public static void beforeClass() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     @Override
     protected RouteBuilder createRouteBuilder() {
@@ -52,7 +48,7 @@ public class LumberjackComponentSSLTest extends 
CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 // Lumberjack configured with SSL
-                from("lumberjack:0.0.0.0:" + port + 
"?sslContextParameters=#ssl").to("mock:output");
+                from("lumberjack:0.0.0.0:" + port.getPort() + 
"?sslContextParameters=#ssl").to("mock:output");
             }
         };
     }
@@ -66,7 +62,7 @@ public class LumberjackComponentSSLTest extends 
CamelTestSupport {
         List<Integer> windows = Arrays.asList(15, 10, 15, 10, 10);
 
         // When sending messages
-        List<Integer> responses = LumberjackUtil.sendMessages(port, 
createClientSSLContextParameters(), windows);
+        List<Integer> responses = LumberjackUtil.sendMessages(port.getPort(), 
createClientSSLContextParameters(), windows);
 
         // Then we should have the messages we're expecting
         mock.assertIsSatisfied();
diff --git 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java
 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java
index 45220b93ce99..f80a625d69d2 100644
--- 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java
+++ 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java
@@ -24,10 +24,10 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.parallel.Isolated;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -37,19 +37,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
               disabledReason = "This test does not run reliably multiple 
platforms (see CAMEL-21438)")
 @Isolated
 public class LumberjackComponentTest extends CamelTestSupport {
-    private static int port;
-
-    @BeforeAll
-    public static void beforeClass() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
                 // Lumberjack configured with a specific port
-                from("lumberjack:0.0.0.0:" + port).to("mock:output");
+                from("lumberjack:0.0.0.0:" + port.getPort()).to("mock:output");
             }
         };
     }
@@ -64,7 +60,7 @@ public class LumberjackComponentTest extends CamelTestSupport 
{
         List<Integer> windows = Arrays.asList(15, 10, 15, 10, 10);
 
         // When sending messages
-        List<Integer> responses = LumberjackUtil.sendMessages(port, null, 
windows);
+        List<Integer> responses = LumberjackUtil.sendMessages(port.getPort(), 
null, windows);
 
         // Then we should have the messages we're expecting
         mock.assertIsSatisfied();
diff --git 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java
 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java
index e8b58b79eb2e..2a4ad96553ef 100644
--- 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java
+++ 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java
@@ -27,27 +27,23 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.parallel.Isolated;
 
 import static org.apache.camel.test.junit6.TestSupport.assertCollectionSize;
 
 @Isolated
 public class LumberjackDisconnectionTest extends CamelTestSupport {
-    private static int port;
-
-    @BeforeAll
-    public static void beforeClass() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
                 // Lumberjack configured with something that throws an 
exception
-                from("lumberjack:0.0.0.0:" + port).process(new 
ErrorProcessor()).to("mock:output");
+                from("lumberjack:0.0.0.0:" + port.getPort()).process(new 
ErrorProcessor()).to("mock:output");
             }
         };
     }
@@ -63,7 +59,7 @@ public class LumberjackDisconnectionTest extends 
CamelTestSupport {
         List<Integer> windows = Arrays.asList(15, 10);
 
         // When sending messages
-        List<Integer> responses = LumberjackUtil.sendMessages(port, null, 
windows, false);
+        List<Integer> responses = LumberjackUtil.sendMessages(port.getPort(), 
null, windows, false);
 
         // Then we should have the messages we're expecting
         mock.assertIsSatisfied();
diff --git 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackMultiThreadIT.java
 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackMultiThreadIT.java
index 9fccdfd57db4..300ccf46d17a 100644
--- 
a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackMultiThreadIT.java
+++ 
b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackMultiThreadIT.java
@@ -33,6 +33,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.condition.OS;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.parallel.Isolated;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -44,7 +45,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 @Isolated
 public class LumberjackMultiThreadIT extends CamelTestSupport {
 
-    private static final int PORT = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
     private static final int CONCURRENCY_LEVEL = 
Math.min(Runtime.getRuntime().availableProcessors(), 4);
     private CountDownLatch latch = new CountDownLatch(CONCURRENCY_LEVEL);
     private volatile boolean interrupted;
@@ -57,7 +59,7 @@ public class LumberjackMultiThreadIT extends CamelTestSupport 
{
         return new RouteBuilder() {
             public void configure() {
                 // Lumberjack configured with a specific port
-                from("lumberjack:0.0.0.0:" + PORT).to("mock:output");
+                from("lumberjack:0.0.0.0:" + port.getPort()).to("mock:output");
             }
         };
     }
@@ -104,7 +106,7 @@ public class LumberjackMultiThreadIT extends 
CamelTestSupport {
         @Override
         public void run() {
             try {
-                this.responses = LumberjackUtil.sendMessages(PORT, null, 
Arrays.asList(15, 10));
+                this.responses = LumberjackUtil.sendMessages(port.getPort(), 
null, Arrays.asList(15, 10));
                 latch.countDown();
             } catch (InterruptedException e) {
                 Thread.currentThread().interrupt();
diff --git 
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
index 753c3521d994..119df3efc6fb 100644
--- 
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
+++ 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
@@ -47,7 +47,9 @@ public abstract class AbstractMiloServerTest extends 
CamelTestSupport {
 
     @Override
     protected void doPreSetup() throws Exception {
-        this.serverPort = AvailablePortFinder.getNextAvailable();
+        try (AvailablePortFinder.Port port = AvailablePortFinder.find()) {
+            this.serverPort = port.getPort();
+        }
     }
 
     public int getServerPort() {
diff --git 
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
index 3651bc02ec7d..c84603e5ed3c 100644
--- 
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
+++ 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
@@ -29,6 +29,7 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,6 +44,9 @@ public class ServerLocalTest extends CamelTestSupport {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(ConverterTest.class);
 
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
+
     @EndpointInject(MOCK_TEST)
     protected MockEndpoint testEndpoint;
 
@@ -53,7 +57,7 @@ public class ServerLocalTest extends CamelTestSupport {
         LOG.info(displayName);
         
LOG.info("********************************************************************************");
         final MiloServerComponent component = 
context().getComponent("milo-server", MiloServerComponent.class);
-        component.setPort(AvailablePortFinder.getNextAvailable());
+        component.setPort(port.getPort());
     }
 
     @Override
diff --git 
a/components/camel-mina/src/test/java/org/apache/camel/component/mina/BaseMinaTest.java
 
b/components/camel-mina/src/test/java/org/apache/camel/component/mina/BaseMinaTest.java
index 5434e2fbcad5..8a7244003d10 100644
--- 
a/components/camel-mina/src/test/java/org/apache/camel/component/mina/BaseMinaTest.java
+++ 
b/components/camel-mina/src/test/java/org/apache/camel/component/mina/BaseMinaTest.java
@@ -28,25 +28,23 @@ import 
org.apache.camel.support.jsse.SecureSocketProtocolsParameters;
 import org.apache.camel.support.jsse.TrustManagersParameters;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public abstract class BaseMinaTest extends CamelTestSupport {
 
     protected static final String KEY_STORE_PASSWORD = "changeit";
 
-    private static volatile int port;
-
-    @BeforeAll
-    public static void initPort() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     protected int getNextPort() {
-        return AvailablePortFinder.getNextAvailable();
+        try (AvailablePortFinder.Port p = AvailablePortFinder.find()) {
+            return p.getPort();
+        }
     }
 
     protected int getPort() {
-        return port;
+        return port.getPort();
     }
 
     protected boolean isUseSslContext() {
diff --git 
a/components/camel-oaipmh/src/test/java/org/apache/camel/oaipmh/utils/MockOaipmhServer.java
 
b/components/camel-oaipmh/src/test/java/org/apache/camel/oaipmh/utils/MockOaipmhServer.java
index cee9b14cd36c..7088043972ca 100644
--- 
a/components/camel-oaipmh/src/test/java/org/apache/camel/oaipmh/utils/MockOaipmhServer.java
+++ 
b/components/camel-oaipmh/src/test/java/org/apache/camel/oaipmh/utils/MockOaipmhServer.java
@@ -55,8 +55,13 @@ public final class MockOaipmhServer {
     }
 
     public static MockOaipmhServer create() {
-        int httpPort = AvailablePortFinder.getNextAvailable();
-        int httpsPort = AvailablePortFinder.getNextAvailable();
+        int httpPort;
+        int httpsPort;
+        try (AvailablePortFinder.Port p1 = AvailablePortFinder.find();
+             AvailablePortFinder.Port p2 = AvailablePortFinder.find()) {
+            httpPort = p1.getPort();
+            httpsPort = p2.getPort();
+        }
         MockOaipmhServer server = new MockOaipmhServer(httpPort, httpsPort);
         return server;
     }
diff --git 
a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java
 
b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java
index 3cea8d5a3883..e55daba32ede 100644
--- 
a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java
+++ 
b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java
@@ -34,6 +34,7 @@ import org.apache.http.entity.ContentType;
 import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
 import org.apache.olingo.odata2.api.ep.feed.ODataDeltaFeed;
 import org.apache.olingo.odata2.api.ep.feed.ODataFeed;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,7 +45,8 @@ public class AbstractOlingo2AppAPITestSupport {
 
     protected static final String SERVICE_NAME = "MyFormula.svc";
     protected static final Logger LOG = 
LoggerFactory.getLogger(AbstractOlingo2AppAPITestSupport.class);
-    protected static final int PORT = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    protected static AvailablePortFinder.Port PORT = 
AvailablePortFinder.find();
     protected static final long TIMEOUT = 100000;
     protected static final String MANUFACTURERS = "Manufacturers";
     protected static final String FQN_MANUFACTURERS = 
"DefaultContainer.Manufacturers";
@@ -65,7 +67,7 @@ public class AbstractOlingo2AppAPITestSupport {
     protected static final String TEST_MANUFACTURER_LINKS_CARS = 
"Manufacturers('1')/$links/Cars";
     protected static final String TEST_CAR_LINK_MANUFACTURER = 
"Cars('1')/$links/Manufacturer";
     protected static final String COUNT_OPTION = "/$count";
-    protected static final String TEST_SERVICE_URL = "http://localhost:"; + 
PORT + "/" + SERVICE_NAME;
+    protected static final String TEST_SERVICE_URL = "http://localhost:"; + 
PORT.getPort() + "/" + SERVICE_NAME;
     protected static final ContentType TEST_FORMAT = 
ContentType.APPLICATION_JSON;
     protected static final String TEST_FORMAT_STRING = TEST_FORMAT.toString();
     protected static final String ID_PROPERTY = "Id";
@@ -142,7 +144,7 @@ public class AbstractOlingo2AppAPITestSupport {
     }
 
     protected static JettyConfiguration createConfiguration() {
-        return createConfiguration(PORT);
+        return createConfiguration(PORT.getPort());
     }
 
     protected static JettyConfiguration createConfiguration(int port) {
diff --git 
a/components/camel-paho-mqtt5/src/test/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5ReconnectAfterFailureIT.java
 
b/components/camel-paho-mqtt5/src/test/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5ReconnectAfterFailureIT.java
index 5849361d3035..fae10b1a8fd2 100644
--- 
a/components/camel-paho-mqtt5/src/test/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5ReconnectAfterFailureIT.java
+++ 
b/components/camel-paho-mqtt5/src/test/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5ReconnectAfterFailureIT.java
@@ -35,6 +35,7 @@ import 
org.apache.camel.test.infra.mosquitto.services.MosquittoService;
 import org.apache.camel.test.infra.mosquitto.services.MosquittoServiceFactory;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -43,7 +44,9 @@ import static org.junit.jupiter.api.Assertions.fail;
 public class PahoMqtt5ReconnectAfterFailureIT extends CamelTestSupport {
 
     public static final String TESTING_ROUTE_ID = "testingRoute";
-    private static int mqttPort = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+
+    static AvailablePortFinder.Port mqttPort = AvailablePortFinder.find();
 
     MosquittoService service;
     CountDownLatch routeStartedLatch = new CountDownLatch(1);
@@ -52,11 +55,11 @@ public class PahoMqtt5ReconnectAfterFailureIT extends 
CamelTestSupport {
     MockEndpoint mock;
 
     private static MosquittoService createLocalService() {
-        return new MosquittoLocalContainerService(mqttPort);
+        return new MosquittoLocalContainerService(mqttPort.getPort());
     }
 
     private static MosquittoService createRemoteService() {
-        return new MosquittoRemoteService(mqttPort);
+        return new MosquittoRemoteService(mqttPort.getPort());
     }
 
     @Override
@@ -94,8 +97,9 @@ public class PahoMqtt5ReconnectAfterFailureIT extends 
CamelTestSupport {
             @Override
             public void configure() {
 
-                
from("direct:test").to("paho-mqtt5:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:"
 + mqttPort);
-                from("paho-mqtt5:queue?brokerUrl=tcp://localhost:" + mqttPort)
+                from("direct:test")
+                        
.to("paho-mqtt5:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:" + 
mqttPort.getPort());
+                from("paho-mqtt5:queue?brokerUrl=tcp://localhost:" + 
mqttPort.getPort())
                         .id(TESTING_ROUTE_ID)
                         .routePolicy(new RoutePolicySupport() {
                             @Override
@@ -127,7 +131,7 @@ public class PahoMqtt5ReconnectAfterFailureIT extends 
CamelTestSupport {
         mock.expectedBodiesReceived(msg);
 
         // When
-        
template.sendBody("paho-mqtt5:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:"
 + mqttPort, msg);
+        
template.sendBody("paho-mqtt5:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:"
 + mqttPort.getPort(), msg);
 
         // Then
         mock.assertIsSatisfied();
diff --git 
a/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoReconnectAfterFailureIT.java
 
b/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoReconnectAfterFailureIT.java
index b9058d04c6c7..251952458cb4 100644
--- 
a/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoReconnectAfterFailureIT.java
+++ 
b/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoReconnectAfterFailureIT.java
@@ -58,7 +58,9 @@ public class PahoReconnectAfterFailureIT implements 
ConfigurableRoute, Configura
     ArtemisMQTTService broker;
 
     CountDownLatch routeStartedLatch = new CountDownLatch(1);
-    int port = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     @EndpointInject("mock:test")
     MockEndpoint mock;
@@ -95,8 +97,8 @@ public class PahoReconnectAfterFailureIT implements 
ConfigurableRoute, Configura
             @Override
             public void configure() {
 
-                
from("direct:test").to("paho:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:"
 + port);
-                from("paho:queue?brokerUrl=tcp://localhost:" + port)
+                
from("direct:test").to("paho:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:"
 + port.getPort());
+                from("paho:queue?brokerUrl=tcp://localhost:" + port.getPort())
                         .id(TESTING_ROUTE_ID)
                         .routePolicy(new RoutePolicySupport() {
                             @Override
@@ -133,7 +135,7 @@ public class PahoReconnectAfterFailureIT implements 
ConfigurableRoute, Configura
 
         // When
         ProducerTemplate template = 
camelContextExtension.getProducerTemplate();
-        
template.sendBody("paho:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:"
 + port, msg);
+        
template.sendBody("paho:queue?lazyStartProducer=true&brokerUrl=tcp://localhost:"
 + port.getPort(), msg);
 
         // Then
         mock.assertIsSatisfied();
@@ -161,7 +163,7 @@ public class PahoReconnectAfterFailureIT implements 
ConfigurableRoute, Configura
     }
 
     private void startBroker() {
-        broker = new ArtemisMQTTService(port);
+        broker = new ArtemisMQTTService(port.getPort());
         broker.initialize();
     }
 
diff --git 
a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java
 
b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java
index 6278f23862d8..1f0158bd4be3 100644
--- 
a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java
+++ 
b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java
@@ -26,18 +26,20 @@ import com.pubnub.internal.java.PubNubForJavaImpl;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static 
com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
 import static com.pubnub.api.enums.PNHeartbeatNotificationOptions.NONE;
 
 public class PubNubTestBase extends CamelTestSupport {
 
-    private final int port = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
     @BindToRegistry("pubnub")
     private PubNub pubnub = createPubNubInstance();
 
-    private WireMockServer wireMockServer = new 
WireMockServer(options().port(port));
+    private WireMockServer wireMockServer = new 
WireMockServer(options().port(port.getPort()));
 
     @Override
     protected void setupResources() {
@@ -61,7 +63,7 @@ public class PubNubTestBase extends CamelTestSupport {
             config = PNConfiguration.builder(new UserId("myUUID"), 
"mySubscribeKey")
                     .publishKey("myPublishKey")
                     .secure(false)
-                    .origin("localhost" + ":" + port)
+                    .origin("localhost" + ":" + port.getPort())
                     .logVerbosity(PNLogVerbosity.NONE)
                     .heartbeatNotificationOptions(NONE)
                     .build();
diff --git 
a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/HttpProxyMojoManualIT.java
 
b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/HttpProxyMojoManualIT.java
index 0cdefe1d3ca4..e8ed7636b150 100644
--- 
a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/HttpProxyMojoManualIT.java
+++ 
b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/HttpProxyMojoManualIT.java
@@ -19,7 +19,6 @@ package org.apache.camel.maven;
 import java.io.IOException;
 import java.util.HashMap;
 
-import org.apache.camel.test.AvailablePortFinder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.littleshoot.proxy.HttpProxyServer;
@@ -40,7 +39,6 @@ public class HttpProxyMojoManualIT extends 
CamelSalesforceMojoManualIT {
 
     @BeforeEach
     public void startProxy() {
-        httpProxyPort = AvailablePortFinder.getNextAvailable();
 
         proxy = 
DefaultHttpProxyServer.bootstrap().withPort(httpProxyPort).withProxyAuthenticator(new
 ProxyAuthenticator() {
             @Override
diff --git 
a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java
 
b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java
index 60d66d1d4d89..0561e712a405 100644
--- 
a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java
+++ 
b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletCamelRouterTestSupport.java
@@ -51,7 +51,9 @@ public class ServletCamelRouterTestSupport extends 
CamelTestSupport {
 
     @Override
     public void setupResources() throws Exception {
-        port = AvailablePortFinder.getNextAvailable();
+        try (AvailablePortFinder.Port p = AvailablePortFinder.find()) {
+            port = p.getPort();
+        }
         DeploymentInfo servletBuilder = getDeploymentInfo();
         manager = Servlets.newContainer().addDeployment(servletBuilder);
         manager.deploy();
diff --git 
a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java
 
b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java
index 6ff6acb03248..8f2b636a35ec 100644
--- 
a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java
+++ 
b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java
@@ -28,10 +28,12 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class SlackProducerTest extends CamelTestSupport {
 
-    protected static final int UNDERTOW_PORT = 
AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port UNDERTOW_PORT = AvailablePortFinder.find();
 
     @EndpointInject("mock:errors")
     MockEndpoint errors;
@@ -72,13 +74,14 @@ public class SlackProducerTest extends CamelTestSupport {
             @Override
             public void configure() {
                 SlackComponent slack = new SlackComponent();
-                slack.setWebhookUrl("http://localhost:"; + UNDERTOW_PORT + 
"/slack/webhook");
+                slack.setWebhookUrl("http://localhost:"; + 
UNDERTOW_PORT.getPort() + "/slack/webhook");
                 context.addComponent("slack", slack);
 
                 onException(Exception.class).handled(true).to(errors);
 
                 final String slackUser = System.getProperty("SLACK_USER", 
"CamelTest");
-                from("undertow:http://localhost:"; + UNDERTOW_PORT + 
"/slack/webhook").setBody(constant("{\"ok\": true}"));
+                from("undertow:http://localhost:"; + UNDERTOW_PORT.getPort() + 
"/slack/webhook")
+                        .setBody(constant("{\"ok\": true}"));
 
                 
from(test).to(String.format("slack:#general?iconEmoji=:camel:&username=%s", 
slackUser));
             }
diff --git 
a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerIT.java
 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerIT.java
index 5fc529f51f8c..83458c1ab894 100644
--- 
a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerIT.java
+++ 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerIT.java
@@ -32,6 +32,7 @@ import org.jsmpp.examples.SMPPServerSimulator;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -40,9 +41,10 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 class SmppTRXProducerIT extends CamelTestSupport {
 
-    private static int PORT = 8200; // use private port to avoid reusing from 
previous tests
+    @RegisterExtension
+    static AvailablePortFinder.Port PORT = AvailablePortFinder.find();
     private static final Thread SMPP_SERVER_SIMULATOR = new Thread(() -> {
-        System.setProperty("jsmpp.simulator.port", "" + PORT);
+        System.setProperty("jsmpp.simulator.port", "" + PORT.getPort());
         SMPPServerSimulator.main(null);
     });
 
@@ -60,7 +62,6 @@ class SmppTRXProducerIT extends CamelTestSupport {
 
     @BeforeAll
     public static void runSMPPServerSimulator() {
-        PORT = AvailablePortFinder.getNextAvailable(8200, 9999);
         SMPP_SERVER_SIMULATOR.start();
     }
 
@@ -100,7 +101,7 @@ class SmppTRXProducerIT extends CamelTestSupport {
                 @Override
                 public void configure() {
                     from("direct:start2")
-                            .to("smpp://j@localhost:" + PORT + 
"?password=jpwd&systemType=producer" +
+                            .to("smpp://j@localhost:" + PORT.getPort() + 
"?password=jpwd&systemType=producer" +
                                 
"&messageReceiverRouteId=TYPO_IN_MessageReceiverRouteId");
                 }
             });
@@ -122,7 +123,7 @@ class SmppTRXProducerIT extends CamelTestSupport {
             @Override
             public void configure() {
                 from("direct:start2")
-                        .to("smpp://j@localhost:" + PORT + 
"?password=jpwd&systemType=producer" +
+                        .to("smpp://j@localhost:" + PORT.getPort() + 
"?password=jpwd&systemType=producer" +
                             
"&messageReceiverRouteId=testMessageReceiverRouteId2");
             }
         });
@@ -141,7 +142,7 @@ class SmppTRXProducerIT extends CamelTestSupport {
             @Override
             public void configure() {
                 from("direct:start")
-                        .to("smpp://j@localhost:" + PORT + 
"?password=jpwd&systemType=producer" +
+                        .to("smpp://j@localhost:" + PORT.getPort() + 
"?password=jpwd&systemType=producer" +
                             
"&messageReceiverRouteId=testMessageReceiverRouteId");
 
                 from("direct:messageReceiver").id("testMessageReceiverRouteId")
diff --git 
a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerSupervisingRouteControllerIT.java
 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerSupervisingRouteControllerIT.java
index 237cce240625..77c2b94a0afd 100644
--- 
a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerSupervisingRouteControllerIT.java
+++ 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerSupervisingRouteControllerIT.java
@@ -40,6 +40,7 @@ import org.jsmpp.examples.SMPPServerSimulator;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.parallel.Isolated;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -49,7 +50,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @Isolated
 class SmppTRXProducerSupervisingRouteControllerIT extends CamelTestSupport {
-    private static int PORT = 8100; // use private port to avoid reusing from 
previous tests
+    @RegisterExtension
+    static AvailablePortFinder.Port PORT = AvailablePortFinder.find();
     private static final CountDownLatch LATCH = new CountDownLatch(1);
     private static final Thread SMPP_SERVER_SIMULATOR = new Thread(() -> {
         try {
@@ -58,7 +60,7 @@ class SmppTRXProducerSupervisingRouteControllerIT extends 
CamelTestSupport {
         } catch (Exception e) {
             // ignore
         }
-        System.setProperty("jsmpp.simulator.port", "" + PORT);
+        System.setProperty("jsmpp.simulator.port", "" + PORT.getPort());
         SMPPServerSimulator.main(null);
     });
 
@@ -95,7 +97,6 @@ class SmppTRXProducerSupervisingRouteControllerIT extends 
CamelTestSupport {
 
     @BeforeAll
     public static void runSMPPServerSimulator() {
-        PORT = AvailablePortFinder.getNextAvailable(8100, 9999);
         SMPP_SERVER_SIMULATOR.start();
     }
 
@@ -137,7 +138,7 @@ class SmppTRXProducerSupervisingRouteControllerIT extends 
CamelTestSupport {
             @Override
             public void configure() {
                 from("direct:start")
-                        .to("smpp://j@localhost:" + PORT + 
"?password=jpwd&systemType=producer" +
+                        .to("smpp://j@localhost:" + PORT.getPort() + 
"?password=jpwd&systemType=producer" +
                             
"&messageReceiverRouteId=testMessageReceiverRouteId");
 
                 from("direct:messageReceiver").id("testMessageReceiverRouteId")
diff --git 
a/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/TrapTest.java
 
b/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/TrapTest.java
index 44921d6e5392..723dc468cc36 100644
--- 
a/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/TrapTest.java
+++ 
b/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/TrapTest.java
@@ -28,6 +28,7 @@ import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.awaitility.Awaitility;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 import org.slf4j.Logger;
@@ -44,6 +45,13 @@ import org.snmp4j.smi.VariableBinding;
 public class TrapTest extends SnmpTestSupport {
     private static final Logger LOG = LoggerFactory.getLogger(TrapTest.class);
 
+    @RegisterExtension
+    AvailablePortFinder.Port portV0 = AvailablePortFinder.find();
+    @RegisterExtension
+    AvailablePortFinder.Port portV1 = AvailablePortFinder.find();
+    @RegisterExtension
+    AvailablePortFinder.Port portV3 = AvailablePortFinder.find();
+
     @ParameterizedTest
     @MethodSource("supportedVersions")
     public void testSendReceiveTraps(int version) throws Exception {
@@ -93,31 +101,27 @@ public class TrapTest extends SnmpTestSupport {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                //genrate ports for trap consumers/producers
-                int portV0 = AvailablePortFinder.getNextAvailable();
-                int portV1 = AvailablePortFinder.getNextAvailable();
-                int portV3 = AvailablePortFinder.getNextAvailable();
-
                 from("direct:snmptrapV0")
                         .log(LoggingLevel.INFO, "Sending Trap pdu ${body}")
-                        .to("snmp:127.0.0.1:" + portV0 + 
"?protocol=udp&type=TRAP&snmpVersion=0");
+                        .to("snmp:127.0.0.1:" + portV0.getPort() + 
"?protocol=udp&type=TRAP&snmpVersion=0");
 
-                from("snmp:0.0.0.0:" + portV0 + 
"?protocol=udp&type=TRAP&snmpVersion=0")
+                from("snmp:0.0.0.0:" + portV0.getPort() + 
"?protocol=udp&type=TRAP&snmpVersion=0")
                         .to("mock:resultV0");
 
                 from("direct:snmptrapV1")
                         .log(LoggingLevel.INFO, "Sending Trap pdu ${body}")
-                        .to("snmp:127.0.0.1:" + portV1 + 
"?protocol=udp&type=TRAP&snmpVersion=1");
+                        .to("snmp:127.0.0.1:" + portV1.getPort() + 
"?protocol=udp&type=TRAP&snmpVersion=1");
 
-                from("snmp:0.0.0.0:" + portV1 + 
"?protocol=udp&type=TRAP&snmpVersion=1")
+                from("snmp:0.0.0.0:" + portV1.getPort() + 
"?protocol=udp&type=TRAP&snmpVersion=1")
                         .to("mock:resultV1");
 
                 from("direct:snmptrapV3")
                         .log(LoggingLevel.INFO, "Sending Trap pdu ${body}")
-                        .to("snmp:127.0.0.1:" + portV3
+                        .to("snmp:127.0.0.1:" + portV3.getPort()
                             + 
"?securityName=test&securityLevel=1&protocol=udp&type=TRAP&snmpVersion=3");
 
-                from("snmp:0.0.0.0:" + portV3 + 
"?securityName=test&securityLevel=1&protocol=udp&type=TRAP&snmpVersion=3")
+                from("snmp:0.0.0.0:" + portV3.getPort()
+                     + 
"?securityName=test&securityLevel=1&protocol=udp&type=TRAP&snmpVersion=3")
                         .to("mock:resultV3");
             }
         };
diff --git 
a/components/camel-spring-parent/camel-undertow-spring-security/src/test/java/org/apache/camel/component/spring/security/AbstractSpringSecurityBearerTokenTest.java
 
b/components/camel-spring-parent/camel-undertow-spring-security/src/test/java/org/apache/camel/component/spring/security/AbstractSpringSecurityBearerTokenTest.java
index ce4199c581bb..0355337c4c2d 100644
--- 
a/components/camel-spring-parent/camel-undertow-spring-security/src/test/java/org/apache/camel/component/spring/security/AbstractSpringSecurityBearerTokenTest.java
+++ 
b/components/camel-spring-parent/camel-undertow-spring-security/src/test/java/org/apache/camel/component/spring/security/AbstractSpringSecurityBearerTokenTest.java
@@ -32,7 +32,6 @@ import org.apache.camel.CamelContext;
 import 
org.apache.camel.component.spring.security.keycloak.KeycloakRealmRoleConverter;
 import 
org.apache.camel.component.spring.security.keycloak.KeycloakUsernameSubClaimAdapter;
 import org.apache.camel.component.undertow.UndertowComponent;
-import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.BeforeAll;
 import org.springframework.security.oauth2.jwt.Jwt;
@@ -49,7 +48,6 @@ public abstract class AbstractSpringSecurityBearerTokenTest 
extends CamelTestSup
 
     @BeforeAll
     public static void initPort() {
-        port = AvailablePortFinder.getNextAvailable();
     }
 
     protected static int getPort() {
diff --git 
a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshAlgorithmParametersTest.java
 
b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshAlgorithmParametersTest.java
index a7beaf27b446..7d985493a6a5 100644
--- 
a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshAlgorithmParametersTest.java
+++ 
b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshAlgorithmParametersTest.java
@@ -39,19 +39,25 @@ import org.apache.sshd.common.signature.BuiltinSignatures;
 import org.apache.sshd.common.signature.Signature;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class SshAlgorithmParametersTest extends CamelTestSupport {
 
-    private int port = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    AvailablePortFinder.Port port = AvailablePortFinder.find();
 
-    private String sshEndpointURI = "ssh://smx:smx@localhost:" + port + 
"?timeout=3000" +
-                                    "&ciphers=aes192-ctr" +
-                                    
"&[email protected],hmac-sha2-256,hmac-sha1" +
-                                    "&kex=ecdh-sha2-nistp521" +
-                                    
"&signatures=rsa-sha2-512,[email protected]" +
-                                    "&compressions=zlib,none";
+    private String getSshEndpointURI() {
+        return "ssh://smx:smx@localhost:" + port.getPort() + "?timeout=3000" +
+               "&ciphers=aes192-ctr" +
+               "&[email protected],hmac-sha2-256,hmac-sha1" +
+               "&kex=ecdh-sha2-nistp521" +
+               "&signatures=rsa-sha2-512,[email protected]" +
+               "&compressions=zlib,none";
+    }
 
-    private String customClientSshEndpointURI = "ssh://smx:smx@localhost:" + 
port + "?timeout=3000&clientBuilder=#myClient";
+    private String getCustomClientSshEndpointURI() {
+        return "ssh://smx:smx@localhost:" + port.getPort() + 
"?timeout=3000&clientBuilder=#myClient";
+    }
 
     @Override
     protected void bindToRegistry(Registry registry) throws Exception {
@@ -86,7 +92,7 @@ public class SshAlgorithmParametersTest extends 
CamelTestSupport {
     @Test
     public void producerCiphersParameterTest() throws Exception {
         context.getComponent("ssh", SshComponent.class);
-        SshEndpoint endpoint = context.getEndpoint(sshEndpointURI, 
SshEndpoint.class);
+        SshEndpoint endpoint = context.getEndpoint(getSshEndpointURI(), 
SshEndpoint.class);
         SshProducer producer = (SshProducer) endpoint.createProducer();
         producer.start();
         SshClient client = (SshClient) FieldUtils.readField(producer, 
"client", true);
@@ -96,7 +102,7 @@ public class SshAlgorithmParametersTest extends 
CamelTestSupport {
     @Test
     public void consumerCiphersParameterTest() throws Exception {
         context.getComponent("ssh", SshComponent.class);
-        SshEndpoint endpoint = context.getEndpoint(sshEndpointURI, 
SshEndpoint.class);
+        SshEndpoint endpoint = context.getEndpoint(getSshEndpointURI(), 
SshEndpoint.class);
         SshConsumer consumer = (SshConsumer) endpoint.createConsumer(x -> {
         });
         consumer.start();
@@ -107,7 +113,7 @@ public class SshAlgorithmParametersTest extends 
CamelTestSupport {
     @Test
     public void consumerCustomClientParameterTest() throws Exception {
         context.getComponent("ssh", SshComponent.class);
-        SshEndpoint endpoint = context.getEndpoint(customClientSshEndpointURI, 
SshEndpoint.class);
+        SshEndpoint endpoint = 
context.getEndpoint(getCustomClientSshEndpointURI(), SshEndpoint.class);
         SshConsumer consumer = (SshConsumer) endpoint.createConsumer(x -> {
         });
         consumer.start();
@@ -118,7 +124,7 @@ public class SshAlgorithmParametersTest extends 
CamelTestSupport {
     @Test
     public void producerCustomClientParameterTest() throws Exception {
         context.getComponent("ssh", SshComponent.class);
-        SshEndpoint endpoint = context.getEndpoint(customClientSshEndpointURI, 
SshEndpoint.class);
+        SshEndpoint endpoint = 
context.getEndpoint(getCustomClientSshEndpointURI(), SshEndpoint.class);
         SshProducer producer = (SshProducer) endpoint.createProducer();
         producer.start();
         SshClient client = (SshClient) FieldUtils.readField(producer, 
"client", true);
diff --git 
a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentTestSupport.java
 
b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentTestSupport.java
index 29e0e604efd6..8eaaeeee6123 100644
--- 
a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentTestSupport.java
+++ 
b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentTestSupport.java
@@ -30,7 +30,9 @@ public class SshComponentTestSupport extends CamelTestSupport 
{
 
     @Override
     public void doPreSetup() throws Exception {
-        port = AvailablePortFinder.getNextAvailable();
+        try (AvailablePortFinder.Port p = AvailablePortFinder.find()) {
+            port = p.getPort();
+        }
 
         sshd = SshServer.setUpDefaultServer();
         sshd.setPort(port);
diff --git 
a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshIdleTimeoutTest.java
 
b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshIdleTimeoutTest.java
index 2ac79edd7b08..54eb355a4b44 100644
--- 
a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshIdleTimeoutTest.java
+++ 
b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshIdleTimeoutTest.java
@@ -32,10 +32,12 @@ import org.apache.sshd.server.SshServer;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class SshIdleTimeoutTest extends SshComponentTestSupport {
 
-    private int delayedPort = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    AvailablePortFinder.Port delayedPort = AvailablePortFinder.find();
     private SshServer delayedSshd;
 
     @AfterEach
@@ -102,7 +104,7 @@ public class SshIdleTimeoutTest extends 
SshComponentTestSupport {
 
     private void startDelayedServer() throws Exception {
         delayedSshd = SshServer.setUpDefaultServer();
-        delayedSshd.setPort(delayedPort);
+        delayedSshd.setPort(delayedPort.getPort());
         delayedSshd.setKeyPairProvider(new 
FileKeyPairProvider(Paths.get("src/test/resources/hostkey.pem")));
         delayedSshd.setCommandFactory(new DelayedEchoCommandFactory(1000));
         delayedSshd.setPasswordAuthenticator((username, password, session) -> 
true);
@@ -150,9 +152,9 @@ public class SshIdleTimeoutTest extends 
SshComponentTestSupport {
                         .to("mock:result");
 
                 from("direct:sshWithShortIdleTimeout")
-                        .to("ssh://smx:smx@localhost:" + delayedPort + 
"?timeout=5000&idleTimeout=500");
+                        .to("ssh://smx:smx@localhost:" + delayedPort.getPort() 
+ "?timeout=5000&idleTimeout=500");
                 from("direct:sshWithLongIdleTimeout")
-                        .to("ssh://smx:smx@localhost:" + delayedPort + 
"?timeout=5000&idleTimeout=5000");
+                        .to("ssh://smx:smx@localhost:" + delayedPort.getPort() 
+ "?timeout=5000&idleTimeout=5000");
             }
         };
     }
diff --git 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
index 9cf7cadd4708..9bfdbc2b5990 100644
--- 
a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
+++ 
b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
@@ -35,8 +35,10 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 public abstract class StompBaseTest extends CamelTestSupport {
 
     protected int numberOfMessages = 100;
-    static int sslServicePort = AvailablePortFinder.getNextAvailable();
-    static int servicePort = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port sslServicePort = 
AvailablePortFinder.find();
+    @RegisterExtension
+    static AvailablePortFinder.Port servicePort = AvailablePortFinder.find();
 
     @RegisterExtension
     public static ArtemisService service = new ArtemisEmbeddedServiceBuilder()
@@ -50,11 +52,11 @@ public abstract class StompBaseTest extends 
CamelTestSupport {
                                           
"keyStorePath=jsse/server-side-keystore.jks;" +
                                           "keyStorePassword=password;" +
                                           "protocols=STOMP",
-                                    sslServicePort));
+                                    sslServicePort.getPort()));
 
                     
configuration.addAcceptorConfiguration("stomp-tcp-acceptor",
                             String.format("tcp://0.0.0.0:%s?protocols=STOMP",
-                                    servicePort));
+                                    servicePort.getPort()));
                 } catch (Exception e) {
                     throw new RuntimeException(e);
                 }
@@ -84,10 +86,10 @@ public abstract class StompBaseTest extends 
CamelTestSupport {
         Stomp stomp;
 
         if (isUseSsl()) {
-            stomp = new Stomp("ssl://localhost:" + sslServicePort);
+            stomp = new Stomp("ssl://localhost:" + sslServicePort.getPort());
             stomp.setSslContext(getClientSSLContext());
         } else {
-            stomp = new Stomp("tcp://localhost:" + servicePort);
+            stomp = new Stomp("tcp://localhost:" + servicePort.getPort());
         }
 
         return stomp;
diff --git 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookBasePathTest.java
 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookBasePathTest.java
index 41012916c73b..ee525c725ca6 100644
--- 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookBasePathTest.java
+++ 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookBasePathTest.java
@@ -87,7 +87,7 @@ public class WebhookBasePathTest extends WebhookTestBase {
 
                 restConfiguration()
                         .host("0.0.0.0")
-                        .port(port);
+                        .port(port.getPort());
 
                 from("webhook:wb-delegate://xx?webhookPath=uri0")
                         .transform(body().prepend("msg: "));
diff --git 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookHttpBindingTest.java
 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookHttpBindingTest.java
index 6ec21661f0df..e5c34c837f39 100644
--- 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookHttpBindingTest.java
+++ 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookHttpBindingTest.java
@@ -70,7 +70,7 @@ public class WebhookHttpBindingTest extends WebhookTestBase {
 
                 restConfiguration()
                         .host("0.0.0.0")
-                        .port(port);
+                        .port(port.getPort());
 
                 from("webhook:wb-delegate://xx")
                         .transform(body().prepend("msg: "));
diff --git 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookMultiRouteTest.java
 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookMultiRouteTest.java
index 13165caaaee1..9db0e699d217 100644
--- 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookMultiRouteTest.java
+++ 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookMultiRouteTest.java
@@ -57,7 +57,7 @@ public class WebhookMultiRouteTest extends WebhookTestBase {
 
                 restConfiguration()
                         .host("0.0.0.0")
-                        .port(port);
+                        .port(port.getPort());
 
                 from("webhook:wb-delegate://yy")
                         .transform(body().prepend("uri: "));
diff --git 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookPathTest.java
 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookPathTest.java
index 7d7e7f59837c..f8a249a46ea0 100644
--- 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookPathTest.java
+++ 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookPathTest.java
@@ -73,7 +73,7 @@ public class WebhookPathTest extends WebhookTestBase {
 
                 restConfiguration()
                         .host("0.0.0.0")
-                        .port(port);
+                        .port(port.getPort());
 
                 from("webhook:wb-delegate://xx")
                         .transform(body().prepend("msg: "));
diff --git 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookRegistrationTest.java
 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookRegistrationTest.java
index 97309ce187b4..ded586efbaf0 100644
--- 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookRegistrationTest.java
+++ 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookRegistrationTest.java
@@ -47,7 +47,7 @@ public class WebhookRegistrationTest extends WebhookTestBase {
             public void configure() {
                 restConfiguration()
                         .host("0.0.0.0")
-                        .port(port);
+                        .port(port.getPort());
 
                 from("webhook:wb-delegate://xx")
                         .transform(body().prepend("msg: "));
diff --git 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookTestBase.java
 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookTestBase.java
index f33fd4e26195..c5cc1ae561fb 100644
--- 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookTestBase.java
+++ 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookTestBase.java
@@ -18,15 +18,11 @@ package org.apache.camel.component.webhook;
 
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit6.CamelTestSupport;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class WebhookTestBase extends CamelTestSupport {
 
-    protected static int port;
-
-    @BeforeAll
-    public static void initPort() {
-        port = AvailablePortFinder.getNextAvailable();
-    }
+    @RegisterExtension
+    static AvailablePortFinder.Port port = AvailablePortFinder.find();
 
 }
diff --git 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookUriEncodingTest.java
 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookUriEncodingTest.java
index 247f40136e2c..a1e60936d8e4 100644
--- 
a/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookUriEncodingTest.java
+++ 
b/components/camel-webhook/src/test/java/org/apache/camel/component/webhook/WebhookUriEncodingTest.java
@@ -59,7 +59,7 @@ public class WebhookUriEncodingTest extends WebhookTestBase {
 
                 restConfiguration()
                         .host("0.0.0.0")
-                        .port(port);
+                        .port(port.getPort());
 
                 
from("webhook:wb-delegate://xx?webhookBasePath=/base&webhookPath=/uri&foo=hello}
 world&bar=RAW(hello} world)")
                         .transform(body().prepend("msg: "));
diff --git 
a/components/camel-whatsapp/src/test/java/org/apache/camel/component/whatsapp/WhatsAppWebhookTest.java
 
b/components/camel-whatsapp/src/test/java/org/apache/camel/component/whatsapp/WhatsAppWebhookTest.java
index c7d03aac6a23..073f7f74e0f1 100644
--- 
a/components/camel-whatsapp/src/test/java/org/apache/camel/component/whatsapp/WhatsAppWebhookTest.java
+++ 
b/components/camel-whatsapp/src/test/java/org/apache/camel/component/whatsapp/WhatsAppWebhookTest.java
@@ -24,7 +24,6 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.webhook.WebhookConfiguration;
 import org.apache.camel.component.webhook.WebhookEndpoint;
-import org.apache.camel.test.AvailablePortFinder;
 import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -87,7 +86,6 @@ public class WhatsAppWebhookTest extends WhatsAppTestSupport {
 
     @Override
     protected void doPreSetup() {
-        port = AvailablePortFinder.getNextAvailable();
     }
 
     protected WhatsAppApiConfig getWhatsAppApiConfig() {
diff --git 
a/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/EndpointQueryParamTest.java
 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/EndpointQueryParamTest.java
index e19a182e123d..e6b3dd72e1c7 100644
--- 
a/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/EndpointQueryParamTest.java
+++ 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/EndpointQueryParamTest.java
@@ -27,14 +27,14 @@ class EndpointQueryParamTest extends BaseEndpointDslTest {
         return new EndpointRouteBuilder() {
             @Override
             public void configure() {
-                int port = AvailablePortFinder.getNextAvailable();
-                
restConfiguration().component("jetty").host("localhost").port(port);
+                AvailablePortFinder.Port port = AvailablePortFinder.find();
+                
restConfiguration().component("jetty").host("localhost").port(port.getPort());
                 rest().get("path/xyz")
                     .to("mock:result");
                 from(direct("test"))
-                        
.to(http(String.format("localhost:%d/path/xyz?param1=1&param2=2", 
port)).httpMethod("GET"));
+                        
.to(http(String.format("localhost:%d/path/xyz?param1=1&param2=2", 
port.getPort())).httpMethod("GET"));
                 from(direct("test2"))
-                        
.toF("http://localhost:%d/path/xyz?param1=1&param2=2&httpMethod=GET";, port);
+                        
.toF("http://localhost:%d/path/xyz?param1=1&param2=2&httpMethod=GET";, 
port.getPort());
             }
         };
     }
diff --git 
a/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/RestDslTest.java
 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/RestDslTest.java
index 72d8f8293a1a..5656902dca9f 100644
--- 
a/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/RestDslTest.java
+++ 
b/dsl/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/RestDslTest.java
@@ -26,9 +26,9 @@ public class RestDslTest extends BaseEndpointDslTest {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        int port = AvailablePortFinder.getNextAvailable();
+        AvailablePortFinder.Port port = AvailablePortFinder.find();
         VertxPlatformHttpServerConfiguration conf = new 
VertxPlatformHttpServerConfiguration();
-        conf.setBindPort(port);
+        conf.setBindPort(port.getPort());
 
         CamelContext context = super.createCamelContext();
         context.addService(new VertxPlatformHttpServer(conf));
diff --git 
a/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/RunCommandOnMqttITCase.java
 
b/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/RunCommandOnMqttITCase.java
index 26d0107f8529..c3e46d8f7ec5 100644
--- 
a/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/RunCommandOnMqttITCase.java
+++ 
b/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/RunCommandOnMqttITCase.java
@@ -26,17 +26,19 @@ import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.testcontainers.containers.GenericContainer;
 
 @Tag("container-only")
 public class RunCommandOnMqttITCase extends JBangTestSupport {
 
-    private static int mqttPort = AvailablePortFinder.getNextAvailable();
+    @RegisterExtension
+    static AvailablePortFinder.Port mqttPort = AvailablePortFinder.find();
     private static MosquittoLocalContainerService service;
 
     @BeforeAll
     public static void init() {
-        service = new MosquittoLocalContainerService(mqttPort);
+        service = new MosquittoLocalContainerService(mqttPort.getPort());
         service.initialize();
     }
 

Reply via email to