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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7412139ef4 TODO-999: utility migration, FQCN cleanup, f()/fs() 
placeholder fix
7412139ef4 is described below

commit 7412139ef455bd2b7d3bbe245df7aa765048aa0b
Author: James Bognar <[email protected]>
AuthorDate: Wed Jun 3 13:54:12 2026 -0400

    TODO-999: utility migration, FQCN cleanup, f()/fs() placeholder fix
    
    - Task 1: migrate null-or-isBlank/isEmpty -> StringUtils.isBlank/isEmpty 
(29 files),
      Objects.equals -> Utils.eq (2 files), ArrayList(Arrays.asList) -> 
CollectionUtils.list
      (3 files), String.format -> StringUtils.f (1 file), hint-comment fix (1 
file)
    - Task 2: replace inline FQCNs with imports in MarkdownParserSession, 
RequestHttpPart,
      RestClient (19 substitutions; 1 FQCN retained due to name collision)
    - Task 7: fix f()/fs() calls using MessageFormat {N} placeholders -> %s/%d 
(8 files)
    
    Co-authored-by: Cursor <[email protected]>
---
 .../java/org/apache/juneau/junit/bct/BctUtils.java |  2 +-
 .../junit/bct/PropertyNotFoundException.java       |  4 +--
 .../apache/juneau/commons/bean/BeanMapEntry.java   |  4 ++-
 .../juneau/commons/reflect/ExecutableInfo.java     |  6 ++--
 .../org/apache/juneau/commons/runtime/Args.java    |  3 +-
 .../org/apache/juneau/commons/svl/VarResolver.java |  2 +-
 .../main/java/org/apache/juneau/UriResolver.java   |  2 +-
 .../org/apache/juneau/jsonschema/TypeCategory.java |  4 +--
 .../juneau/markdown/MarkdownParserSession.java     |  6 ++--
 .../org/apache/juneau/parser/ParserListener.java   |  4 +--
 .../juneau/serializer/SerializerListener.java      |  2 +-
 .../main/java/org/apache/juneau/sse/SseEvent.java  | 10 ++++---
 .../juneau/rest/client/classic/RestClient.java     | 32 +++++++++++-----------
 .../org/apache/juneau/rest/client/RestClient.java  |  5 ++--
 .../http/classic/response/BasicHttpException.java  |  4 +--
 .../juneau/http/response/BasicHttpException.java   |  4 +--
 .../juneau/rest/auth/jwt/JwtTokenValidator.java    |  5 ++--
 .../java/org/apache/juneau/rest/mcp/McpCursor.java |  4 ++-
 .../org/apache/juneau/rest/mcp/McpDispatcher.java  |  4 ++-
 .../micrometer/MicrometerMetricsRecorder.java      |  3 +-
 .../juneau/rest/auth/oidc/rp/OidcRelyingParty.java |  3 +-
 .../rest/auth/oidc/rp/OidcSessionAuthFilter.java   |  3 +-
 .../juneau/rest/tracing/otel/OtelTracerHook.java   |  3 +-
 .../tracing/otel/RestRequestTextMapGetter.java     |  4 ++-
 .../juneau/rest/auth/saml/SamlAuthFilter.java      |  3 +-
 .../rest/view/freemarker/FreemarkerDispatcher.java |  9 +++---
 .../rest/view/freemarker/FreemarkerView.java       |  9 +++---
 .../apache/juneau/rest/view/jsp/JspDispatcher.java |  3 +-
 .../org/apache/juneau/rest/view/jsp/JspView.java   |  9 +++---
 .../juneau/rest/view/jsp/JspViewRenderer.java      |  4 ++-
 .../rest/view/mustache/MustacheDispatcher.java     |  9 +++---
 .../juneau/rest/view/mustache/MustacheView.java    |  9 +++---
 .../rest/view/thymeleaf/ThymeleafDispatcher.java   |  5 ++--
 .../juneau/rest/view/thymeleaf/ThymeleafView.java  |  9 +++---
 .../java/org/apache/juneau/rest/RestContext.java   | 16 +++++------
 .../apache/juneau/rest/auth/AuthFilterChain.java   |  3 +-
 .../juneau/rest/convention/FaviconProvider.java    |  6 ++--
 .../juneau/rest/httppart/RequestHttpPart.java      |  2 +-
 .../org/apache/juneau/rest/ops/AdminProvider.java  |  4 ++-
 .../java/org/apache/juneau/rest/ops/EchoMixin.java |  4 ++-
 .../rest/processor/ProblemDetailsProcessor.java    |  4 ++-
 .../org/apache/juneau/rest/sse/SseBroadcaster.java |  3 +-
 .../apache/juneau/rest/sse/SseSubscription.java    |  3 +-
 .../tracing/TraceContextResponseProcessor.java     |  4 ++-
 .../org/apache/juneau/rest/util/RestUtils.java     |  2 +-
 45 files changed, 142 insertions(+), 101 deletions(-)

diff --git 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctUtils.java
 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctUtils.java
index c83ed6137d..10b3b0666e 100644
--- 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctUtils.java
+++ 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/BctUtils.java
@@ -60,7 +60,7 @@ public class BctUtils {
         * @return A new {@link AssertionFailedError} with formatted message 
and values.
         */
        public static AssertionFailedError assertEqualsFailed(Object expected, 
Object actual, Supplier<String> messageSupplier) {
-               return new AssertionFailedError(opt(messageSupplier).map(x -> 
x.get()).orElse("Equals assertion failed.") + f(" ==> expected: <{0}> but was: 
<{1}>", expected, actual), expected, actual);
+               return new AssertionFailedError(opt(messageSupplier).map(x -> 
x.get()).orElse("Equals assertion failed.") + f(" ==> expected: <%s> but was: 
<%s>", expected, actual), expected, actual);
        }
 
        /**
diff --git 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyNotFoundException.java
 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyNotFoundException.java
index 2e80f945dd..d742c3c5fa 100644
--- 
a/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyNotFoundException.java
+++ 
b/juneau-core/juneau-bct/src/main/java/org/apache/juneau/junit/bct/PropertyNotFoundException.java
@@ -62,7 +62,7 @@ public class PropertyNotFoundException extends 
RuntimeException {
         * @param objectType The type of object on which the property was sought
         */
        public PropertyNotFoundException(String propertyName, Class<?> 
objectType) {
-               super(f("Property ''{0}'' not found on object of type {1}", 
propertyName, cns(objectType)));
+               super(f("Property '%s' not found on object of type %s", 
propertyName, cns(objectType)));
        }
 
        /**
@@ -73,7 +73,7 @@ public class PropertyNotFoundException extends 
RuntimeException {
         * @param cause The underlying cause of the exception
         */
        public PropertyNotFoundException(String propertyName, Class<?> 
objectType, Throwable cause) {
-               super(f("Property ''{0}'' not found on object of type {1}", 
propertyName, cns(objectType)), cause);
+               super(f("Property '%s' not found on object of type %s", 
propertyName, cns(objectType)), cause);
        }
 
        /**
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java
index 4afe2c67d6..6a9831ed55 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/bean/BeanMapEntry.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.commons.bean;
 
+import static org.apache.juneau.commons.utils.Utils.*;
+
 import java.util.*;
 
 /**
@@ -141,7 +143,7 @@ public class BeanMapEntry implements 
Map.Entry<String,Object> {
                        return true;
                if (!(obj instanceof Map.Entry<?,?> other))
                        return false;
-               return Objects.equals(getKey(), other.getKey()) && 
Objects.equals(getValue(), other.getValue());
+               return eq(getKey(), other.getKey()) && eq(getValue(), 
other.getValue());
        }
 
        /**
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
index 2cf0d1f1fe..4b9111863f 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/reflect/ExecutableInfo.java
@@ -122,7 +122,7 @@ public abstract class ExecutableInfo extends AccessibleInfo 
{
                this.parameterTypes = memoize(() -> 
getParameters().stream().map(ParameterInfo::getParameterType).toList());
                this.exceptions = memoize(() -> 
stream(inner.getExceptionTypes()).map(ClassInfo::of).map(ClassInfo.class::cast).toList());
                this.declaredAnnotations = memoize(() -> 
stream(inner.getDeclaredAnnotations()).flatMap(AnnotationUtils::streamRepeated).map(a
 -> ai((Annotatable)this, a)).toList());
-               this.nameShort = memoize(() -> f("{0}({1})", getNameSimple(), 
getParameters().stream().map(p -> 
p.getParameterType().getNameSimple()).collect(joining(","))));
+               this.nameShort = memoize(() -> f("%s(%s)", getNameSimple(), 
getParameters().stream().map(p -> 
p.getParameterType().getNameSimple()).collect(joining(","))));
                this.nameFull = memoize(this::findNameFull);
                this.toString = memoize(this::findToString);
        }
@@ -966,9 +966,9 @@ public abstract class ExecutableInfo extends AccessibleInfo 
{
        private void checkIndex(int index) {
                int pc = getParameterCount();
                if (pc == 0)
-                       throw new IndexOutOfBoundsException(f("Invalid index 
''{0}''.  No parameters.", index));
+                       throw new IndexOutOfBoundsException(f("Invalid index 
'%d'.  No parameters.", index));
                if (index < 0 || index >= pc)
-                       throw new IndexOutOfBoundsException(f("Invalid index 
''{0}''.  Parameter count: {1}", index, pc));
+                       throw new IndexOutOfBoundsException(f("Invalid index 
'%d'.  Parameter count: %d", index, pc));
        }
 
        private String findNameFull() {
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/runtime/Args.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/runtime/Args.java
index 661d38d42d..50dd78c799 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/runtime/Args.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/runtime/Args.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.commons.runtime;
 
+import static org.apache.juneau.commons.utils.CollectionUtils.*;
 import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.Utils.*;
 
@@ -366,7 +367,7 @@ public class Args {
                private List<String> resolvePrefixes() {
                        List<String> p;
                        if (customPrefix != null) {
-                               p = new 
ArrayList<>(Arrays.asList(customPrefix));
+                               p = list(customPrefix);
                        } else {
                                p = new ArrayList<>();
                                if (allowLongFlags)
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/VarResolver.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/VarResolver.java
index 5dcf65c14c..d21b445ffd 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/VarResolver.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/svl/VarResolver.java
@@ -101,7 +101,7 @@ public class VarResolver {
                        this.beanStore = copyFrom.beanStore;
                        vars = VarList.of(copyFrom.vars);
                        userBeans = new LinkedHashMap<>();
-                       functions = new 
ArrayList<>(Arrays.asList(copyFrom.functions));
+                       functions = list(copyFrom.functions);
                }
 
                /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java
index 65431cfb2f..3b24b5a043 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriResolver.java
@@ -84,7 +84,7 @@ public class UriResolver {
        }
 
        private static boolean isSpecialUri(String s) {
-               if (s == null || s.isEmpty())
+               if (isEmpty(s))
                        return false;
                var c = s.charAt(0);
                if (c != 's' && c != 'c' && c != 'r')
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
index a64b541355..5ace7b0b28 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/TypeCategory.java
@@ -74,7 +74,7 @@ public enum TypeCategory {
         * @return A comma-delimited list of values into a set of {@link 
TypeCategory} values.
         */
        public static Set<TypeCategory> parse(String s) {
-               if (s == null || s.isEmpty())
+               if (isEmpty(s))
                        return Collections.emptySet();
                Set<TypeCategory> set = CollectionUtils.set();
                split(s, x -> set.add(valueOf(x.toUpperCase())));
@@ -88,7 +88,7 @@ public enum TypeCategory {
         * @return A comma-delimited list of values into an array of {@link 
TypeCategory} values.
         */
        public static TypeCategory[] parseArray(String s) {
-               if (s == null || s.isEmpty())
+               if (isEmpty(s))
                        return new TypeCategory[0];
                List<TypeCategory> list = list();
                split(s, x -> list.add(valueOf(x.toUpperCase())));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java
index 5143c71920..6751a34b1b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/markdown/MarkdownParserSession.java
@@ -28,6 +28,8 @@ import org.apache.juneau.commons.function.Memoizer;
 import org.apache.juneau.json.*;
 import org.apache.juneau.json5.*;
 import org.apache.juneau.parser.*;
+import org.apache.juneau.swap.BuilderSwap;
+import org.apache.juneau.swap.ObjectSwap;
 
 /**
  * Session object for {@link MarkdownParser}.
@@ -141,8 +143,8 @@ public class MarkdownParserSession extends 
ReaderParserSession {
                if (eType == null)
                        eType = (ClassMeta<T>) object();
 
-               var swap = (org.apache.juneau.swap.ObjectSwap<T,Object>) 
eType.getSwap(this);
-               var builder = (org.apache.juneau.swap.BuilderSwap<T,Object>) 
eType.getBuilderSwap(this);
+               var swap = (ObjectSwap<T,Object>) eType.getSwap(this);
+               var builder = (BuilderSwap<T,Object>) 
eType.getBuilderSwap(this);
                ClassMeta<?> sType;
                if (builder != null)
                        sType = builder.getBuilderClassMeta(this);
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
index 39e8abdb79..e967619a45 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
@@ -44,7 +44,7 @@ public class ParserListener {
         * @param p The bean property we had an issue on.
         */
        public void onBeanSetterException(ParserSession session, Throwable t, 
BeanPropertyMeta p) {
-               onError(session, t, f("Could not call setValue() on property 
''{0}'' of class ''{1}'', exception = {2}", p.getName(), 
p.getBeanMeta().getBeanInfo(), lm(t)));
+               onError(session, t, f("Could not call setValue() on property 
'%s' of class '%s', exception = %s", p.getName(), 
p.getBeanMeta().getBeanInfo(), lm(t)));
        }
 
        /**
@@ -72,6 +72,6 @@ public class ParserListener {
         * @param bean The bean.
         */
        public <T> void onUnknownBeanProperty(ParserSession session, String 
propertyName, Class<T> beanClass, T bean) {
-               onError(session, null, f("Unknown property ''{0}'' encountered 
while trying to parse into class ''{1}'' at location {2}", propertyName, 
beanClass, session.getPosition()));
+               onError(session, null, f("Unknown property '%s' encountered 
while trying to parse into class '%s' at location %s", propertyName, beanClass, 
session.getPosition()));
        }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java
index 82d9e60f0d..a3aa4a0d73 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerListener.java
@@ -44,7 +44,7 @@ public class SerializerListener {
         * @param p The bean property we had an issue on.
         */
        public void onBeanGetterException(SerializerSession session, Throwable 
t, BeanPropertyMeta p) {
-               onError(session, t, f("Could not call getValue() on property 
''{0}'' of class ''{1}'', exception = {2}", p.getName(), 
p.getBeanMeta().getBeanInfo(), lm(t)));
+               onError(session, t, f("Could not call getValue() on property 
'%s' of class '%s', exception = %s", p.getName(), 
p.getBeanMeta().getBeanInfo(), lm(t)));
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/sse/SseEvent.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/sse/SseEvent.java
index 2cb01c705a..103be3490a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/sse/SseEvent.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/sse/SseEvent.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.sse;
 
+import static org.apache.juneau.commons.utils.Utils.*;
+
 import java.util.*;
 
 import org.apache.juneau.commons.bean.*;
@@ -175,10 +177,10 @@ public class SseEvent {
                        return true;
                if (!(o instanceof SseEvent o2))
                        return false;
-               return Objects.equals(event, o2.event)
-                       && Objects.equals(data, o2.data)
-                       && Objects.equals(id, o2.id)
-                       && Objects.equals(retry, o2.retry);
+               return eq(event, o2.event)
+                       && eq(data, o2.data)
+                       && eq(id, o2.id)
+                       && eq(retry, o2.retry);
        }
 
        @Override /* Overridden from Object */
diff --git 
a/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestClient.java
 
b/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestClient.java
index 1dc1a495b8..ff4ae7c9a2 100644
--- 
a/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestClient.java
@@ -1216,7 +1216,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF addBeanTypes() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::addBeanTypes);
+                       serializers().forEach(Serializer.Builder::addBeanTypes);
                        return self();
                }
 
@@ -1337,7 +1337,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF addRootType() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::addRootType);
+                       serializers().forEach(Serializer.Builder::addRootType);
                        return self();
                }
 
@@ -1608,7 +1608,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                @Override
                public SELF debug() {
                        super.debug();
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::debug);
+                       serializers().forEach(Serializer.Builder::debug);
                        return headers(Debug.TRUE);
                }
 
@@ -1834,7 +1834,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF detectRecursions() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::detectRecursions);
+                       
serializers().forEach(Serializer.Builder::detectRecursions);
                        return self();
                }
 
@@ -2692,7 +2692,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF ignoreRecursions() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::ignoreRecursions);
+                       
serializers().forEach(Serializer.Builder::ignoreRecursions);
                        return self();
                }
 
@@ -3067,7 +3067,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF keepNullProperties() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::keepNullProperties);
+                       
serializers().forEach(Serializer.Builder::keepNullProperties);
                        return self();
                }
 
@@ -3716,7 +3716,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF paramFormatPlain() {
-                       serializers().forEach(UonSerializer.Builder.class, 
org.apache.juneau.uon.UonSerializer.Builder::paramFormatPlain);
+                       serializers().forEach(UonSerializer.Builder.class, 
UonSerializer.Builder::paramFormatPlain);
                        return self();
                }
 
@@ -5005,7 +5005,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF sortCollections() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::sortCollections);
+                       
serializers().forEach(Serializer.Builder::sortCollections);
                        return self();
                }
 
@@ -5043,7 +5043,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF sortMaps() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::sortMaps);
+                       serializers().forEach(Serializer.Builder::sortMaps);
                        return self();
                }
 
@@ -5084,7 +5084,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF sq() {
-                       
serializers().forEachWS(org.apache.juneau.serializer.WriterSerializer.Builder::sq);
+                       serializers().forEachWS(WriterSerializer.Builder::sq);
                        return self();
                }
 
@@ -5195,7 +5195,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF trimEmptyCollections() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::trimEmptyCollections);
+                       
serializers().forEach(Serializer.Builder::trimEmptyCollections);
                        return self();
                }
 
@@ -5239,7 +5239,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF trimEmptyMaps() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::trimEmptyMaps);
+                       
serializers().forEach(Serializer.Builder::trimEmptyMaps);
                        return self();
                }
 
@@ -5276,7 +5276,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF trimStringsOnRead() {
-                       
parsers().forEach(org.apache.juneau.parser.Parser.Builder::trimStrings);
+                       parsers().forEach(Parser.Builder::trimStrings);
                        return self();
                }
 
@@ -5311,7 +5311,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF trimStringsOnWrite() {
-                       
serializers().forEach(org.apache.juneau.serializer.Serializer.Builder::trimStrings);
+                       serializers().forEach(Serializer.Builder::trimStrings);
                        return self();
                }
 
@@ -5686,7 +5686,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF useWhitespace() {
-                       
serializers().forEachWS(org.apache.juneau.serializer.WriterSerializer.Builder::useWhitespace);
+                       
serializers().forEachWS(WriterSerializer.Builder::useWhitespace);
                        return self();
                }
 
@@ -5723,7 +5723,7 @@ public class RestClient extends MarshallingContextable 
implements HttpClient, Cl
                 * @return This object.
                 */
                public SELF ws() {
-                       
serializers().forEachWS(org.apache.juneau.serializer.WriterSerializer.Builder::ws);
+                       serializers().forEachWS(WriterSerializer.Builder::ws);
                        return self();
                }
 
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index fbc0a0aa2c..b4713b8c47 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -16,7 +16,8 @@
  */
 package org.apache.juneau.rest.client;
 
-import static org.apache.juneau.commons.utils.AssertionUtils.assertArgNotNull;
+import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.CollectionUtils.*;
 
 import java.io.*;
 import java.util.*;
@@ -385,7 +386,7 @@ public final class RestClient implements Closeable {
                 * @return This object.
                 */
                public Builder bodyConverters(BodyConverter<?>... value) {
-                       bodyConverters = new ArrayList<>(Arrays.asList(value));
+                       bodyConverters = list(value);
                        return this;
                }
 
diff --git 
a/juneau-rest/juneau-rest-common-classic/src/main/java/org/apache/juneau/http/classic/response/BasicHttpException.java
 
b/juneau-rest/juneau-rest-common-classic/src/main/java/org/apache/juneau/http/classic/response/BasicHttpException.java
index 68591c3f31..1611d10cec 100644
--- 
a/juneau-rest/juneau-rest-common-classic/src/main/java/org/apache/juneau/http/classic/response/BasicHttpException.java
+++ 
b/juneau-rest/juneau-rest-common-classic/src/main/java/org/apache/juneau/http/classic/response/BasicHttpException.java
@@ -222,9 +222,9 @@ public class BasicHttpException extends 
BasicRuntimeException implements HttpRes
                                msg = msg.replace('<', ' ').replace('>', ' 
').replace('&', ' ');
                        var cls = cns(e);
                        if (msg == null)
-                               sb.append(f("\nCaused by ({0})", cls));
+                               sb.append(f("\nCaused by (%s)", cls));
                        else
-                               sb.append(f("\nCaused by ({0}): {1}", cls, 
msg));
+                               sb.append(f("\nCaused by (%s): %s", cls, msg));
                        e = e.getCause();
                }
                return sb.toString();
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
index 87d9273f22..96a03fca74 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/response/BasicHttpException.java
@@ -432,9 +432,9 @@ public class BasicHttpException extends RuntimeException 
implements HttpResponse
                                msg = msg.replace('<', ' ').replace('>', ' 
').replace('&', ' ');
                        var cls = cns(e);
                        if (msg == null)
-                               sb.append(f("\nCaused by ({0})", cls));
+                               sb.append(f("\nCaused by (%s)", cls));
                        else
-                               sb.append(f("\nCaused by ({0}): {1}", cls, 
msg));
+                               sb.append(f("\nCaused by (%s): %s", cls, msg));
                        e = e.getCause();
                }
                return sb.toString();
diff --git 
a/juneau-rest/juneau-rest-server-jwt/src/main/java/org/apache/juneau/rest/auth/jwt/JwtTokenValidator.java
 
b/juneau-rest/juneau-rest-server-jwt/src/main/java/org/apache/juneau/rest/auth/jwt/JwtTokenValidator.java
index 53c66f5ae3..883e7fb1ce 100644
--- 
a/juneau-rest/juneau-rest-server-jwt/src/main/java/org/apache/juneau/rest/auth/jwt/JwtTokenValidator.java
+++ 
b/juneau-rest/juneau-rest-server-jwt/src/main/java/org/apache/juneau/rest/auth/jwt/JwtTokenValidator.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.auth.jwt;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 
 import java.net.*;
 import java.security.*;
@@ -462,7 +463,7 @@ public class JwtTokenValidator implements TokenValidator {
                verifyClaims(claims);
 
                var subject = claims.getSubject();
-               if (subject == null || subject.isBlank())
+               if (isBlank(subject))
                        subject = "<no-sub>";
                return new ClaimsPrincipal(subject, claims.toJSONObject());
        }
@@ -470,7 +471,7 @@ public class JwtTokenValidator implements TokenValidator {
        private void verifyClaims(JWTClaimsSet claims) throws 
AuthenticationException {
                // Required claims: iss, aud, exp, nbf are non-negotiable 
defaults.
                var iss = claims.getIssuer();
-               if (iss == null || iss.isBlank())
+               if (isBlank(iss))
                        throw reject("\"iss\" claim is required");
                if (! issuer.equals(iss))
                        throw reject("\"iss\" claim does not match expected 
issuer");
diff --git 
a/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpCursor.java
 
b/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpCursor.java
index c078e3b4df..70e9b87c87 100644
--- 
a/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpCursor.java
+++ 
b/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpCursor.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.mcp;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.commons.inject.BeanStore;
@@ -89,7 +91,7 @@ public interface McpCursor {
         * @return Parsed offset.
         */
        static int parseOffset(String cursor) {
-               if (cursor == null || cursor.isEmpty())
+               if (isEmpty(cursor))
                        return 0;
                try {
                        var v = Integer.parseInt(cursor);
diff --git 
a/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpDispatcher.java
 
b/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpDispatcher.java
index ac2d411e8d..7fd0d00681 100644
--- 
a/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-mcp/src/main/java/org/apache/juneau/rest/mcp/McpDispatcher.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.mcp;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.util.*;
 import java.util.stream.*;
 
@@ -74,7 +76,7 @@ public class McpDispatcher {
                var id = req.getId();
                var method = req.getMethod();
 
-               if (method == null || method.isEmpty())
+               if (isEmpty(method))
                        return notification(id) ? null : errorResponse(id, 
CODE_INVALID_REQUEST, "Missing method", null);
 
                try {
diff --git 
a/juneau-rest/juneau-rest-server-micrometer/src/main/java/org/apache/juneau/rest/metrics/micrometer/MicrometerMetricsRecorder.java
 
b/juneau-rest/juneau-rest-server-micrometer/src/main/java/org/apache/juneau/rest/metrics/micrometer/MicrometerMetricsRecorder.java
index f05e88e7da..71a73ba404 100644
--- 
a/juneau-rest/juneau-rest-server-micrometer/src/main/java/org/apache/juneau/rest/metrics/micrometer/MicrometerMetricsRecorder.java
+++ 
b/juneau-rest/juneau-rest-server-micrometer/src/main/java/org/apache/juneau/rest/metrics/micrometer/MicrometerMetricsRecorder.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.metrics.micrometer;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 
 import java.time.*;
 
@@ -171,6 +172,6 @@ public class MicrometerMetricsRecorder implements 
MetricsRecorder {
        }
 
        private static String defaultIfBlank(String value, String fallback) {
-               return (value == null || value.isEmpty()) ? fallback : value;
+               return isEmpty(value) ? fallback : value;
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcRelyingParty.java
 
b/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcRelyingParty.java
index 8bf1c962f0..7d6f51e4df 100644
--- 
a/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcRelyingParty.java
+++ 
b/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcRelyingParty.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.auth.oidc.rp;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 
 import java.io.*;
 import java.net.*;
@@ -1010,7 +1011,7 @@ public class OidcRelyingParty {
         * {@code redirect} parameter).
         */
        private static String safeRelativePath(String value) {
-               if (value == null || value.isBlank())
+               if (isBlank(value))
                        return null;
                if (! value.startsWith("/"))
                        return null;
diff --git 
a/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcSessionAuthFilter.java
 
b/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcSessionAuthFilter.java
index 38c8e7e1fd..1ac18b4b4b 100644
--- 
a/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcSessionAuthFilter.java
+++ 
b/juneau-rest/juneau-rest-server-oidc-rp/src/main/java/org/apache/juneau/rest/auth/oidc/rp/OidcSessionAuthFilter.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.auth.oidc.rp;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 
 import java.util.*;
 
@@ -76,7 +77,7 @@ public class OidcSessionAuthFilter extends AuthFilter {
                                break;
                        }
                }
-               if (value == null || value.isBlank())
+               if (isBlank(value))
                        return Optional.empty();
                var session = sessionStore.lookup(value);
                if (session.isEmpty())
diff --git 
a/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/OtelTracerHook.java
 
b/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/OtelTracerHook.java
index 2b78db1fcb..0435eeb2a4 100644
--- 
a/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/OtelTracerHook.java
+++ 
b/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/OtelTracerHook.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.tracing.otel;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.Utils.*;
 
 import java.util.*;
@@ -231,7 +232,7 @@ public class OtelTracerHook implements TracerHook {
        }
 
        private static String defaultIfBlank(String value, String fallback) {
-               return (value == null || value.isEmpty()) ? fallback : value;
+               return isEmpty(value) ? fallback : value;
        }
 
        private static final class OtelScope implements Scope {
diff --git 
a/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/RestRequestTextMapGetter.java
 
b/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/RestRequestTextMapGetter.java
index 65cd276a3c..5527fdd022 100644
--- 
a/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/RestRequestTextMapGetter.java
+++ 
b/juneau-rest/juneau-rest-server-otel/src/main/java/org/apache/juneau/rest/tracing/otel/RestRequestTextMapGetter.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.tracing.otel;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.rest.*;
@@ -58,6 +60,6 @@ public final class RestRequestTextMapGetter implements 
TextMapGetter<RestRequest
                if (! header.isPresent())
                        return null;
                var value = header.orElse(null);
-               return (value == null || value.isEmpty()) ? null : value;
+               return isEmpty(value) ? null : value;
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server-saml/src/main/java/org/apache/juneau/rest/auth/saml/SamlAuthFilter.java
 
b/juneau-rest/juneau-rest-server-saml/src/main/java/org/apache/juneau/rest/auth/saml/SamlAuthFilter.java
index e95cc3a897..498e9f60fc 100644
--- 
a/juneau-rest/juneau-rest-server-saml/src/main/java/org/apache/juneau/rest/auth/saml/SamlAuthFilter.java
+++ 
b/juneau-rest/juneau-rest-server-saml/src/main/java/org/apache/juneau/rest/auth/saml/SamlAuthFilter.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.auth.saml;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 
 import java.io.*;
 import java.nio.charset.StandardCharsets;
@@ -198,7 +199,7 @@ public class SamlAuthFilter extends AuthFilter {
                if (!matchesPath(req))
                        return Optional.empty();
                var raw = req.getParameter(SAML_RESPONSE_PARAM);
-               if (raw == null || raw.isEmpty())
+               if (isEmpty(raw))
                        return Optional.empty();
                var xml = decodeSamlResponse(raw);
                var principal = runValidator(xml);
diff --git 
a/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
index adce7de8d7..0958fc33bc 100644
--- 
a/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerDispatcher.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.freemarker;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.io.*;
@@ -125,7 +126,7 @@ public class FreemarkerDispatcher implements 
RawTemplateDispatcher {
         * @return The template name with the configured suffix appended (if 
applicable).
         */
        public String applyTemplateSuffix(String name) {
-               if (templateSuffix == null || templateSuffix.isEmpty())
+               if (isEmpty(templateSuffix))
                        return name;
                if (name.endsWith(templateSuffix))
                        return name;
@@ -212,7 +213,7 @@ public class FreemarkerDispatcher implements 
RawTemplateDispatcher {
         *      {@code "/"}).
         */
        static String toResourceRoot(String base) {
-               if (base == null || base.isBlank())
+               if (isBlank(base))
                        return "/";
                var s = base;
                while (s.endsWith("/") && s.length() > 1)
@@ -293,7 +294,7 @@ public class FreemarkerDispatcher implements 
RawTemplateDispatcher {
         *      {@code "/templates/"} and resolved {@code 
"/templates/hello.ftlh"}).
         */
        static String stripBasePath(String base, String resolved) {
-               var bp = (base == null || base.isEmpty()) ? "/" : base;
+               var bp = isEmpty(base) ? "/" : base;
                if (! bp.endsWith("/"))
                        bp = bp + "/";
                if (! bp.startsWith("/"))
@@ -323,7 +324,7 @@ public class FreemarkerDispatcher implements 
RawTemplateDispatcher {
                 * @return This object.
                 */
                public Builder basePath(String value) {
-                       basePath = (value == null || value.isBlank()) ? 
DEFAULT_BASE_PATH : value;
+                       basePath = isBlank(value) ? DEFAULT_BASE_PATH : value;
                        return this;
                }
 
diff --git 
a/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerView.java
 
b/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerView.java
index 5b5dae0961..8f23603a1c 100644
--- 
a/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerView.java
+++ 
b/juneau-rest/juneau-rest-server-view-freemarker/src/main/java/org/apache/juneau/rest/view/freemarker/FreemarkerView.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.freemarker;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.util.*;
@@ -106,7 +107,7 @@ public final class FreemarkerView implements View {
         * @throws IllegalArgumentException If {@code templateName} is {@code 
null} or blank.
         */
        public static FreemarkerView of(String templateName) {
-               if (templateName == null || templateName.isBlank())
+               if (isBlank(templateName))
                        throw illegalArg("templateName must not be null or 
blank");
                return new FreemarkerView(templateName, Map.of(), Map.of());
        }
@@ -137,7 +138,7 @@ public final class FreemarkerView implements View {
         *      is {@code null}.
         */
        public FreemarkerView attr(String key, Object value) {
-               if (key == null || key.isBlank())
+               if (isBlank(key))
                        throw illegalArg("attribute key must not be null or 
blank");
                if (value == null)
                        throw illegalArg("attribute value must not be null 
(attribute ''{0}'')", key);
@@ -161,7 +162,7 @@ public final class FreemarkerView implements View {
                        return this;
                var copy = new LinkedHashMap<>(attributes);
                values.forEach((k, v) -> {
-                       if (k == null || k.isBlank())
+                       if (isBlank(k))
                                throw illegalArg("attribute key must not be 
null or blank");
                        if (v == null)
                                throw illegalArg("attribute value must not be 
null (attribute ''{0}'')", k);
@@ -186,7 +187,7 @@ public final class FreemarkerView implements View {
         *      is {@code null}.
         */
        public FreemarkerView header(String name, String value) {
-               if (name == null || name.isBlank())
+               if (isBlank(name))
                        throw illegalArg("header name must not be null or 
blank");
                if (value == null)
                        throw illegalArg("header value must not be null (header 
''{0}'')", name);
diff --git 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
index 8d76011827..648021035b 100644
--- 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspDispatcher.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.jsp;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.io.*;
@@ -134,7 +135,7 @@ public class JspDispatcher implements RawTemplateDispatcher 
{
                 * @return This object.
                 */
                public Builder basePath(String value) {
-                       basePath = (value == null || value.isBlank()) ? 
DEFAULT_BASE_PATH : value;
+                       basePath = isBlank(value) ? DEFAULT_BASE_PATH : value;
                        return this;
                }
 
diff --git 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspView.java
 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspView.java
index a5118a77a7..6196b21f19 100644
--- 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspView.java
+++ 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspView.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.jsp;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.util.*;
@@ -75,7 +76,7 @@ public final class JspView implements View {
         * @throws IllegalArgumentException If {@code templateName} is {@code 
null} or blank.
         */
        public static JspView of(String templateName) {
-               if (templateName == null || templateName.isBlank())
+               if (isBlank(templateName))
                        throw illegalArg("templateName must not be null or 
blank");
                return new JspView(templateName, Map.of(), Map.of());
        }
@@ -104,7 +105,7 @@ public final class JspView implements View {
         *      is {@code null}.
         */
        public JspView attr(String key, Object value) {
-               if (key == null || key.isBlank())
+               if (isBlank(key))
                        throw illegalArg("attribute key must not be null or 
blank");
                if (value == null)
                        throw illegalArg("attribute value must not be null 
(attribute ''{0}'')", key);
@@ -126,7 +127,7 @@ public final class JspView implements View {
                        return this;
                var copy = new LinkedHashMap<>(attributes);
                values.forEach((k, v) -> {
-                       if (k == null || k.isBlank())
+                       if (isBlank(k))
                                throw illegalArg("attribute key must not be 
null or blank");
                        if (v == null)
                                throw illegalArg("attribute value must not be 
null (attribute ''{0}'')", k);
@@ -151,7 +152,7 @@ public final class JspView implements View {
         *      is {@code null}.
         */
        public JspView header(String name, String value) {
-               if (name == null || name.isBlank())
+               if (isBlank(name))
                        throw illegalArg("header name must not be null or 
blank");
                if (value == null)
                        throw illegalArg("header value must not be null (header 
''{0}'')", name);
diff --git 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspViewRenderer.java
 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspViewRenderer.java
index ef0104f76c..255827b7da 100644
--- 
a/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspViewRenderer.java
+++ 
b/juneau-rest/juneau-rest-server-view-jsp/src/main/java/org/apache/juneau/rest/view/jsp/JspViewRenderer.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.view.jsp;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.io.*;
 
 import org.apache.juneau.commons.utils.*;
@@ -173,7 +175,7 @@ public class JspViewRenderer implements ViewRenderer {
         *      {@code ..} segments.
         */
        static String joinPath(String basePath, String template) {
-               var bp = (basePath == null || basePath.isEmpty()) ? "/" : 
basePath;
+               var bp = isEmpty(basePath) ? "/" : basePath;
                return FileUtils.resolveVirtualPathSafely(bp, template);
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
index a4f680e3f4..781e6b67b1 100644
--- 
a/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheDispatcher.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.mustache;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.io.*;
@@ -110,7 +111,7 @@ public class MustacheDispatcher implements 
RawTemplateDispatcher {
         * @return The template name with the configured suffix appended (if 
applicable).
         */
        public String applyTemplateSuffix(String name) {
-               if (templateSuffix == null || templateSuffix.isEmpty())
+               if (isEmpty(templateSuffix))
                        return name;
                if (name.endsWith(templateSuffix))
                        return name;
@@ -181,7 +182,7 @@ public class MustacheDispatcher implements 
RawTemplateDispatcher {
         * @return The mustache.java resource root (never {@code null}).
         */
        static String toResourceRoot(String base) {
-               if (base == null || base.isBlank())
+               if (isBlank(base))
                        return "";
                var s = base;
                while (s.startsWith("/"))
@@ -259,7 +260,7 @@ public class MustacheDispatcher implements 
RawTemplateDispatcher {
         *      {@code "/templates/"} and resolved {@code 
"/templates/hello.mustache"}).
         */
        static String stripBasePath(String base, String resolved) {
-               var bp = (base == null || base.isEmpty()) ? "/" : base;
+               var bp = isEmpty(base) ? "/" : base;
                if (! bp.endsWith("/"))
                        bp = bp + "/";
                if (! bp.startsWith("/"))
@@ -288,7 +289,7 @@ public class MustacheDispatcher implements 
RawTemplateDispatcher {
                 * @return This object.
                 */
                public Builder basePath(String value) {
-                       basePath = (value == null || value.isBlank()) ? 
DEFAULT_BASE_PATH : value;
+                       basePath = isBlank(value) ? DEFAULT_BASE_PATH : value;
                        return this;
                }
 
diff --git 
a/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheView.java
 
b/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheView.java
index 350d007310..c7d568b2e6 100644
--- 
a/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheView.java
+++ 
b/juneau-rest/juneau-rest-server-view-mustache/src/main/java/org/apache/juneau/rest/view/mustache/MustacheView.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.mustache;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.util.*;
@@ -101,7 +102,7 @@ public final class MustacheView implements View {
         * @throws IllegalArgumentException If {@code templateName} is {@code 
null} or blank.
         */
        public static MustacheView of(String templateName) {
-               if (templateName == null || templateName.isBlank())
+               if (isBlank(templateName))
                        throw illegalArg("templateName must not be null or 
blank");
                return new MustacheView(templateName, Map.of(), Map.of());
        }
@@ -131,7 +132,7 @@ public final class MustacheView implements View {
         *      is {@code null}.
         */
        public MustacheView attr(String key, Object value) {
-               if (key == null || key.isBlank())
+               if (isBlank(key))
                        throw illegalArg("attribute key must not be null or 
blank");
                if (value == null)
                        throw illegalArg("attribute value must not be null 
(attribute ''{0}'')", key);
@@ -155,7 +156,7 @@ public final class MustacheView implements View {
                        return this;
                var copy = new LinkedHashMap<>(attributes);
                values.forEach((k, v) -> {
-                       if (k == null || k.isBlank())
+                       if (isBlank(k))
                                throw illegalArg("attribute key must not be 
null or blank");
                        if (v == null)
                                throw illegalArg("attribute value must not be 
null (attribute ''{0}'')", k);
@@ -180,7 +181,7 @@ public final class MustacheView implements View {
         *      is {@code null}.
         */
        public MustacheView header(String name, String value) {
-               if (name == null || name.isBlank())
+               if (isBlank(name))
                        throw illegalArg("header name must not be null or 
blank");
                if (value == null)
                        throw illegalArg("header value must not be null (header 
''{0}'')", name);
diff --git 
a/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
 
b/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
index f050dda129..90ec1fef4a 100644
--- 
a/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
+++ 
b/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafDispatcher.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.thymeleaf;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.io.*;
@@ -243,7 +244,7 @@ public class ThymeleafDispatcher implements 
RawTemplateDispatcher {
         *      {@code "/templates/"} and resolved {@code "/templates/hello"}).
         */
        static String stripBasePath(String base, String resolved) {
-               var bp = (base == null || base.isEmpty()) ? "/" : base;
+               var bp = isEmpty(base) ? "/" : base;
                if (! bp.endsWith("/"))
                        bp = bp + "/";
                if (! bp.startsWith("/"))
@@ -273,7 +274,7 @@ public class ThymeleafDispatcher implements 
RawTemplateDispatcher {
                 * @return This object.
                 */
                public Builder basePath(String value) {
-                       basePath = (value == null || value.isBlank()) ? 
DEFAULT_BASE_PATH : value;
+                       basePath = isBlank(value) ? DEFAULT_BASE_PATH : value;
                        return this;
                }
 
diff --git 
a/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafView.java
 
b/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafView.java
index 62855ddac2..fb0460cd35 100644
--- 
a/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafView.java
+++ 
b/juneau-rest/juneau-rest-server-view-thymeleaf/src/main/java/org/apache/juneau/rest/view/thymeleaf/ThymeleafView.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.view.thymeleaf;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.util.*;
@@ -87,7 +88,7 @@ public final class ThymeleafView implements View {
         * @throws IllegalArgumentException If {@code templateName} is {@code 
null} or blank.
         */
        public static ThymeleafView of(String templateName) {
-               if (templateName == null || templateName.isBlank())
+               if (isBlank(templateName))
                        throw illegalArg("templateName must not be null or 
blank");
                return new ThymeleafView(templateName, Map.of(), Map.of());
        }
@@ -117,7 +118,7 @@ public final class ThymeleafView implements View {
         *      is {@code null}.
         */
        public ThymeleafView attr(String key, Object value) {
-               if (key == null || key.isBlank())
+               if (isBlank(key))
                        throw illegalArg("attribute key must not be null or 
blank");
                if (value == null)
                        throw illegalArg("attribute value must not be null 
(attribute ''{0}'')", key);
@@ -141,7 +142,7 @@ public final class ThymeleafView implements View {
                        return this;
                var copy = new LinkedHashMap<>(attributes);
                values.forEach((k, v) -> {
-                       if (k == null || k.isBlank())
+                       if (isBlank(k))
                                throw illegalArg("attribute key must not be 
null or blank");
                        if (v == null)
                                throw illegalArg("attribute value must not be 
null (attribute ''{0}'')", k);
@@ -166,7 +167,7 @@ public final class ThymeleafView implements View {
         *      is {@code null}.
         */
        public ThymeleafView header(String name, String value) {
-               if (name == null || name.isBlank())
+               if (isBlank(name))
                        throw illegalArg("header name must not be null or 
blank");
                if (value == null)
                        throw illegalArg("header value must not be null (header 
''{0}'')", name);
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index b2f50fc8b6..c98b1592a8 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -944,10 +944,10 @@ public class RestContext extends Context {
                var anns = AnnotationProvider.INSTANCE.find(Rest.class, 
info(resourceClass));
                for (var i = 0; i < anns.size(); i++) {
                        var raw = anns.get(i).inner().config();
-                       if (raw == null || raw.isEmpty())
+                       if (isEmpty(raw))
                                continue;
                        var resolvedName = vr.resolve(raw);
-                       if (resolvedName == null || resolvedName.isEmpty())
+                       if (isEmpty(resolvedName))
                                continue;
                        if (! seen.add(resolvedName))
                                continue;
@@ -2697,7 +2697,7 @@ public class RestContext extends Context {
         */
        private final Memoizer<Long> asyncTimeoutMillis = memoizer(() -> {
                var s = 
mergeReplacedStringAttribute(PROPERTY_asyncTimeoutMillis, null);
-               if (s == null || s.isEmpty())
+               if (isEmpty(s))
                        return -1L;
                try {
                        return Long.parseLong(s.trim());
@@ -2718,7 +2718,7 @@ public class RestContext extends Context {
        private final Memoizer<Executor> asyncCompletionExecutor = memoizer(() 
-> {
                // Programmatic override takes priority over the annotation 
chain.
                var name = resolveAsyncCompletionExecutorName();
-               if (name == null || name.isBlank())
+               if (isBlank(name))
                        return null;
                var resolved = beanStore().getBean(Executor.class, name);
                // Try ExecutorService as well (a common supertype users supply 
that is-a Executor).
@@ -3099,7 +3099,7 @@ public class RestContext extends Context {
                        try {
                                x.invoke(beanStore, getResource());
                        } catch (Exception e) {
-                               getLogger().log(Level.WARNING, unwrap(e), () -> 
f("Error occurred invoking servlet-destroy method ''{0}''.", x.getFullName()));
+                               getLogger().log(Level.WARNING, unwrap(e), () -> 
f("Error occurred invoking servlet-destroy method '%s'.", x.getFullName()));
                        }
                }
                if (!isMixinContext) {
@@ -3107,7 +3107,7 @@ public class RestContext extends Context {
                                try {
                                        mctx.destroy();
                                } catch (Exception e) {
-                                       getLogger().log(Level.WARNING, 
unwrap(e), () -> f("Error occurred destroying mixin sub-context ''{0}''.", 
mctx.getResourceClass().getName()));
+                                       getLogger().log(Level.WARNING, 
unwrap(e), () -> f("Error occurred destroying mixin sub-context '%s'.", 
mctx.getResourceClass().getName()));
                                }
                        }
                }
@@ -4325,7 +4325,7 @@ public class RestContext extends Context {
                        try {
                                x.invoke(session.getBeanStore(), getResource());
                        } catch (Exception e) {
-                               getLogger().log(Level.WARNING, unwrap(e), () -> 
f("Error occurred invoking finish-call method ''{0}''.", x.getFullName()));
+                               getLogger().log(Level.WARNING, unwrap(e), () -> 
f("Error occurred invoking finish-call method '%s'.", x.getFullName()));
                        }
                }
        }
@@ -4605,7 +4605,7 @@ public class RestContext extends Context {
                var pathInfo = session.getPathInfo();
                var methodUC = session.getMethod();
                var rc = session.getStatus();
-               var onPath = pathInfo == null ? " on no pathInfo" : 
String.format(" on path '%s'", pathInfo);
+               var onPath = pathInfo == null ? " on no pathInfo" : f(" on path 
'%s'", pathInfo);
                if (rc == SC_NOT_FOUND)
                        throw new NotFound("Method ''{0}'' not found on 
resource with matching pattern{1}.", methodUC, onPath);
                else if (rc == SC_PRECONDITION_FAILED)
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/auth/AuthFilterChain.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/auth/AuthFilterChain.java
index 4055df218b..482c0de846 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/auth/AuthFilterChain.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/auth/AuthFilterChain.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.auth;
 
 import static org.apache.juneau.commons.utils.CollectionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 
 import java.io.*;
 import java.security.*;
@@ -203,7 +204,7 @@ public class AuthFilterChain implements Filter {
                var path = (contextPath != null && !contextPath.isEmpty() && 
uri.startsWith(contextPath))
                        ? uri.substring(contextPath.length())
                        : uri;
-               if (path == null || path.isEmpty())
+               if (isEmpty(path))
                        path = "/";
                var urlPath = UrlPath.of(path);
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/convention/FaviconProvider.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/convention/FaviconProvider.java
index 73abf00fe3..69a03b5f91 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/convention/FaviconProvider.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/convention/FaviconProvider.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.convention;
 
+import static org.apache.juneau.commons.utils.CollectionUtils.*;
+
 import java.io.*;
 import java.util.*;
 
@@ -90,9 +92,7 @@ public class FaviconProvider {
         *      configured {@code Cache-Control} header.
         */
        public HttpResource serve() {
-               var hdrs = new ArrayList<HttpHeader>();  // TODO - Use 
Utils.list()
-               hdrs.add(ContentType.of("image/x-icon"));
-               hdrs.add(CacheControl.of(cacheControl));
+               List<HttpHeader> hdrs = list(ContentType.of("image/x-icon"), 
CacheControl.of(cacheControl));
                return HttpResourceBean.of(ByteArrayBody.of(bytes, 
"image/x-icon"), hdrs);
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHttpPart.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHttpPart.java
index 32a4e53a6c..ddd6490d14 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHttpPart.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHttpPart.java
@@ -522,7 +522,7 @@ public class RequestHttpPart {
        public boolean equals(Object o) {
                if (o instanceof org.apache.juneau.http.HttpPart hp)
                        return eq(getName(), hp.getName()) && eq(getValue(), 
hp.getValue());
-               if (o instanceof org.apache.juneau.http.HttpHeader hh)
+               if (o instanceof HttpHeader hh)
                        return eq(getName(), hh.getName()) && eq(getValue(), 
hh.getValue());
                return false;
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/AdminProvider.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/AdminProvider.java
index 0ae83ff520..30325ee022 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/AdminProvider.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/AdminProvider.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.ops;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.io.*;
 import java.lang.management.*;
 import java.util.*;
@@ -286,7 +288,7 @@ public class AdminProvider {
                 * @return This object.
                 */
                public Builder cacheFlush(String name, Runnable hook) {
-                       if (name == null || name.isBlank())
+                       if (isBlank(name))
                                throw new IllegalArgumentException("Argument 
'name' must not be null or blank");
                        if (hook == null)
                                throw new IllegalArgumentException("Argument 
'hook' must not be null");
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/EchoMixin.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/EchoMixin.java
index 5a2fe6e628..e0f407271a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/EchoMixin.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ops/EchoMixin.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.ops;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.io.*;
 import java.nio.charset.*;
 import java.util.*;
@@ -371,7 +373,7 @@ public class EchoMixin {
                 * @return This object.
                 */
                public Builder redactHeader(String value) {
-                       if (value == null || value.isBlank())
+                       if (isBlank(value))
                                throw new IllegalArgumentException("Argument 
'value' must not be null or blank");
                        redactedHeaders.add(value);
                        return this;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ProblemDetailsProcessor.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ProblemDetailsProcessor.java
index cb33b311f1..e1d4e5d21b 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ProblemDetailsProcessor.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ProblemDetailsProcessor.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.processor;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -250,7 +252,7 @@ public class ProblemDetailsProcessor implements 
ResponseProcessor {
        }
 
        private static boolean acceptsProblemJson(String accept) {
-               if (accept == null || accept.isEmpty())
+               if (isEmpty(accept))
                        return true;
                return accept.contains(PROBLEM_JSON) || accept.contains("*/*");
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseBroadcaster.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseBroadcaster.java
index e4a6b50fc7..2c54c763dc 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseBroadcaster.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseBroadcaster.java
@@ -16,6 +16,7 @@
  */
 package org.apache.juneau.rest.sse;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.util.concurrent.*;
@@ -65,7 +66,7 @@ public class SseBroadcaster {
                "resource" // Returned subscription is caller-owned and closed 
by the caller/framework.
        })
        public SseSubscription subscribe(String id) {
-               if (id == null || id.isEmpty())
+               if (isEmpty(id))
                        throw illegalArg("id cannot be null or empty.");
                var subscription = new SseSubscription(id, queueSize, 
this::removeSubscriber);
                var previous = subscriptions.put(id, subscription);
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseSubscription.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseSubscription.java
index 5e6c28c65c..3155979386 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseSubscription.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/sse/SseSubscription.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.rest.sse;
 
 import static org.apache.juneau.commons.utils.AssertionUtils.*;
+import static org.apache.juneau.commons.utils.StringUtils.*;
 import static org.apache.juneau.commons.utils.ThrowableUtils.*;
 
 import java.util.*;
@@ -37,7 +38,7 @@ public class SseSubscription implements AutoCloseable, 
Iterable<SseEvent> {
        private final Consumer<String> closeCallback;
 
        SseSubscription(String id, int queueSize, Consumer<String> 
closeCallback) {
-               if (id == null || id.isEmpty())
+               if (isEmpty(id))
                        throw illegalArg("id cannot be null or empty.");
                this.id = id;
                this.queue = new LinkedBlockingDeque<>(queueSize);
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/tracing/TraceContextResponseProcessor.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/tracing/TraceContextResponseProcessor.java
index 0945bd85c8..70b58e3f31 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/tracing/TraceContextResponseProcessor.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/tracing/TraceContextResponseProcessor.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.tracing;
 
+import static org.apache.juneau.commons.utils.StringUtils.*;
+
 import java.io.*;
 import java.util.logging.*;
 
@@ -99,7 +101,7 @@ public class TraceContextResponseProcessor implements 
ResponseProcessor {
 
                // NoOp short-circuit: no active tracer stashed a trace context 
for this request.
                var traceparent = 
req.getAttribute(ATTR_TRACEPARENT).as(String.class).orElse(null);
-               if (traceparent == null || traceparent.isEmpty())
+               if (isEmpty(traceparent))
                        return NEXT;
 
                var res = opSession.getResponse();
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
index 8c25f1f1a1..cba6e2ddef 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
@@ -299,7 +299,7 @@ public class RestUtils {
         * @return The converted path.
         */
        public static String toValidContextPath(String s) {
-               if (s == null || s.isEmpty())
+               if (isEmpty(s))
                        return "";
                s = trimTrailingSlashes(s);
                if (s.isEmpty())

Reply via email to