You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/08/12 11:28:21 UTC

[camel] branch master updated: CAMEL-15390: CollectionStringBuilder - Use JDK util methods instead (#4085)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9a7af71  CAMEL-15390: CollectionStringBuilder - Use JDK util methods instead (#4085)
9a7af71 is described below

commit 9a7af71ae489ce126c0a57c90c8b7e8ac5bb5185
Author: Zineb BENDHIBA <be...@gmail.com>
AuthorDate: Wed Aug 12 13:28:01 2020 +0200

    CAMEL-15390: CollectionStringBuilder - Use JDK util methods instead (#4085)
    
    * CAMEL-15390: CollectionStringBuilder - Use JDK util methods instead
    
    * CAMEL-15390: remove duplicates toString
---
 .../camel/openapi/OpenApiRestProducerFactory.java  | 18 +++++-----
 .../apache/camel/component/rest/RestProducer.java  | 10 +++---
 .../org/apache/camel/spring/SpringTestSupport.java |  8 ++---
 .../sql/DefaultSqlPrepareStatementStrategy.java    |  8 ++---
 .../camel/swagger/SwaggerRestProducerFactory.java  | 14 ++++----
 .../spring/junit5/CamelAnnotationsHandler.java     |  8 ++---
 .../junit5/CamelSpringTestContextLoader.java       | 21 ------------
 .../camel/test/spring/CamelAnnotationsHandler.java |  8 ++---
 .../test/spring/CamelSpringTestContextLoader.java  | 21 ------------
 .../camel/component/undertow/UndertowConsumer.java |  8 ++---
 .../zookeeper/ZooKeeperConfiguration.java          |  8 ++---
 .../camel/impl/engine/DefaultShutdownStrategy.java |  8 ++---
 .../org/apache/camel/builder/DataFormatClause.java | 10 +++---
 .../java/org/apache/camel/impl/DefaultModel.java   | 10 +++---
 .../camel/model/dataformat/JsonDataFormat.java     | 11 +++---
 .../camel/model/dataformat/XStreamDataFormat.java  | 10 +++---
 .../camel/model/language/ExpressionDefinition.java |  6 ++--
 .../camel/core/xml/CamelJMXAgentDefinition.java    | 39 ++++++++++------------
 .../converter/stream/CachedOutputStreamTest.java   | 11 +++---
 .../mbean/ManagedFailoverLoadBalancer.java         |  8 ++---
 20 files changed, 101 insertions(+), 144 deletions(-)

diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java
index 2c43e58..a8c9aed 100644
--- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java
+++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/OpenApiRestProducerFactory.java
@@ -20,6 +20,7 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.StringJoiner;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -38,7 +39,6 @@ import org.apache.camel.Producer;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RestProducerFactory;
 import org.apache.camel.support.CamelContextHelper;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.IOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -155,8 +155,8 @@ public class OpenApiRestProducerFactory implements RestProducerFactory {
             LOG.debug("Using RestProducerFactory: {}", factory);
 
             if (produces == null) {
-                CollectionStringBuffer csb = new CollectionStringBuffer(",");
-                List<String> list = new ArrayList<String>();
+                StringJoiner producesBuilder = new StringJoiner(",");
+                List<String> list = new ArrayList<>();
                 if (operation instanceof Oas20Operation) {
                     list = ((Oas20Operation)operation).produces;
                 } else if (operation instanceof Oas30Operation) {
@@ -176,14 +176,14 @@ public class OpenApiRestProducerFactory implements RestProducerFactory {
                 }
                 if (list != null) {
                     for (String s : list) {
-                        csb.append(s);
+                        producesBuilder.add(s);
                     }
                 }
-                produces = csb.isEmpty() ? null : csb.toString();
+                produces = producesBuilder.length() == 0 ? null : producesBuilder.toString();
             }
             if (consumes == null) {
-                CollectionStringBuffer csb = new CollectionStringBuffer(",");
-                List<String> list = new ArrayList<String>();
+                StringJoiner consumesBuilder = new StringJoiner(",");
+                List<String> list = new ArrayList<>();
                 if (operation instanceof Oas20Operation) {
                     list = ((Oas20Operation)operation).consumes;
                 } else if (operation instanceof Oas30Operation) {
@@ -203,10 +203,10 @@ public class OpenApiRestProducerFactory implements RestProducerFactory {
                 }
                 if (list != null) {
                     for (String s : list) {
-                        csb.append(s);
+                        consumesBuilder.add(s);
                     }
                 }
-                consumes = csb.isEmpty() ? null : csb.toString();
+                consumes = consumesBuilder.length() == 0 ? null : consumesBuilder.toString();
             }
 
             String basePath = null;
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java
index 1ae664a..46ac849 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestProducer.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Locale;
 import java.util.Map;
+import java.util.StringJoiner;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
@@ -39,7 +40,6 @@ import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.service.ServiceHelper;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
@@ -152,7 +152,7 @@ public class RestProducer extends DefaultAsyncProducer {
                 // resolve template and replace {key} with the values form the exchange
                 // each {} is a parameter (url templating)
                 String[] arr = resolvedUriTemplate.split("\\/");
-                CollectionStringBuffer csb = new CollectionStringBuffer("/");
+                StringJoiner uriTemplateBuilder = new StringJoiner("/");
                 for (String a : arr) {
                     String resolvedUriParam = resolveHeaderPlaceholders(a, inMessage);
 
@@ -162,12 +162,12 @@ public class RestProducer extends DefaultAsyncProducer {
                             && !resolvedUriParam.contains("{")
                             && !resolvedUriParam.contains("}")) {
                         hasPath = true;
-                        csb.append(resolvedUriParam);
+                        uriTemplateBuilder.add(resolvedUriParam);
                     } else {
-                        csb.append(a);
+                        uriTemplateBuilder.add(a);
                     }
                 }
-                resolvedUriTemplate = csb.toString();
+                resolvedUriTemplate = uriTemplateBuilder.toString();
             }
         }
 
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java b/components/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java
index 1a94744..e07dc4f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java
@@ -21,6 +21,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.StringJoiner;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
@@ -28,7 +29,6 @@ import org.apache.camel.api.management.JmxSystemPropertyKeys;
 import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.scan.AssignableToPackageScanFilter;
 import org.apache.camel.impl.scan.InvertingPackageScanFilter;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -51,11 +51,11 @@ public abstract class SpringTestSupport extends ContextTestSupport {
         System.setProperty(JmxSystemPropertyKeys.DISABLED, Boolean.toString(!useJmx()));
         Class<?>[] excluded = excludeRoutes();
         if (excluded != null && excluded.length > 0) {
-            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            StringJoiner excludedRoutes = new StringJoiner(",");
             for (Class<?> clazz : excluded) {
-                csb.append(clazz.getName());
+                excludedRoutes.add(clazz.getName());
             }
-            System.setProperty(SpringCamelContext.EXCLUDE_ROUTES, csb.toString());
+            System.setProperty(SpringCamelContext.EXCLUDE_ROUTES, excludedRoutes.toString());
         }
 
         applicationContext = createApplicationContext();
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
index e1fa323..ba3d70b 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
@@ -24,13 +24,13 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
+import java.util.StringJoiner;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.support.ObjectHelper;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.StringQuoteHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,12 +68,12 @@ public class DefaultSqlPrepareStatementStrategy implements SqlPrepareStatementSt
                     Object parameter = lookupParameter(found, exchange, exchange.getIn().getBody());
                     if (parameter != null) {
                         Iterator it = createInParameterIterator(parameter);
-                        CollectionStringBuffer csb = new CollectionStringBuffer(",");
+                        StringJoiner replaceBuilder = new StringJoiner(",");
                         while (it.hasNext()) {
                             it.next();
-                            csb.append("\\?");
+                            replaceBuilder.add("\\?");
                         }
-                        String replace = csb.toString();
+                        String replace = replaceBuilder.toString();
                         String foundEscaped = found.replace("$", "\\$").replace("{", "\\{").replace("}", "\\}");
                         Matcher paramMatcher = Pattern.compile("\\:\\?in\\:" + foundEscaped, Pattern.MULTILINE).matcher(query);
                         query = paramMatcher.replaceAll(replace);
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java
index 49a651a..99d7a27 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/SwaggerRestProducerFactory.java
@@ -19,6 +19,7 @@ package org.apache.camel.swagger;
 import java.io.InputStream;
 import java.util.List;
 import java.util.Map;
+import java.util.StringJoiner;
 
 import io.swagger.models.Operation;
 import io.swagger.models.Path;
@@ -30,7 +31,6 @@ import org.apache.camel.Producer;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RestProducerFactory;
 import org.apache.camel.support.CamelContextHelper;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.IOHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -143,30 +143,30 @@ public class SwaggerRestProducerFactory implements RestProducerFactory {
             LOG.debug("Using RestProducerFactory: {}", factory);
 
             if (produces == null) {
-                CollectionStringBuffer csb = new CollectionStringBuffer(",");
+                StringJoiner producesBuilder = new StringJoiner(",");
                 List<String> list = operation.getProduces();
                 if (list == null) {
                     list = swagger.getProduces();
                 }
                 if (list != null) {
                     for (String s : list) {
-                        csb.append(s);
+                        producesBuilder.add(s);
                     }
                 }
-                produces = csb.isEmpty() ? null : csb.toString();
+                produces = producesBuilder.length() == 0 ? null : producesBuilder.toString();
             }
             if (consumes == null) {
-                CollectionStringBuffer csb = new CollectionStringBuffer(",");
+                StringJoiner consumesBuilder = new StringJoiner(",");
                 List<String> list = operation.getConsumes();
                 if (list == null) {
                     list = swagger.getConsumes();
                 }
                 if (list != null) {
                     for (String s : list) {
-                        csb.append(s);
+                        consumesBuilder.add(s);
                     }
                 }
-                consumes = csb.isEmpty() ? null : csb.toString();
+                consumes = consumesBuilder.length() == 0 ? null : consumesBuilder.toString();
             }
 
             String basePath;
diff --git a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java
index 23e2b6c..dabdf14 100644
--- a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java
+++ b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
+import java.util.StringJoiner;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 
@@ -37,7 +38,6 @@ import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.test.junit5.CamelTestSupport;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.config.BeanPostProcessor;
@@ -86,12 +86,12 @@ public final class CamelAnnotationsHandler {
         if (testClass.isAnnotationPresent(ExcludeRoutes.class)) {
             Class[] routes = testClass.getAnnotation(ExcludeRoutes.class).value();
             // need to setup this as a JVM system property
-            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            StringJoiner routesBuilder = new StringJoiner(",");
             for (Class clazz : routes) {
-                csb.append(clazz.getName());
+                routesBuilder.add(clazz.getName());
             }
             String key = SpringCamelContext.EXCLUDE_ROUTES;
-            String value = csb.toString();
+            String value = routesBuilder.toString();
 
             String exists = System.getProperty(key);
             if (exists != null) {
diff --git a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestContextLoader.java b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestContextLoader.java
index 2a62194..14345fe 100644
--- a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestContextLoader.java
+++ b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestContextLoader.java
@@ -17,47 +17,26 @@
 package org.apache.camel.test.spring.junit5;
 
 import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
 
-import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.api.management.JmxSystemPropertyKeys;
-import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
-import org.apache.camel.processor.interceptor.DefaultDebugger;
-import org.apache.camel.spi.Breakpoint;
-import org.apache.camel.spi.Debugger;
-import org.apache.camel.spi.EventNotifier;
-import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.test.ExcludingPackageScanClassResolver;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.apache.camel.test.spring.junit5.CamelSpringTestHelper.DoToSpringCamelContextsStrategy;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.beans.factory.support.RootBeanDefinition;
 import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.context.ApplicationContext;
-import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
 import org.springframework.context.annotation.AnnotationConfigUtils;
 import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.core.annotation.AnnotationUtils;
 import org.springframework.test.context.MergedContextConfiguration;
 import org.springframework.test.context.support.AbstractContextLoader;
 import org.springframework.test.context.support.AbstractGenericContextLoader;
 import org.springframework.test.context.support.GenericXmlContextLoader;
 import org.springframework.util.StringUtils;
 
-import static org.apache.camel.test.spring.junit5.CamelSpringTestHelper.getAllMethods;
-
 /**
  * Replacement for the default {@link GenericXmlContextLoader} that provides hooks for
  * processing some class level Camel related test annotations.
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java
index faf1a3b..f787bc0 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
+import java.util.StringJoiner;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 
@@ -37,7 +38,6 @@ import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.config.BeanPostProcessor;
@@ -86,12 +86,12 @@ public final class CamelAnnotationsHandler {
         if (testClass.isAnnotationPresent(ExcludeRoutes.class)) {
             Class[] routes = testClass.getAnnotation(ExcludeRoutes.class).value();
             // need to setup this as a JVM system property
-            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            StringJoiner routesBuilder = new StringJoiner(",");
             for (Class clazz : routes) {
-                csb.append(clazz.getName());
+                routesBuilder.add(clazz.getName());
             }
             String key = SpringCamelContext.EXCLUDE_ROUTES;
-            String value = csb.toString();
+            String value = routesBuilder.toString();
 
             String exists = System.getProperty(key);
             if (exists != null) {
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestContextLoader.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestContextLoader.java
index 9ca04e3..7618745 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestContextLoader.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestContextLoader.java
@@ -17,47 +17,26 @@
 package org.apache.camel.test.spring;
 
 import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
 
-import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.api.management.JmxSystemPropertyKeys;
-import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
-import org.apache.camel.processor.interceptor.DefaultDebugger;
-import org.apache.camel.spi.Breakpoint;
-import org.apache.camel.spi.Debugger;
-import org.apache.camel.spi.EventNotifier;
-import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.test.ExcludingPackageScanClassResolver;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.camel.test.spring.CamelSpringTestHelper.DoToSpringCamelContextsStrategy;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.beans.factory.support.RootBeanDefinition;
 import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
 import org.springframework.context.ApplicationContext;
-import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
 import org.springframework.context.annotation.AnnotationConfigUtils;
 import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.core.annotation.AnnotationUtils;
 import org.springframework.test.context.MergedContextConfiguration;
 import org.springframework.test.context.support.AbstractContextLoader;
 import org.springframework.test.context.support.AbstractGenericContextLoader;
 import org.springframework.test.context.support.GenericXmlContextLoader;
 import org.springframework.util.StringUtils;
 
-import static org.apache.camel.test.spring.CamelSpringTestHelper.getAllMethods;
-
 /**
  * Replacement for the default {@link GenericXmlContextLoader} that provides hooks for
  * processing some class level Camel related test annotations.
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
index 245b064..f66cb0e 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
@@ -24,6 +24,7 @@ import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.StringJoiner;
 
 import io.undertow.Handlers;
 import io.undertow.server.HttpHandler;
@@ -51,7 +52,6 @@ import org.apache.camel.component.undertow.handlers.CamelWebSocketHandler;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.support.EndpointHelper;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -157,7 +157,7 @@ public class UndertowConsumer extends DefaultConsumer implements HttpHandler, Su
     public void handleRequest(HttpServerExchange httpExchange) throws Exception {
         HttpString requestMethod = httpExchange.getRequestMethod();
         if (Methods.OPTIONS.equals(requestMethod) && !getEndpoint().isOptionsEnabled()) {
-            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            StringJoiner methodsBuilder = new StringJoiner(",");
 
             Collection<HttpHandlerRegistrationInfo> handlers = getEndpoint().getComponent().getHandlers();
             for (HttpHandlerRegistrationInfo reg : handlers) {
@@ -168,10 +168,10 @@ public class UndertowConsumer extends DefaultConsumer implements HttpHandler, Su
                     if (restrict.endsWith(",OPTIONS")) {
                         restrict = restrict.substring(0, restrict.length() - 8);
                     }
-                    csb.append(restrict);
+                    methodsBuilder.add(restrict);
                 }
             }
-            String allowedMethods = csb.toString();
+            String allowedMethods = methodsBuilder.toString();
             if (ObjectHelper.isEmpty(allowedMethods)) {
                 allowedMethods = getEndpoint().getHttpMethodRestrict();
             }
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperConfiguration.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperConfiguration.java
index 287614c..77ec1ad 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperConfiguration.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperConfiguration.java
@@ -18,13 +18,13 @@ package org.apache.camel.component.zookeeper;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.StringJoiner;
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * <code>ZookeeperConfiguration</code> encapsulates the configuration used to
@@ -80,11 +80,11 @@ public class ZooKeeperConfiguration implements Cloneable {
      */
     public String getServerUrls() {
         if (servers != null) {
-            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            StringJoiner serversBuilder = new StringJoiner(",");
             for (String server : servers) {
-                csb.append(server);
+                serversBuilder.add(server);
             }
-            return csb.toString();
+            return serversBuilder.toString();
         }
         return null;
     }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java
index 25597e8..af2b321 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.StringJoiner;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
@@ -51,7 +52,6 @@ import org.apache.camel.spi.ShutdownStrategy;
 import org.apache.camel.support.EventHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.URISupport;
@@ -647,15 +647,15 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
                 if (size > 0) {
                     try {
                         // build a message with inflight per route
-                        CollectionStringBuffer csb = new CollectionStringBuffer();
+                        StringJoiner inflightsBuilder = new StringJoiner(", ", " Inflights per route: [", "]");
                         for (Map.Entry<String, Integer> entry : routeInflight.entrySet()) {
                             String row = String.format("%s = %s", entry.getKey(), entry.getValue());
-                            csb.append(row);
+                            inflightsBuilder.add(row);
                         }
 
                         String msg = "Waiting as there are still " + size + " inflight and pending exchanges to complete, timeout in "
                                 + (TimeUnit.SECONDS.convert(timeout, timeUnit) - (loopCount++ * loopDelaySeconds)) + " seconds.";
-                        msg += " Inflights per route: [" + csb.toString() + "]";
+                        msg += inflightsBuilder.toString();
 
                         LOG.info(msg);
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java
index a0a59bd..e4e2388 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java
@@ -19,6 +19,7 @@ package org.apache.camel.builder;
 import java.nio.charset.Charset;
 import java.util.List;
 import java.util.Map;
+import java.util.StringJoiner;
 
 import org.w3c.dom.Node;
 
@@ -63,7 +64,6 @@ import org.apache.camel.model.dataformat.YAMLLibrary;
 import org.apache.camel.model.dataformat.ZipDeflaterDataFormat;
 import org.apache.camel.model.dataformat.ZipFileDataFormat;
 import org.apache.camel.support.jsse.KeyStoreParameters;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * An expression for constructing the different possible
@@ -890,12 +890,12 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
      * @param type the pojo class(es) xstream should use as allowed permission
      */
     public T xstream(String encoding, Class<?>... type) {
-        CollectionStringBuffer csb = new CollectionStringBuffer(",");
+        StringJoiner stringBuilder = new StringJoiner(",");
         for (Class<?> clazz : type) {
-            csb.append("+");
-            csb.append(clazz.getName());
+            stringBuilder.add("+");
+            stringBuilder.add(clazz.getName());
         }
-        return xstream(encoding, csb.toString());
+        return xstream(encoding, stringBuilder.toString());
     }
 
     /**
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
index 72a300c..7f72564 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.StringJoiner;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 
@@ -45,7 +46,6 @@ import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
-import org.apache.camel.util.CollectionStringBuffer;
 
 public class DefaultModel implements Model {
 
@@ -206,7 +206,7 @@ public class DefaultModel implements Model {
             throw new IllegalArgumentException("Cannot find RouteTemplate with id " + routeTemplateId);
         }
 
-        CollectionStringBuffer cbs = new CollectionStringBuffer();
+        StringJoiner templatesBuilder = new StringJoiner(", ");
         final Map<String, Object> prop = new HashMap();
         // include default values first from the template (and validate that we have inputs for all required parameters)
         if (target.getTemplateParameters() != null) {
@@ -216,13 +216,13 @@ public class DefaultModel implements Model {
                 } else {
                     // this is a required parameter do we have that as input
                     if (!parameters.containsKey(temp.getName())) {
-                        cbs.append(temp.getName());
+                        templatesBuilder.add(temp.getName());
                     }
                 }
             }
         }
-        if (!cbs.isEmpty()) {
-            throw new IllegalArgumentException("Route template " + routeTemplateId + " the following mandatory parameters must be provided: " + cbs.toString());
+        if (templatesBuilder.length() > 0) {
+            throw new IllegalArgumentException("Route template " + routeTemplateId + " the following mandatory parameters must be provided: " + templatesBuilder.toString());
         }
         // then override with user parameters
         if (parameters != null) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
index d2977e5..ba0fe41 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.model.dataformat;
 
+import java.util.StringJoiner;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
@@ -24,7 +26,6 @@ import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * Marshal POJOs to JSON and back.
@@ -326,12 +327,12 @@ public class JsonDataFormat extends DataFormatDefinition {
      * @see #setPermissions(String)
      */
     public void setPermissions(Class<?>... type) {
-        CollectionStringBuffer csb = new CollectionStringBuffer(",");
+        StringJoiner permissionsBuilder = new StringJoiner(",");
         for (Class<?> clazz : type) {
-            csb.append("+");
-            csb.append(clazz.getName());
+            permissionsBuilder.add("+");
+            permissionsBuilder.add(clazz.getName());
         }
-        setPermissions(csb.toString());
+        setPermissions(permissionsBuilder.toString());
     }
 
     public String getAllowUnmarshallType() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
index e3026fe..4588cde 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.StringJoiner;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -30,7 +31,6 @@ import javax.xml.bind.annotation.XmlRootElement;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * Marshal and unmarshal POJOs to/from XML using <a href="https://x-stream.github.io/">XStream</a> library.
@@ -271,12 +271,12 @@ public class XStreamDataFormat extends DataFormatDefinition {
      * @see #setPermissions(String)
      */
     public void setPermissions(Class<?>... type) {
-        CollectionStringBuffer csb = new CollectionStringBuffer(",");
+        StringJoiner permissionsBuilder = new StringJoiner(",");
         for (Class<?> clazz : type) {
-            csb.append("+");
-            csb.append(clazz.getName());
+            permissionsBuilder.add("+");
+            permissionsBuilder.add(clazz.getName());
         }
-        setPermissions(csb.toString());
+        setPermissions(permissionsBuilder.toString());
     }
 
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
index 0ea00ef..dedc663 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model.language;
 
 import java.util.List;
+import java.util.StringJoiner;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -34,7 +35,6 @@ import org.apache.camel.ExpressionFactory;
 import org.apache.camel.Predicate;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -78,9 +78,9 @@ public class ExpressionDefinition implements Expression, Predicate, ExpressionFa
     }
 
     public static String getLabel(List<ExpressionDefinition> expressions) {
-        CollectionStringBuffer buffer = new CollectionStringBuffer();
+        StringJoiner buffer = new StringJoiner(", ");
         for (ExpressionDefinition expression : expressions) {
-            buffer.append(expression.getLabel());
+            buffer.add(expression.getLabel());
         }
         return buffer.toString();
     }
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java
index 6366491..bfef187 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.core.xml;
 
+import java.util.StringJoiner;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
@@ -23,7 +25,6 @@ import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.model.IdentifiedType;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * JMX configuration.
@@ -205,53 +206,47 @@ public class CamelJMXAgentDefinition extends IdentifiedType {
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("CamelJMXAgent[");
-
-        CollectionStringBuffer csb = new CollectionStringBuffer();
+        StringJoiner buffer = new StringJoiner(", ", "CamelJMXAgent[", "]");
         if (disabled != null) {
-            csb.append("disabled=" + disabled);
+            buffer.add("disabled=" + disabled);
         }
         if (usePlatformMBeanServer != null) {
-            csb.append("usePlatformMBeanServer=" + usePlatformMBeanServer);
+            buffer.add("usePlatformMBeanServer=" + usePlatformMBeanServer);
         }
         if (mbeanServerDefaultDomain != null) {
-            csb.append("mbeanServerDefaultDomain=" + mbeanServerDefaultDomain);
+            buffer.add("mbeanServerDefaultDomain=" + mbeanServerDefaultDomain);
         }
         if (mbeanObjectDomainName != null) {
-            csb.append("mbeanObjectDomainName=" + mbeanObjectDomainName);
+            buffer.add("mbeanObjectDomainName=" + mbeanObjectDomainName);
         }
         if (statisticsLevel != null) {
-            csb.append("statisticsLevel=" + statisticsLevel);
+            buffer.add("statisticsLevel=" + statisticsLevel);
         }
         if (loadStatisticsEnabled != null) {
-            csb.append("loadStatisticsEnabled=" + loadStatisticsEnabled);
+            buffer.add("loadStatisticsEnabled=" + loadStatisticsEnabled);
         }
         if (endpointRuntimeStatisticsEnabled != null) {
-            csb.append("endpointRuntimeStatisticsEnabled=" + endpointRuntimeStatisticsEnabled);
+            buffer.add("endpointRuntimeStatisticsEnabled=" + endpointRuntimeStatisticsEnabled);
         }
         if (onlyRegisterProcessorWithCustomId != null) {
-            csb.append("onlyRegisterProcessorWithCustomId=" + onlyRegisterProcessorWithCustomId);
+            buffer.add("onlyRegisterProcessorWithCustomId=" + onlyRegisterProcessorWithCustomId);
         }
         if (registerAlways != null) {
-            csb.append("registerAlways=" + registerAlways);
+            buffer.add("registerAlways=" + registerAlways);
         }
         if (registerNewRoutes != null) {
-            csb.append("registerNewRoutes=" + registerNewRoutes);
+            buffer.add("registerNewRoutes=" + registerNewRoutes);
         }
         if (includeHostName != null) {
-            csb.append("includeHostName=" + includeHostName);
+            buffer.add("includeHostName=" + includeHostName);
         }
         if (useHostIPAddress != null) {
-            csb.append("useHostIPAddress=" + useHostIPAddress);
+            buffer.add("useHostIPAddress=" + useHostIPAddress);
         }
         if (mask != null) {
-            csb.append("mask=" + mask);
+            buffer.add("mask=" + mask);
         }
-
-        sb.append(csb.toString());
-        sb.append("]");
-        return sb.toString();
+        return buffer.toString();
     }
 
 }
diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
index 1912c1b..66a98ba 100644
--- a/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/converter/stream/CachedOutputStreamTest.java
@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.StringJoiner;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
@@ -32,12 +33,14 @@ import org.apache.camel.converter.IOConverter;
 import org.apache.camel.impl.engine.DefaultUnitOfWork;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.DefaultExchange;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 public class CachedOutputStreamTest extends ContextTestSupport {
     private static final String TEST_STRING = "This is a test string and it has enough" + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ";
@@ -73,13 +76,13 @@ public class CachedOutputStreamTest extends ContextTestSupport {
 
     private static String toString(InputStream input) throws IOException {
         BufferedReader reader = IOHelper.buffered(new InputStreamReader(input));
-        CollectionStringBuffer builder = new CollectionStringBuffer();
+        StringJoiner builder = new StringJoiner(", ");
         while (true) {
             String line = reader.readLine();
             if (line == null) {
                 return builder.toString();
             }
-            builder.append(line);
+            builder.add(line);
         }
     }
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
index 76cc6d0..a65cdef 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedFailoverLoadBalancer.java
@@ -18,6 +18,7 @@ package org.apache.camel.management.mbean;
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.StringJoiner;
 
 import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.CompositeDataSupport;
@@ -34,7 +35,6 @@ import org.apache.camel.model.LoadBalanceDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.loadbalancer.ExceptionFailureStatistics;
 import org.apache.camel.processor.loadbalancer.FailOverLoadBalancer;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.ObjectHelper;
 
 @ManagedResource(description = "Managed Failover LoadBalancer")
@@ -93,11 +93,11 @@ public class ManagedFailoverLoadBalancer extends ManagedProcessor implements Man
         if (classes == null || classes.isEmpty()) {
             exceptions = "";
         } else {
-            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            StringJoiner exceptionsBuilder = new StringJoiner(",");
             for (Class<?> clazz : classes) {
-                csb.append(clazz.getCanonicalName());
+                exceptionsBuilder.add(clazz.getCanonicalName());
             }
-            exceptions = csb.toString();
+            exceptions = exceptionsBuilder.toString();
         }
         return exceptions;
     }