You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/08/31 15:06:38 UTC

[camel] branch main updated: (chores) camel-components: replace duplicated code (#11258)

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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 785dc429eab (chores) camel-components: replace duplicated code (#11258)
785dc429eab is described below

commit 785dc429eabbb7084cfc4b9401fe9f55cadb9a07
Author: Otavio Rodolfo Piske <or...@users.noreply.github.com>
AuthorDate: Thu Aug 31 17:06:31 2023 +0200

    (chores) camel-components: replace duplicated code (#11258)
    
    Use the StringHelper before method as it avoids traversing the string twice and is already defined on StringHelper
---
 .../atmosphere/websocket/WebsocketEndpoint.java     |  6 ++----
 .../camel/component/aws2/s3/utils/AWS2S3Utils.java  |  1 +
 .../component/file/azure/FilesConfiguration.java    |  1 -
 .../camel/component/file/azure/FilesURIStrings.java |  6 ++----
 .../component/disruptor/DisruptorComponent.java     |  7 ++-----
 .../camel/component/file/remote/FtpComponent.java   |  7 ++-----
 .../camel/component/file/remote/SftpComponent.java  |  6 ++----
 .../camel/component/jms/JmsSendDynamicAware.java    | 21 +++++++++++----------
 .../apache/camel/component/scp/ScpComponent.java    |  5 +++--
 .../component/kafka/KafkaSendDynamicAware.java      |  8 +++-----
 .../camel/component/mllp/MllpTcpClientProducer.java |  9 +++------
 .../mllp/internal/TcpServerAcceptThread.java        |  8 ++------
 .../mllp/internal/TcpServerBindThread.java          |  8 ++------
 .../TcpServerConsumerValidationRunnable.java        |  8 ++------
 .../mllp/internal/TcpSocketConsumerRunnable.java    |  8 ++------
 .../handlers/HttpServerMultiplexChannelHandler.java |  6 ++----
 .../paho/mqtt5/PahoMqtt5SendDynamicAware.java       |  8 +++-----
 .../camel/component/paho/PahoSendDynamicAware.java  |  9 ++++-----
 .../camel/component/sjms/SjmsSendDynamicAware.java  |  8 +++-----
 .../SpringRabbitMQSendDynamicAware.java             |  8 +++-----
 .../xtokenizer/XMLTokenExpressionIterator.java      |  2 +-
 .../apache/camel/test/junit5/CamelTestSupport.java  |  6 +-----
 .../undertow/handlers/RestRootHandler.java          |  6 ++----
 23 files changed, 58 insertions(+), 104 deletions(-)

diff --git a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java
index f6f40d18d79..b8e89f424e1 100644
--- a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java
+++ b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java
@@ -28,6 +28,7 @@ import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
+import org.apache.camel.util.StringHelper;
 
 /**
  * Expose WebSocket endpoints using the Atmosphere framework.
@@ -56,10 +57,7 @@ public class WebsocketEndpoint extends ServletEndpoint {
     public WebsocketEndpoint(String endPointURI, WebsocketComponent component, URI httpUri) throws URISyntaxException {
         super(endPointURI, component, httpUri);
 
-        //TODO find a better way of assigning the store
-        int idx = endPointURI.indexOf('?');
-
-        this.servicePath = idx > -1 ? endPointURI.substring(0, idx) : endPointURI;
+        this.servicePath = StringHelper.before(endPointURI, "?", endPointURI);
         this.store = component.getWebSocketStore(servicePath);
     }
 
diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java
index fa166fdcdb8..d99e4405afa 100644
--- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java
+++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java
@@ -26,6 +26,7 @@ import org.apache.camel.StreamCache;
 import org.apache.camel.component.aws2.s3.AWS2S3Configuration;
 import org.apache.camel.component.aws2.s3.AWS2S3Constants;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
 import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
 import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
 
diff --git a/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesConfiguration.java b/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesConfiguration.java
index a70eeff832a..98ada132def 100644
--- a/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesConfiguration.java
+++ b/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesConfiguration.java
@@ -93,7 +93,6 @@ public class FilesConfiguration extends RemoteFileConfiguration {
     public void setHost(String accountOrHostname) {
         var dot = accountOrHostname.indexOf('.');
         var hasDot = dot >= 0;
-        account = hasDot ? accountOrHostname.substring(0, dot) : accountOrHostname;
         super.setHost(hasDot ? accountOrHostname : account + '.' + DEFAULT_INTERNET_DOMAIN);
     }
 
diff --git a/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesURIStrings.java b/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesURIStrings.java
index 28c5ec65f12..27cd181a0e7 100644
--- a/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesURIStrings.java
+++ b/components/camel-azure/camel-azure-files/src/main/java/org/apache/camel/component/file/azure/FilesURIStrings.java
@@ -20,6 +20,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Collections;
 
+import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
 
 /**
@@ -41,10 +42,7 @@ final class FilesURIStrings {
      * $ for the expression (file language)
      */
     static URI getBaseURI(String uri) throws URISyntaxException {
-        String baseUri = uri;
-        if (uri.indexOf(QUERY_SEPARATOR) != -1) {
-            baseUri = uri.substring(0, uri.indexOf(QUERY_SEPARATOR));
-        }
+        String baseUri = StringHelper.before(uri, QUERY_SEPARATOR, uri);
         return new URI(baseUri);
     }
 
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java
index 62b3f567a34..13e96c65b86 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorComponent.java
@@ -23,6 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -165,11 +166,7 @@ public class DisruptorComponent extends DefaultComponent {
     }
 
     public static String getDisruptorKey(String uri) {
-        if (uri.contains("?")) {
-            // strip parameters
-            uri = uri.substring(0, uri.indexOf('?'));
-        }
-        return uri;
+        return StringHelper.before(uri, "?", uri);
     }
 
     @Override
diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpComponent.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpComponent.java
index 124ea641ebf..2d05aa85ab5 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpComponent.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpComponent.java
@@ -26,6 +26,7 @@ import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 import org.apache.camel.util.PropertiesHelper;
+import org.apache.camel.util.StringHelper;
 import org.apache.commons.net.ftp.FTPFile;
 
 /**
@@ -66,11 +67,7 @@ public class FtpComponent extends RemoteFileComponent<FTPFile> {
      * $ for the expression (file language)
      */
     protected String getBaseUri(String uri) {
-        String baseUri = uri;
-        if (uri.indexOf('?') != -1) {
-            baseUri = uri.substring(0, uri.indexOf('?'));
-        }
-        return baseUri;
+        return StringHelper.before(uri, "?", uri);
     }
 
     /**
diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpComponent.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpComponent.java
index 1aca05b544f..9314b7a3f83 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpComponent.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpComponent.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.file.GenericFileEndpoint;
 import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.util.StringHelper;
 
 /**
  * Secure FTP Component
@@ -45,10 +46,7 @@ public class SftpComponent extends RemoteFileComponent<SftpRemoteFile> {
         // and the URI constructor will regard $ as an illegal character and we
         // dont want to enforce end users to
         // to escape the $ for the expression (file language)
-        String baseUri = uri;
-        if (uri.contains("?")) {
-            baseUri = uri.substring(0, uri.indexOf('?'));
-        }
+        String baseUri = StringHelper.before(uri, "?", uri);
 
         // lets make sure we create a new configuration as each endpoint can
         // customize its own version
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java
index 28a5403b343..d5877c83aa9 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsSendDynamicAware.java
@@ -105,22 +105,23 @@ public class JmsSendDynamicAware extends ServiceSupport implements SendDynamicAw
     private String parseDestinationName(String uri) {
         // strip query
         uri = uri.replaceFirst(scheme + "://", ":");
-        int pos = uri.indexOf('?');
-        if (pos != -1) {
-            uri = uri.substring(0, pos);
-        }
+        uri = StringHelper.before(uri, "?", uri);
 
         // destination name is after last colon (but not after double colon)
         String shortUri = StringHelper.before(uri, "::");
-        pos = shortUri == null
-                ? uri.lastIndexOf(':')
-                : shortUri.lastIndexOf(':');
-
-        if (pos != -1) {
-            return uri.substring(pos + 1);
+        final int lastIdx = lastIndexOneOf(uri, shortUri);
+        if (lastIdx != -1) {
+            return uri.substring(lastIdx + 1);
         } else {
             return null;
         }
     }
 
+    private static int lastIndexOneOf(String uri, String shortUri) {
+        if (shortUri == null) {
+            return uri.lastIndexOf(':');
+        }
+        return shortUri.lastIndexOf(':');
+    }
+
 }
diff --git a/components/camel-jsch/src/main/java/org/apache/camel/component/scp/ScpComponent.java b/components/camel-jsch/src/main/java/org/apache/camel/component/scp/ScpComponent.java
index 7e7eaa9d34b..898c588c6bd 100644
--- a/components/camel-jsch/src/main/java/org/apache/camel/component/scp/ScpComponent.java
+++ b/components/camel-jsch/src/main/java/org/apache/camel/component/scp/ScpComponent.java
@@ -25,6 +25,7 @@ import org.apache.camel.component.file.GenericFileEndpoint;
 import org.apache.camel.component.file.remote.RemoteFileComponent;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.util.StringHelper;
 
 /**
  * Component providing secure messaging using JSch
@@ -45,8 +46,8 @@ public class ScpComponent extends RemoteFileComponent<ScpFile> {
     @Override
     protected GenericFileEndpoint<ScpFile> buildFileEndpoint(String uri, String remaining, Map<String, Object> parameters)
             throws Exception {
-        int query = uri.indexOf('?');
-        return new ScpEndpoint(uri, this, new ScpConfiguration(new URI(query >= 0 ? uri.substring(0, query) : uri)));
+        String tmp = StringHelper.before(uri, "?", uri);
+        return new ScpEndpoint(uri, this, new ScpConfiguration(new URI(tmp)));
     }
 
     @Override
diff --git a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java
index 27eda63906c..7f7cee30b06 100644
--- a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java
+++ b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaSendDynamicAware.java
@@ -104,12 +104,10 @@ public class KafkaSendDynamicAware extends ServiceSupport implements SendDynamic
 
     private String parseTopicName(String uri) {
         // strip query
-        int pos = uri.indexOf('?');
-        if (pos != -1) {
-            uri = uri.substring(0, pos);
-        }
+        uri = StringHelper.before(uri, "?", uri);
+
         // topic name is after first colon
-        pos = uri.indexOf(':');
+        int pos = uri.indexOf(':');
         if (pos != -1) {
             uri = uri.substring(pos + 1);
         } else {
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java
index d8470b4097b..19796a11e4b 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java
@@ -39,6 +39,7 @@ import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.component.mllp.internal.Hl7Util;
 import org.apache.camel.component.mllp.internal.MllpSocketBuffer;
 import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -109,12 +110,8 @@ public class MllpTcpClientProducer extends DefaultProducer implements Runnable {
         if (getConfiguration().hasIdleTimeout()) {
             // Get the URI without options
             String fullEndpointKey = getEndpoint().getEndpointKey();
-            String endpointKey;
-            if (fullEndpointKey.contains("?")) {
-                endpointKey = fullEndpointKey.substring(0, fullEndpointKey.indexOf('?'));
-            } else {
-                endpointKey = fullEndpointKey;
-            }
+            String endpointKey = StringHelper.before(fullEndpointKey, "?", fullEndpointKey);
+
 
             idleTimeoutExecutor = Executors.newSingleThreadScheduledExecutor(new IdleTimeoutThreadFactory(endpointKey));
         }
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerAcceptThread.java b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerAcceptThread.java
index 99da06e67a3..29cbb35dbc6 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerAcceptThread.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerAcceptThread.java
@@ -25,6 +25,7 @@ import java.net.SocketTimeoutException;
 import org.apache.camel.Route;
 import org.apache.camel.component.mllp.MllpTcpServerConsumer;
 import org.apache.camel.spi.UnitOfWork;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -58,12 +59,7 @@ public class TcpServerAcceptThread extends Thread {
 
         // Get the URI without options
         String fullEndpointKey = consumer.getEndpoint().getEndpointKey();
-        String endpointKey;
-        if (fullEndpointKey.contains("?")) {
-            endpointKey = fullEndpointKey.substring(0, fullEndpointKey.indexOf('?'));
-        } else {
-            endpointKey = fullEndpointKey;
-        }
+        String endpointKey = StringHelper.before(fullEndpointKey, "?", fullEndpointKey);
 
         // Now put it all together
         return String.format("%s[%s] - %s", className, endpointKey, serverSocket.getLocalSocketAddress());
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerBindThread.java b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerBindThread.java
index f3820d32959..ca3e24d3cbd 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerBindThread.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerBindThread.java
@@ -28,6 +28,7 @@ import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.task.BlockingTask;
 import org.apache.camel.support.task.Tasks;
 import org.apache.camel.support.task.budget.Budgets;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -44,12 +45,7 @@ public class TcpServerBindThread extends Thread {
 
         // Get the URI without options
         String fullEndpointKey = consumer.getEndpoint().getEndpointKey();
-        String endpointKey;
-        if (fullEndpointKey.contains("?")) {
-            endpointKey = fullEndpointKey.substring(0, fullEndpointKey.indexOf('?'));
-        } else {
-            endpointKey = fullEndpointKey;
-        }
+        String endpointKey = StringHelper.before(fullEndpointKey, "?", fullEndpointKey);
 
         this.setName(String.format("%s - %s", this.getClass().getSimpleName(), endpointKey));
     }
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerConsumerValidationRunnable.java b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerConsumerValidationRunnable.java
index ae44243e7a2..79edeff9a17 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerConsumerValidationRunnable.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpServerConsumerValidationRunnable.java
@@ -25,6 +25,7 @@ import org.apache.camel.Route;
 import org.apache.camel.component.mllp.MllpSocketException;
 import org.apache.camel.component.mllp.MllpTcpServerConsumer;
 import org.apache.camel.spi.UnitOfWork;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -104,12 +105,7 @@ public class TcpServerConsumerValidationRunnable implements Runnable {
     String createThreadName() {
         // Get the URI without options
         String fullEndpointKey = consumer.getEndpoint().getEndpointKey();
-        String endpointKey;
-        if (fullEndpointKey.contains("?")) {
-            endpointKey = fullEndpointKey.substring(0, fullEndpointKey.indexOf('?'));
-        } else {
-            endpointKey = fullEndpointKey;
-        }
+        String endpointKey = StringHelper.before(fullEndpointKey, "?", fullEndpointKey);
 
         // Now put it all together
         return String.format("%s[%s] - %s", this.getClass().getSimpleName(), endpointKey, combinedAddress);
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpSocketConsumerRunnable.java b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpSocketConsumerRunnable.java
index 3b16b448f19..3d9e8f636fe 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpSocketConsumerRunnable.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/TcpSocketConsumerRunnable.java
@@ -26,6 +26,7 @@ import org.apache.camel.component.mllp.MllpInvalidMessageException;
 import org.apache.camel.component.mllp.MllpSocketException;
 import org.apache.camel.component.mllp.MllpTcpServerConsumer;
 import org.apache.camel.spi.UnitOfWork;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -110,12 +111,7 @@ public class TcpSocketConsumerRunnable implements Runnable {
     String createThreadName() {
         // Get the URI without options
         String fullEndpointKey = consumer.getEndpoint().getEndpointKey();
-        String endpointKey;
-        if (fullEndpointKey.contains("?")) {
-            endpointKey = fullEndpointKey.substring(0, fullEndpointKey.indexOf('?'));
-        } else {
-            endpointKey = fullEndpointKey;
-        }
+        String endpointKey = StringHelper.before(fullEndpointKey, "?", fullEndpointKey);
 
         // Now put it all together
         return String.format("%s[%s] - %s", this.getClass().getSimpleName(), endpointKey, combinedAddress);
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
index edbf0a07062..151c32beae7 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
@@ -42,6 +42,7 @@ import org.apache.camel.component.netty.http.NettyHttpConfiguration;
 import org.apache.camel.component.netty.http.NettyHttpConstants;
 import org.apache.camel.component.netty.http.NettyHttpConsumer;
 import org.apache.camel.support.RestConsumerContextPathMatcher;
+import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -282,10 +283,7 @@ public class HttpServerMultiplexChannelHandler extends SimpleChannelInboundHandl
         }
 
         // strip out query parameters
-        int idx = path.indexOf('?');
-        if (idx > -1) {
-            path = path.substring(0, idx);
-        }
+        path = StringHelper.before(path, "?", path);
 
         // strip of ending /
         if (path.endsWith("/")) {
diff --git a/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java b/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java
index 14dab516ad9..57b66644b52 100644
--- a/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java
+++ b/components/camel-paho-mqtt5/src/main/java/org/apache/camel/component/paho/mqtt5/PahoMqtt5SendDynamicAware.java
@@ -105,12 +105,10 @@ public class PahoMqtt5SendDynamicAware extends ServiceSupport implements SendDyn
     private String parseTopicName(String uri) {
         // strip query
         uri = uri.replaceFirst(scheme + "://", ":");
-        int pos = uri.indexOf('?');
-        if (pos != -1) {
-            uri = uri.substring(0, pos);
-        }
+        uri = StringHelper.before(uri, "?", uri);
+
         // topic name is after first colon
-        pos = uri.indexOf(':');
+        int pos = uri.indexOf(':');
         if (pos != -1) {
             return uri.substring(pos + 1);
         } else {
diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java
index a55500ed784..74e05e20fa1 100644
--- a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java
+++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoSendDynamicAware.java
@@ -105,12 +105,11 @@ public class PahoSendDynamicAware extends ServiceSupport implements SendDynamicA
     private String parseTopicName(String uri) {
         // strip query
         uri = uri.replaceFirst(scheme + "://", ":");
-        int pos = uri.indexOf('?');
-        if (pos != -1) {
-            uri = uri.substring(0, pos);
-        }
+
+        uri = StringHelper.before(uri, "?", uri);
         // topic name is after first colon
-        pos = uri.indexOf(':');
+
+        int pos = uri.indexOf(':');
         if (pos != -1) {
             return uri.substring(pos + 1);
         } else {
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java
index 81d99f5dc85..337de7162e2 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsSendDynamicAware.java
@@ -105,12 +105,10 @@ public class SjmsSendDynamicAware extends ServiceSupport implements SendDynamicA
     private String parseDestinationName(String uri) {
         // strip query
         uri = uri.replaceFirst(scheme + "://", ":");
-        int pos = uri.indexOf('?');
-        if (pos != -1) {
-            uri = uri.substring(0, pos);
-        }
+        uri = StringHelper.before(uri, "?", uri);
+
         // destination name is after last colon
-        pos = uri.lastIndexOf(':');
+        int pos = uri.lastIndexOf(':');
         if (pos != -1) {
             return uri.substring(pos + 1);
         } else {
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
index 0b2eb662086..1e9ea1ff8ba 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQSendDynamicAware.java
@@ -128,12 +128,10 @@ public class SpringRabbitMQSendDynamicAware extends ServiceSupport implements Se
     private String parseExchangeName(String uri) {
         // strip query
         uri = uri.replaceFirst(scheme + "://", ":");
-        int pos = uri.indexOf('?');
-        if (pos != -1) {
-            uri = uri.substring(0, pos);
-        }
+        uri = StringHelper.before(uri, "?", uri);
+
         // exchange name is after first colon
-        pos = uri.indexOf(':');
+        int pos = uri.indexOf(':');
         if (pos != -1) {
             return uri.substring(pos + 1);
         } else {
diff --git a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
index 60f08c218b7..ccb6580bf5b 100644
--- a/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
+++ b/components/camel-stax/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
@@ -210,7 +210,7 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
                 String s = sl[i];
                 if (s.length() > 0) {
                     int d = s.indexOf(':');
-                    String pfx = d > 0 ? s.substring(0, d) : "";
+                    String pfx = StringHelper.before(s, ":", "");
                     this.splitpath[i] = new AttributedQName(
                             "*".equals(pfx) ? "*" : nsmap == null ? "" : nsmap.get(pfx), d > 0 ? s.substring(d + 1) : s, pfx);
                 }
diff --git a/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java b/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
index c29f5fa2c04..349e5ca2a12 100644
--- a/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
+++ b/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
@@ -873,11 +873,7 @@ public abstract class CamelTestSupport
             throw RuntimeCamelException.wrapRuntimeException(e);
         }
         // strip query
-        int idx = n.indexOf('?');
-        if (idx != -1) {
-            n = n.substring(0, idx);
-        }
-        final String target = n;
+        final String target = StringHelper.before(n, "?", n);
 
         // lookup endpoints in registry and try to find it
         MockEndpoint found = (MockEndpoint) context.getEndpointRegistry().values().stream()
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/RestRootHandler.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/RestRootHandler.java
index 10f498b67fc..93ae1c6e88e 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/RestRootHandler.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/RestRootHandler.java
@@ -29,6 +29,7 @@ import io.undertow.server.HttpServerExchange;
 import io.undertow.util.Headers;
 import org.apache.camel.component.undertow.UndertowConsumer;
 import org.apache.camel.support.RestConsumerContextPathMatcher;
+import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
 
 /**
@@ -160,10 +161,7 @@ public class RestRootHandler implements HttpHandler {
         }
 
         // strip out query parameters
-        int idx = path.indexOf('?');
-        if (idx > -1) {
-            path = path.substring(0, idx);
-        }
+        path = StringHelper.before(path, "?", path);
 
         // strip of ending /
         if (path.endsWith("/")) {