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 ff05cf899 Test modernization, clean up utility classes.
ff05cf899 is described below

commit ff05cf89901da4eb217e983ee47e3fc3686fd653
Author: James Bognar <[email protected]>
AuthorDate: Mon Aug 25 15:31:37 2025 -0400

    Test modernization, clean up utility classes.
---
 .../java/org/apache/juneau/bean/html5/Script.java  |   2 -
 .../java/org/apache/juneau/bean/html5/Style.java   |   2 -
 .../juneau/assertions/AssertionPredicates.java     |   2 +-
 .../juneau/assertions/FluentBeanAssertion.java     |   1 -
 .../juneau/assertions/FluentListAssertion.java     |   1 -
 .../juneau/assertions/FluentStringAssertion.java   |   2 +-
 .../apache/juneau/common/internal/StringUtils.java | 128 +++------------------
 .../org/apache/juneau/common/internal/Utils.java   | 115 ++++++++++++++++--
 .../main/java/org/apache/juneau/config/Entry.java  |   2 +-
 .../apache/juneau/config/event/ConfigEvent.java    |   3 +-
 .../java/org/apache/juneau/AnnotationApplier.java  |   9 +-
 .../main/java/org/apache/juneau/BeanFilter.java    |  13 +--
 .../java/org/apache/juneau/BeanPropertyMeta.java   |   1 -
 .../main/java/org/apache/juneau/BeanRegistry.java  |   3 +-
 .../org/apache/juneau/BeanTraverseSession.java     |   3 +-
 .../java/org/apache/juneau/MarshalledFilter.java   |   4 +-
 .../java/org/apache/juneau/PropertyNamerDLC.java   |   4 +-
 .../java/org/apache/juneau/PropertyNamerDUCS.java  |   4 +-
 .../java/org/apache/juneau/PropertyNamerULC.java   |   4 +-
 .../main/java/org/apache/juneau/UriContext.java    |  17 +--
 .../src/main/java/org/apache/juneau/Version.java   |   3 +-
 .../juneau/annotation/ExternalDocsAnnotation.java  |   2 +-
 .../apache/juneau/annotation/SchemaAnnotation.java |   4 +-
 .../juneau/annotation/SubItemsAnnotation.java      |   2 +-
 .../org/apache/juneau/collections/JsonList.java    |   2 +-
 .../org/apache/juneau/collections/JsonMap.java     |   4 +-
 .../java/org/apache/juneau/cp/BasicFileFinder.java |   2 +-
 .../main/java/org/apache/juneau/cp/BeanStore.java  |   2 +-
 .../java/org/apache/juneau/cp/BeanStoreEntry.java  |   5 +-
 .../main/java/org/apache/juneau/cp/LocalDir.java   |   2 +-
 .../org/apache/juneau/html/HtmlParserSession.java  |   6 +-
 .../apache/juneau/html/HtmlSerializerSession.java  |   4 +-
 .../juneau/http/annotation/FormDataAnnotation.java |   8 +-
 .../juneau/http/annotation/HeaderAnnotation.java   |   8 +-
 .../juneau/http/annotation/PathAnnotation.java     |   8 +-
 .../juneau/http/annotation/QueryAnnotation.java    |   8 +-
 .../java/org/apache/juneau/internal/DateUtils.java |   6 +-
 .../java/org/apache/juneau/internal/FileUtils.java |   2 +-
 .../org/apache/juneau/internal/VersionRange.java   |   5 +-
 .../java/org/apache/juneau/json/JsonClassMeta.java |   5 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |   1 -
 .../jsonschema/JsonSchemaGeneratorSession.java     |   2 +-
 .../org/apache/juneau/jsonschema/TypeCategory.java |   1 -
 .../org/apache/juneau/objecttools/ObjectRest.java  |   5 +-
 .../apache/juneau/svl/MultipartResolvingVar.java   |   2 -
 .../java/org/apache/juneau/svl/MultipartVar.java   |   2 -
 .../java/org/apache/juneau/svl/vars/ArgsVar.java   |   5 +-
 .../java/org/apache/juneau/svl/vars/SwitchVar.java |   2 -
 .../juneau/swaps/XMLGregorianCalendarSwap.java     |   4 +-
 .../org/apache/juneau/uon/UonParserSession.java    |   2 +-
 .../org/apache/juneau/utils/ReflectionMap.java     |   3 +-
 .../juneau/utils/StringExpressionMatcher.java      |   4 +-
 .../apache/juneau/microservice/Microservice.java   |   3 +-
 .../org/apache/juneau/rest/client/RestRequest.java |  31 +++--
 .../apache/juneau/rest/client/RestResponse.java    |   3 +-
 .../rest/client/remote/RemoteOperationMeta.java    |   7 +-
 .../java/org/apache/juneau/http/HttpParts.java     |  17 ++-
 .../juneau/http/header/BasicBooleanHeader.java     |   3 +-
 .../apache/juneau/http/header/BasicCsvHeader.java  |   1 -
 .../apache/juneau/http/header/BasicDateHeader.java |   3 +-
 .../org/apache/juneau/http/header/BasicHeader.java |   4 +-
 .../apache/juneau/http/header/BasicUriHeader.java  |   3 +-
 .../org/apache/juneau/http/header/EntityTags.java  |   3 +-
 .../org/apache/juneau/http/header/HeaderList.java  |   1 -
 .../juneau/http/header/SerializedHeader.java       |   4 +-
 .../apache/juneau/http/part/BasicBooleanPart.java  |   7 +-
 .../apache/juneau/http/part/BasicCsvArrayPart.java |   5 +-
 .../org/apache/juneau/http/part/BasicDatePart.java |   7 +-
 .../apache/juneau/http/part/BasicIntegerPart.java  |   7 +-
 .../org/apache/juneau/http/part/BasicLongPart.java |   7 +-
 .../apache/juneau/http/part/BasicStringPart.java   |   5 +-
 .../org/apache/juneau/http/part/BasicUriPart.java  |   7 +-
 .../apache/juneau/http/part/SerializedPart.java    |   4 +-
 .../apache/juneau/http/resource/BasicResource.java |   7 +-
 .../org/apache/juneau/rest/arg/AttributeArg.java   |   7 +-
 .../org/apache/juneau/rest/arg/HasFormDataArg.java |   3 +-
 .../org/apache/juneau/rest/arg/HasQueryArg.java    |   3 +-
 .../juneau/rest/debug/BasicDebugEnablement.java    |   1 -
 .../org/apache/juneau/rest/guard/RoleMatcher.java  |   4 +-
 .../juneau/rest/httppart/RequestContent.java       |   4 +-
 .../juneau/rest/httppart/RequestFormParams.java    |   2 +-
 .../juneau/rest/httppart/RequestHeaders.java       |   2 +-
 .../juneau/rest/httppart/RequestPathParams.java    |   2 +-
 .../juneau/rest/httppart/RequestQueryParams.java   |   2 +-
 .../juneau/rest/logger/CallLoggingDetail.java      |   2 +-
 .../juneau/rest/matcher/ClientVersionMatcher.java  |   3 +-
 .../rest/processor/PlainTextPojoProcessor.java     |   7 +-
 .../apache/juneau/rest/servlet/RestServlet.java    |   2 +-
 .../rest/swagger/BasicSwaggerProviderSession.java  |  24 ++--
 .../org/apache/juneau/rest/util/RestUtils.java     |   2 +-
 .../org/apache/juneau/rest/util/UrlPathMatch.java  |   9 +-
 .../juneau/rest/vars/SerializedRequestAttrVar.java |   2 -
 .../apache/juneau/rest/widget/MenuItemWidget.java  |   4 +-
 .../test/java/org/apache/juneau/ComboInput.java    |   2 +-
 .../src/test/java/org/apache/juneau/TestUtils.java |   5 +-
 .../org/apache/juneau/config/ConfigMapTest.java    |   1 -
 .../org/apache/juneau/utils/StringUtilsTest.java   |   6 +-
 .../apache/juneau/utils/StringVarResolverTest.java |   3 +-
 98 files changed, 316 insertions(+), 366 deletions(-)

diff --git 
a/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Script.java
 
b/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Script.java
index c242fd868..7ed090a00 100644
--- 
a/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Script.java
+++ 
b/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Script.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.bean.html5;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.net.*;
 
 import org.apache.juneau.*;
diff --git 
a/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Style.java
 
b/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Style.java
index 7c2680177..d794c6b27 100644
--- 
a/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Style.java
+++ 
b/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/Style.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.bean.html5;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.common.internal.*;
 import org.apache.juneau.internal.*;
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
index d8349c265..05c5a8b7e 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicates.java
@@ -237,7 +237,7 @@ public class AssertionPredicates {
         */
        public static final <T> AssertionPredicate<T> match(String value) {
                assertArgNotNull("value", value);
-               var p = StringUtils.getMatchPattern3(value);
+               var p = Utils.getMatchPattern3(value);
                return test(x -> x != null && p.matcher(Utils.s(x)).matches(), 
MSG_valueDidNotMatchPattern, value, VALUE);
        }
 
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
index a9230fc8d..784f46af6 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentBeanAssertion.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.assertions;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static java.util.Arrays.*;
 
 import java.io.*;
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
index 43aee97f0..59c58a62f 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentListAssertion.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.assertions;
 
 import static java.util.Arrays.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.io.*;
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
index ca4f5fb1d..c09bf667d 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
@@ -541,7 +541,7 @@ public class FluentStringAssertion<R> extends 
FluentObjectAssertion<String,R> {
         */
        public R isMatches(String searchPattern) throws AssertionError {
                assertArgNotNull("searchPattern", searchPattern);
-               return isPattern(getMatchPattern3(searchPattern));
+               return isPattern(Utils.getMatchPattern3(searchPattern));
        }
 
        /**
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
index 89f6e399b..e7c2ea458 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
@@ -48,7 +48,7 @@ public final class StringUtils {
        /**
         * Predicate check to filter out null and empty strings.
         */
-       public static final Predicate<String> NOT_EMPTY = 
StringUtils::isNotEmpty3;
+       public static final Predicate<String> NOT_EMPTY = Utils::isNotEmpty3;
 
        private static final AsciiSet numberChars = 
AsciiSet.of("-xX.+-#pP0123456789abcdefABCDEF");
        private static final AsciiSet firstNumberChars 
=AsciiSet.of("+-.#0123456789");
@@ -324,69 +324,6 @@ public final class StringUtils {
 
        static final AsciiSet QUOTE_ESCAPE_SET = AsciiSet.of("\"'\\");
 
-       /**
-        * Returns <jk>true</jk> if specified string is <jk>null</jk> or empty.
-        *
-        * @param s The string to check.
-        * @return <jk>true</jk> if specified string is <jk>null</jk> or empty.
-        */
-       public static boolean isEmpty3(String s) {
-               return s == null || s.isEmpty();
-       }
-
-       /**
-        * Returns <jk>true</jk> if specified charsequence is <jk>null</jk> or 
empty.
-        *
-        * @param s The string to check.
-        * @return <jk>true</jk> if specified charsequence is <jk>null</jk> or 
empty.
-        */
-       public static boolean isEmpty3(CharSequence s) {
-               return s == null || s.isEmpty();
-       }
-
-       /**
-        * Returns <jk>true</jk> if specified string is <jk>null</jk> or empty 
or consists of only blanks.
-        *
-        * @param s The string to check.
-        * @return <jk>true</jk> if specified string is <jk>null</jk> or 
emptyor consists of only blanks.
-        */
-       public static boolean isEmptyOrBlank3(String s) {
-               return s == null || s.trim().isEmpty();
-       }
-
-       /**
-        * Returns <jk>true</jk> if specified string is not <jk>null</jk> or 
empty.
-        *
-        * @param s The string to check.
-        * @return <jk>true</jk> if specified string is not <jk>null</jk> or 
empty.
-        */
-       public static boolean isNotEmpty3(String s) {
-               return ! isEmpty3(s);
-       }
-
-       /**
-        * Returns <jk>true</jk> if either of the specified strings are not 
<jk>null</jk> or empty.
-        *
-        * @param s1 The string to check.
-        * @param s2 The string to check.
-        * @return <jk>true</jk> if either of the specified strings are not 
<jk>null</jk> or empty.
-        */
-       public static boolean isNotEmpty3(String s1, String s2) {
-               return isNotEmpty3(s1) || isNotEmpty3(s2);
-       }
-
-       /**
-        * Returns <jk>null</jk> if the specified string is <jk>null</jk> or 
empty.
-        *
-        * @param s The string to check.
-        * @return <jk>null</jk> if the specified string is <jk>null</jk> or 
empty, or the same string if not.
-        */
-       public static String nullIfEmpty3(String s) {
-               if (s == null || s.isEmpty())
-                       return null;
-               return s;
-       }
-
        /**
         * Removes escape characters from the specified characters.
         *
@@ -824,7 +761,7 @@ public final class StringUtils {
         * @throws IllegalArgumentException Value was not a valid date.
         */
        public static Date parseIsoDate(String date) throws 
IllegalArgumentException {
-               if (isEmpty3(date))
+               if (Utils.isEmpty3(date))
                        return null;
                return parseIsoCalendar(date).getTime();  // NOSONAR - NPE not 
possible.
        }
@@ -841,7 +778,7 @@ public final class StringUtils {
         * @throws IllegalArgumentException Value was not a valid date.
         */
        public static Calendar parseIsoCalendar(String date) throws 
IllegalArgumentException {
-               if (isEmpty3(date))
+               if (Utils.isEmpty3(date))
                        return null;
                date = date.trim().replace(' ', 'T');  // Convert to 'standard' 
ISO8601
                if (date.indexOf(',') != -1)  // Trim milliseconds
@@ -1132,7 +1069,7 @@ public final class StringUtils {
         */
        public static String trimStart(String s) {
                if (s != null)
-                       while (isNotEmpty3(s) && isWhitespace(s.charAt(0)))
+                       while (Utils.isNotEmpty3(s) && 
isWhitespace(s.charAt(0)))
                                s = s.substring(1);
                return s;
        }
@@ -1145,7 +1082,7 @@ public final class StringUtils {
         */
        public static String trimEnd(String s) {
                if (s != null)
-                       while (isNotEmpty3(s) && 
isWhitespace(s.charAt(s.length()-1)))
+                       while (Utils.isNotEmpty3(s) && 
isWhitespace(s.charAt(s.length()-1)))
                                s = s.substring(0, s.length()-1);
                return s;
        }
@@ -1181,7 +1118,7 @@ public final class StringUtils {
                        return s;
                while (endsWith(s, '/'))
                        s = s.substring(0, s.length()-1);
-               while (isNotEmpty3(s) && s.charAt(0) == '/')  // NOSONAR - NPE 
not possible here.
+               while (Utils.isNotEmpty3(s) && s.charAt(0) == '/')  // NOSONAR 
- NPE not possible here.
                        s = s.substring(1);
                return s;
        }
@@ -1195,9 +1132,9 @@ public final class StringUtils {
        public static String trimSlashesAndSpaces(String s) {
                if (s == null)
                        return null;
-               while (isNotEmpty3(s) && (s.charAt(s.length()-1) == '/' || 
isWhitespace(s.charAt(s.length()-1))))
+               while (Utils.isNotEmpty3(s) && (s.charAt(s.length()-1) == '/' 
|| isWhitespace(s.charAt(s.length()-1))))
                        s = s.substring(0, s.length()-1);
-               while (isNotEmpty3(s) && (s.charAt(0) == '/' || 
isWhitespace(s.charAt(0))))
+               while (Utils.isNotEmpty3(s) && (s.charAt(0) == '/' || 
isWhitespace(s.charAt(0))))
                        s = s.substring(1);
                return s;
        }
@@ -1225,7 +1162,7 @@ public final class StringUtils {
        public static String trimLeadingSlashes(String s) {
                if (s == null)
                        return null;
-               while (isNotEmpty3(s) && s.charAt(0) == '/')
+               while (Utils.isNotEmpty3(s) && s.charAt(0) == '/')
                        s = s.substring(1);
                return s;
        }
@@ -1443,7 +1380,7 @@ public final class StringUtils {
         */
        public static boolean isAbsoluteUri(String s) {  // NOSONAR - False 
positive.
 
-               if (isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return false;
 
                // Use a state machine for maximum performance.
@@ -1500,7 +1437,7 @@ public final class StringUtils {
         */
        public static boolean isUri(String s) {  // NOSONAR - False positive.
 
-               if (isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return false;
 
                // Use a state machine for maximum performance.
@@ -1617,7 +1554,7 @@ public final class StringUtils {
         */
        public static String firstNonEmpty(String...s) {
                for (var ss : s)
-                       if (isNotEmpty3(ss))
+                       if (Utils.isNotEmpty3(ss))
                                return ss;
                return null;
        }
@@ -1710,7 +1647,7 @@ public final class StringUtils {
        }
 
        private static int multiplier(String s) {
-               char c = isEmpty3(s) ? null : s.charAt(s.length()-1);  // 
NOSONAR - NPE not possible.
+               char c = Utils.isEmpty3(s) ? null : s.charAt(s.length()-1);  // 
NOSONAR - NPE not possible.
                if (c == 'G') return 1024*1024*1024;
                if (c == 'M') return 1024*1024;
                if (c == 'K') return 1024;
@@ -1750,7 +1687,7 @@ public final class StringUtils {
        }
 
        private static long multiplier2(String s) {
-               char c = isEmpty3(s) ? null : s.charAt(s.length()-1);  // 
NOSONAR - NPE not possible.
+               char c = Utils.isEmpty3(s) ? null : s.charAt(s.length()-1);  // 
NOSONAR - NPE not possible.
                if (c == 'P') return 1024*1024*1024*1024*1024l;
                if (c == 'T') return 1024*1024*1024*1024l;
                if (c == 'G') return 1024*1024*1024l;
@@ -1943,41 +1880,6 @@ public final class StringUtils {
                return s.charAt(0);
        }
 
-       /**
-        * Converts a string containing <js>"*"</js> meta characters with a 
regular expression pattern.
-        *
-        * @param s The string to create a pattern from.
-        * @return A regular expression pattern.
-        */
-       public static Pattern getMatchPattern3(String s) {
-               return getMatchPattern3(s, 0);
-       }
-
-       /**
-        * Converts a string containing <js>"*"</js> meta characters with a 
regular expression pattern.
-        *
-        * @param s The string to create a pattern from.
-        * @param flags Regular expression flags.
-        * @return A regular expression pattern.
-        */
-       public static Pattern getMatchPattern3(String s, int flags) {
-               if (s == null)
-                       return null;
-               var sb = new StringBuilder();
-               sb.append("\\Q");
-               for (var i = 0; i < s.length(); i++) {
-                       var c = s.charAt(i);
-                       if (c == '*')
-                               sb.append("\\E").append(".*").append("\\Q");
-                       else if (c == '?')
-                               sb.append("\\E").append(".").append("\\Q");
-                       else
-                               sb.append(c);
-               }
-               sb.append("\\E");
-               return Pattern.compile(sb.toString(), flags);
-       }
-
        /**
         * Parses a duration string.
         *
@@ -2011,7 +1913,7 @@ public final class StringUtils {
         */
        public static long getDuration(String s) {
                s = trim(s);
-               if (isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return -1;
                int i;
                for (i = 0; i < s.length(); i++) {
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
index d55710ab7..f18b5ac2e 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
@@ -24,6 +24,7 @@ import java.time.format.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.function.*;
+import java.util.regex.*;
 import java.util.stream.*;
 
 
@@ -563,7 +564,7 @@ public class Utils {
                if (value instanceof Collection<?> x) return ! x.isEmpty();
                if (value instanceof Map<?,?> x) return ! x.isEmpty();
                if (value.getClass().isArray()) return Array.getLength(value) > 
0;
-               return StringUtils.isNotEmpty3(s(value));
+               return Utils.isNotEmpty3(s(value));
        }
 
        /**
@@ -1018,7 +1019,7 @@ public class Utils {
        public static void split3(String s, char c, Consumer<String> consumer) {
                var escapeChars = StringUtils.getEscapeSet(c);
        
-               if (StringUtils.isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return;
                if (s.indexOf(c) == -1) {
                        consumer.accept(s);
@@ -1072,7 +1073,7 @@ public class Utils {
        
                if (s == null)
                        return null;  // NOSONAR - Intentional.
-               if (StringUtils.isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return Collections.emptyList();
                if (s.indexOf(c) == -1)
                        return Collections.singletonList(s);
@@ -1140,7 +1141,7 @@ public class Utils {
        
                if (s == null)
                        return null;  // NOSONAR - Intentional.
-               if (StringUtils.isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return Collections.emptyMap();
        
                var m = new LinkedHashMap<String,String>();
@@ -1238,7 +1239,7 @@ public class Utils {
                var escapeChars = StringUtils.getEscapeSet(',');
        
                if (s == null) return null;  // NOSONAR - Intentional.
-               if (StringUtils.isEmpty3(s)) return Collections.emptyList();
+               if (Utils.isEmpty3(s)) return Collections.emptyList();
                if (s.indexOf(',') == -1) return 
Collections.singletonList(StringUtils.trim(s));
        
                var l = new LinkedList<String>();
@@ -1287,7 +1288,7 @@ public class Utils {
         */
        public static List<String> splitNestedInner(String s) {
                if (s == null) throw illegalArg("String was null.");
-               if (StringUtils.isEmpty3(s)) throw illegalArg("String was 
empty.");
+               if (Utils.isEmpty3(s)) throw illegalArg("String was empty.");
        
                final int
                        S1 = 1,  // Looking for '{'
@@ -1347,7 +1348,7 @@ public class Utils {
        
                s = s.trim();
        
-               if (StringUtils.isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return new String[0];
        
                if (! StringUtils.containsAny(s, ' ', '\t', '\'', '"'))
@@ -1420,7 +1421,7 @@ public class Utils {
        
                if (s == null)
                        return null;  // NOSONAR - Intentional.
-               if (StringUtils.isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return new String[0];
                if (s.indexOf(',') == -1)
                        return new String[]{s};
@@ -1448,4 +1449,102 @@ public class Utils {
        
                return l.toArray(new String[l.size()]);
        }
+
+       /**
+        * Returns <jk>true</jk> if specified string is <jk>null</jk> or empty.
+        *
+        * @param s The string to check.
+        * @return <jk>true</jk> if specified string is <jk>null</jk> or empty.
+        */
+       public static boolean isEmpty3(String s) {
+               return s == null || s.isEmpty();
+       }
+
+       /**
+        * Returns <jk>true</jk> if specified charsequence is <jk>null</jk> or 
empty.
+        *
+        * @param s The string to check.
+        * @return <jk>true</jk> if specified charsequence is <jk>null</jk> or 
empty.
+        */
+       public static boolean isEmpty3(CharSequence s) {
+               return s == null || s.isEmpty();
+       }
+
+       /**
+        * Returns <jk>true</jk> if specified string is <jk>null</jk> or empty 
or consists of only blanks.
+        *
+        * @param s The string to check.
+        * @return <jk>true</jk> if specified string is <jk>null</jk> or 
emptyor consists of only blanks.
+        */
+       public static boolean isEmptyOrBlank3(String s) {
+               return s == null || s.trim().isEmpty();
+       }
+
+       /**
+        * Returns <jk>true</jk> if specified string is not <jk>null</jk> or 
empty.
+        *
+        * @param s The string to check.
+        * @return <jk>true</jk> if specified string is not <jk>null</jk> or 
empty.
+        */
+       public static boolean isNotEmpty3(String s) {
+               return ! isEmpty3(s);
+       }
+
+       /**
+        * Returns <jk>true</jk> if either of the specified strings are not 
<jk>null</jk> or empty.
+        *
+        * @param s1 The string to check.
+        * @param s2 The string to check.
+        * @return <jk>true</jk> if either of the specified strings are not 
<jk>null</jk> or empty.
+        */
+       public static boolean isNotEmpty3(String s1, String s2) {
+               return isNotEmpty3(s1) || isNotEmpty3(s2);
+       }
+
+       /**
+        * Returns <jk>null</jk> if the specified string is <jk>null</jk> or 
empty.
+        *
+        * @param s The string to check.
+        * @return <jk>null</jk> if the specified string is <jk>null</jk> or 
empty, or the same string if not.
+        */
+       public static String nullIfEmpty3(String s) {
+               if (s == null || s.isEmpty())
+                       return null;
+               return s;
+       }
+
+       /**
+        * Converts a string containing <js>"*"</js> meta characters with a 
regular expression pattern.
+        *
+        * @param s The string to create a pattern from.
+        * @return A regular expression pattern.
+        */
+       public static Pattern getMatchPattern3(String s) {
+               return getMatchPattern3(s, 0);
+       }
+
+       /**
+        * Converts a string containing <js>"*"</js> meta characters with a 
regular expression pattern.
+        *
+        * @param s The string to create a pattern from.
+        * @param flags Regular expression flags.
+        * @return A regular expression pattern.
+        */
+       public static Pattern getMatchPattern3(String s, int flags) {
+               if (s == null)
+                       return null;
+               var sb = new StringBuilder();
+               sb.append("\\Q");
+               for (var i = 0; i < s.length(); i++) {
+                       var c = s.charAt(i);
+                       if (c == '*')
+                               sb.append("\\E").append(".*").append("\\Q");
+                       else if (c == '?')
+                               sb.append("\\E").append(".").append("\\Q");
+                       else
+                               sb.append(c);
+               }
+               sb.append("\\E");
+               return Pattern.compile(sb.toString(), flags);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
index a91db67d9..48f27c5e8 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Entry.java
@@ -560,7 +560,7 @@ public class Entry {
        
//-----------------------------------------------------------------------------------------------------------------
 
        private boolean isEmpty() {
-               return StringUtils.isEmpty3(value);
+               return Utils.isEmpty3(value);
        }
 
        private boolean isNull() {
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
index 6153f0c53..c93e293da 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvent.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.config.event;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.config.event.ConfigEventType.*;
 
 import java.util.*;
@@ -228,7 +227,7 @@ public class ConfigEvent {
                                if (val.indexOf('#') != -1)
                                        val = val.replace("#", "\\#");
                                out.append(val);
-                               if (isNotEmpty3(comment))
+                               if (Utils.isNotEmpty3(comment))
                                        out.append(" # ").append(comment);
                                out.append(')');
                                yield out.toString();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
index d2873d608..6a0a8f3f8 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AnnotationApplier.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 import java.lang.annotation.*;
 import java.nio.charset.*;
@@ -144,7 +143,7 @@ public abstract class AnnotationApplier<A extends 
Annotation, B> {
         */
        protected Optional<String> string(String in) {
                in = vr.resolve(in);
-               return Utils.opt(isEmpty3(in) ? null : in);
+               return Utils.opt(Utils.isEmpty3(in) ? null : in);
        }
 
        /**
@@ -168,7 +167,7 @@ public abstract class AnnotationApplier<A extends 
Annotation, B> {
         * @return The array wrapped in an {@link Optional}.
         */
        protected Optional<String[]> strings(String[] in) {
-               return Utils.opt(in.length == 0 ? null : 
Arrays.stream(in).map(vr::resolve).filter(StringUtils::isNotEmpty3).toArray(String[]::new));
+               return Utils.opt(in.length == 0 ? null : 
Arrays.stream(in).map(vr::resolve).filter(Utils::isNotEmpty3).toArray(String[]::new));
        }
 
        /**
@@ -178,7 +177,7 @@ public abstract class AnnotationApplier<A extends 
Annotation, B> {
         * @return An array with resolved strings.
         */
        protected Stream<String> stream(String[] in) {
-               return 
Arrays.stream(in).map(vr::resolve).filter(StringUtils::isNotEmpty3);
+               return 
Arrays.stream(in).map(vr::resolve).filter(Utils::isNotEmpty3);
        }
 
        /**
@@ -188,7 +187,7 @@ public abstract class AnnotationApplier<A extends 
Annotation, B> {
         * @return An array with resolved strings.
         */
        protected Stream<String> cdl(String in) {
-               return 
Arrays.stream(Utils.split3(vr.resolve(in))).filter(StringUtils::isNotEmpty3);
+               return 
Arrays.stream(Utils.split3(vr.resolve(in))).filter(Utils::isNotEmpty3);
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
index b3b4b4ca8..97d8fe5c3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
@@ -18,7 +18,6 @@ import java.util.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.common.internal.Utils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
 
 import org.apache.juneau.annotation.*;
@@ -97,20 +96,20 @@ public final class BeanFilter {
                public Builder applyAnnotations(List<Bean> annotations) {
 
                        annotations.forEach(x -> {
-                               if (isNotEmpty3(x.properties(), x.p())) 
properties(x.properties(), x.p());
+                               if (Utils.isNotEmpty3(x.properties(), x.p())) 
properties(x.properties(), x.p());
                                if (x.sort()) sortProperties(true);
                                if (x.findFluentSetters()) findFluentSetters();
-                               if (isNotEmpty3(x.excludeProperties(), x.xp())) 
excludeProperties(x.excludeProperties(), x.xp());
-                               if (isNotEmpty3(x.readOnlyProperties(), 
x.ro())) readOnlyProperties(x.readOnlyProperties(), x.ro());
-                               if (isNotEmpty3(x.writeOnlyProperties(), 
x.wo())) writeOnlyProperties(x.writeOnlyProperties(), x.wo());
-                               if (isNotEmpty3(x.typeName())) 
typeName(x.typeName());
+                               if (Utils.isNotEmpty3(x.excludeProperties(), 
x.xp())) excludeProperties(x.excludeProperties(), x.xp());
+                               if (Utils.isNotEmpty3(x.readOnlyProperties(), 
x.ro())) readOnlyProperties(x.readOnlyProperties(), x.ro());
+                               if (Utils.isNotEmpty3(x.writeOnlyProperties(), 
x.wo())) writeOnlyProperties(x.writeOnlyProperties(), x.wo());
+                               if (Utils.isNotEmpty3(x.typeName())) 
typeName(x.typeName());
                                if (isNotVoid(x.propertyNamer())) 
propertyNamer(x.propertyNamer());
                                if (isNotVoid(x.interfaceClass())) 
interfaceClass(x.interfaceClass());
                                if (isNotVoid(x.stopClass())) 
stopClass(x.stopClass());
                                if (isNotVoid(x.interceptor())) 
interceptor(x.interceptor());
                                if (isNotVoid(x.implClass())) 
implClass(x.implClass());
                                if (isNotEmptyArray(x.dictionary())) 
dictionary(x.dictionary());
-                               if (isNotEmpty3(x.example())) 
example(x.example());
+                               if (Utils.isNotEmpty3(x.example())) 
example(x.example());
                        });
                        return this;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 545decae0..c23f60e4d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.ThrowableUtils.*;
 import static org.apache.juneau.common.internal.Utils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
index 7bc4b76fd..e55f1b867 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 
 import java.lang.reflect.*;
@@ -91,7 +90,7 @@ public class BeanRegistry {
                                        });
                                } else {
                                        Value<String> typeName = Value.empty();
-                                       ci.forEachAnnotation(beanContext, 
Bean.class, x -> isNotEmpty3(x.typeName()), x -> typeName.set(x.typeName()));
+                                       ci.forEachAnnotation(beanContext, 
Bean.class, x -> Utils.isNotEmpty3(x.typeName()), x -> 
typeName.set(x.typeName()));
                                        addToMap(
                                                typeName.orElseThrow(() -> new 
BeanRuntimeException("Class ''{0}'' was passed to BeanRegistry but it doesn't 
have a @Bean(typeName) annotation defined.", className(c))),
                                                beanContext.getClassMeta(c)
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseSession.java
index 1b0e61fd8..9670e7699 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseSession.java
@@ -13,7 +13,6 @@
 package org.apache.juneau;
 
 import static org.apache.juneau.collections.JsonMap.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 
 import java.text.*;
@@ -345,7 +344,7 @@ public class BeanTraverseSession extends BeanSession {
 
                String toString(boolean simple) {
                        StringBuilder sb = new 
StringBuilder().append('[').append(depth).append(']').append(' ');
-                       sb.append(isEmpty3(name) ? "<noname>" : 
name).append(':');
+                       sb.append(Utils.isEmpty3(name) ? "<noname>" : 
name).append(':');
                        sb.append(aType.toString(simple));
                        if (aType != 
aType.getSerializedClassMeta(BeanTraverseSession.this))
                                
sb.append('/').append(aType.getSerializedClassMeta(BeanTraverseSession.this).toString(simple));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
index 31e199998..a039b8e1d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
@@ -12,12 +12,12 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.common.internal.*;
 
 /**
  * Parent class for all non-bean filters.
@@ -83,7 +83,7 @@ public final class MarshalledFilter {
                        annotations.forEach(x -> {
                                if (isNotVoid(x.implClass()))
                                        implClass(x.implClass());
-                               if (isNotEmpty3(x.example()))
+                               if (Utils.isNotEmpty3(x.example()))
                                        example(x.example());
                        });
                        return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDLC.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDLC.java
index 72bf47815..eaca636b7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDLC.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDLC.java
@@ -13,7 +13,7 @@
 package org.apache.juneau;
 
 import static java.lang.Character.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
+import org.apache.juneau.common.internal.*;
 
 /**
  * Converts property names to dashed-lower-case format.
@@ -35,7 +35,7 @@ public final class PropertyNamerDLC implements PropertyNamer {
 
        @Override /* PropertyNamer */
        public String getPropertyName(String name) {
-               if (isEmpty3(name))
+               if (Utils.isEmpty3(name))
                        return name;
 
                int numUCs = 0;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDUCS.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDUCS.java
index 3fff1666b..d86301496 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDUCS.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerDUCS.java
@@ -13,7 +13,7 @@
 package org.apache.juneau;
 
 import static java.lang.Character.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
+import org.apache.juneau.common.internal.*;
 
 /**
  * Converts property names to dashed-upper-case-start format.
@@ -35,7 +35,7 @@ public final class PropertyNamerDUCS implements PropertyNamer 
{
 
        @Override /* PropertyNamer */
        public String getPropertyName(String name) {
-               if (isEmpty3(name))
+               if (Utils.isEmpty3(name))
                        return name;
 
                int numUCs = 0;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerULC.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerULC.java
index 01c5fffa1..a1b00f81b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerULC.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyNamerULC.java
@@ -13,7 +13,7 @@
 package org.apache.juneau;
 
 import static java.lang.Character.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
+import org.apache.juneau.common.internal.*;
 
 /**
  * Converts property names to underscore-lower-case format.
@@ -35,7 +35,7 @@ public final class PropertyNamerULC implements PropertyNamer {
 
        @Override /* PropertyNamer */
        public String getPropertyName(String name) {
-               if (isEmpty3(name))
+               if (Utils.isEmpty3(name))
                        return name;
 
                int numUCs = 0;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriContext.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriContext.java
index b3a496f09..a44679e5f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriContext.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/UriContext.java
@@ -17,6 +17,7 @@ import static 
org.apache.juneau.common.internal.ThrowableUtils.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 
@@ -108,10 +109,10 @@ public class UriContext {
         */
        @Beanc
        public UriContext(@Name("authority") String authority, 
@Name("contextRoot") String contextRoot, @Name("servletPath") String 
servletPath, @Name("pathInfo") String pathInfo) {
-               this.authority = nullIfEmpty3(trimSlashes(authority));
-               this.contextRoot = nullIfEmpty3(trimSlashes(contextRoot));
-               this.servletPath = nullIfEmpty3(trimSlashes(servletPath));
-               this.pathInfo = nullIfEmpty3(trimSlashes(pathInfo));
+               this.authority = Utils.nullIfEmpty3(trimSlashes(authority));
+               this.contextRoot = Utils.nullIfEmpty3(trimSlashes(contextRoot));
+               this.servletPath = Utils.nullIfEmpty3(trimSlashes(servletPath));
+               this.pathInfo = Utils.nullIfEmpty3(trimSlashes(pathInfo));
                this.parentPath = this.pathInfo == null || 
this.pathInfo.indexOf('/') == -1 ? null
                        : this.pathInfo.substring(0, 
this.pathInfo.lastIndexOf('/'));
        }
@@ -141,10 +142,10 @@ public class UriContext {
         */
        public UriContext(String s) throws ParseException {
                JsonMap m = JsonMap.ofJson(s);
-               this.authority = 
nullIfEmpty3(trimSlashes(m.getString("authority")));
-               this.contextRoot = 
nullIfEmpty3(trimSlashes(m.getString("contextRoot")));
-               this.servletPath = 
nullIfEmpty3(trimSlashes(m.getString("servletPath")));
-               this.pathInfo = 
nullIfEmpty3(trimSlashes(m.getString("pathInfo")));
+               this.authority = 
Utils.nullIfEmpty3(trimSlashes(m.getString("authority")));
+               this.contextRoot = 
Utils.nullIfEmpty3(trimSlashes(m.getString("contextRoot")));
+               this.servletPath = 
Utils.nullIfEmpty3(trimSlashes(m.getString("servletPath")));
+               this.pathInfo = 
Utils.nullIfEmpty3(trimSlashes(m.getString("pathInfo")));
                this.parentPath = this.pathInfo == null || 
this.pathInfo.indexOf('/') == -1 ? null
                        : this.pathInfo.substring(0, 
this.pathInfo.lastIndexOf('/'));
        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
index 732ae3b82..586f31937 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Version.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.util.*;
 
 import org.apache.juneau.common.internal.*;
@@ -67,7 +66,7 @@ public class Version implements Comparable<Version> {
         *      Any parts that are not numeric are interpreted as {@link 
Integer#MAX_VALUE}
         */
        public Version(String value) {
-               if (isEmpty3(value))
+               if (Utils.isEmpty3(value))
                        value = "0";
                String[] sParts = Utils.split3(value, '.');
                parts = new int[sParts.length];
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
index c76029d34..cb7a27aac 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/ExternalDocsAnnotation.java
@@ -66,7 +66,7 @@ public class ExternalDocsAnnotation {
        public static JsonMap merge(JsonMap m, ExternalDocs a) throws 
ParseException {
                if (ExternalDocsAnnotation.empty(a))
                        return m;
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                return m
                        .appendIf(ne, "description", joinnl(a.description()))
                        .appendIf(ne, "url", a.url())
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
index 785f2808f..0cd0d7528 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SchemaAnnotation.java
@@ -95,7 +95,7 @@ public class SchemaAnnotation {
                JsonMap m = new JsonMap();
                if (SchemaAnnotation.empty(a))
                        return m;
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                Predicate<Collection<?>> nec = Utils::isNotEmpty2;
                Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
                Predicate<Boolean> nf = Utils::isTrue;
@@ -138,7 +138,7 @@ public class SchemaAnnotation {
        private static JsonMap merge(JsonMap m, Items a) throws ParseException {
                if (ItemsAnnotation.empty(a))
                        return m;
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                Predicate<Collection<?>> nec = Utils::isNotEmpty2;
                Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
                Predicate<Boolean> nf = Utils::isTrue;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
index 7f354ecad..761a8011f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/SubItemsAnnotation.java
@@ -68,7 +68,7 @@ public class SubItemsAnnotation {
        public static JsonMap merge(JsonMap om, SubItems a) throws 
ParseException {
                if (SubItemsAnnotation.empty(a))
                        return om;
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                Predicate<Collection<?>> nec = Utils::isNotEmpty2;
                Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
                Predicate<Boolean> nf = Utils::isTrue;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
index 3464f7546..d01b7a5b7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonList.java
@@ -125,7 +125,7 @@ public class JsonList extends LinkedList<Object> {
         * @throws ParseException Malformed input encountered.
         */
        public static JsonList ofJsonOrCdl(String s) throws ParseException {
-               if (StringUtils.isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return null;
                if (! StringUtils.isJsonArray(s, true))
                        return new JsonList((Object[])Utils.split3(s.trim(), 
','));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
index 82c549b3e..da527e7b5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/JsonMap.java
@@ -326,7 +326,7 @@ public class JsonMap extends LinkedHashMap<String,Object> {
                this(p == null ? BeanContext.DEFAULT_SESSION : 
p.getBeanContext().getSession());
                if (p == null)
                        p = JsonParser.DEFAULT;
-               if (! StringUtils.isEmpty3(in))
+               if (! Utils.isEmpty3(in))
                        p.parseIntoMap(in, this, bs().string(), bs().object());
        }
 
@@ -1309,7 +1309,7 @@ public class JsonMap extends LinkedHashMap<String,Object> 
{
                if (val == null)
                        return false;
                if (val instanceof CharSequence)
-                       return ! StringUtils.isEmpty3((CharSequence)val);
+                       return ! Utils.isEmpty3((CharSequence)val);
                return false;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java
index 8d9a4187b..548d495f0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicFileFinder.java
@@ -238,7 +238,7 @@ public class BasicFileFinder implements FileFinder {
         * @return <jk>true</jk> if the path is invalid.
         */
        protected boolean isInvalidPath(String path) {
-               return StringUtils.isEmpty3(path) || path.contains("..") || 
path.contains("%");
+               return Utils.isEmpty3(path) || path.contains("..") || 
path.contains("%");
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
index 9146208ec..6e7d3e762 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
@@ -354,7 +354,7 @@ public class BeanStore {
                BeanStoreEntry<T> e = createEntry(beanType, bean, name);
                try (SimpleLock x = lock.write()) {
                        entries.addFirst(e);
-                       if (isEmpty3(name))
+                       if (Utils.isEmpty3(name))
                                unnamedEntries.put(beanType, e);
                }
                return this;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
index a220fe350..73f6330b3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStoreEntry.java
@@ -14,7 +14,6 @@ package org.apache.juneau.cp;
 
 import static org.apache.juneau.collections.JsonMap.*;
 import static org.apache.juneau.common.internal.ArgUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 
 import java.util.function.*;
@@ -73,7 +72,7 @@ public class BeanStoreEntry<T> {
        protected BeanStoreEntry(Class<T> type, Supplier<T> bean, String name) {
                this.bean = assertArgNotNull("bean", bean);
                this.type = assertArgNotNull("type", type);
-               this.name = nullIfEmpty3(name);
+               this.name = Utils.nullIfEmpty3(name);
        }
 
        /**
@@ -94,7 +93,7 @@ public class BeanStoreEntry<T> {
         * @return <jk>true</jk> if this bean is exactly of the specified type 
and has the specified name.
         */
        public boolean matches(Class<?> type, String name) {
-               name = nullIfEmpty3(name);
+               name = Utils.nullIfEmpty3(name);
                return matches(type) && Utils.eq(this.name, name);
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/LocalDir.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/LocalDir.java
index e91891a9e..b9fbe8cf6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/LocalDir.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/LocalDir.java
@@ -49,7 +49,7 @@ public class LocalDir {
         */
        public LocalDir(Class<?> clazz, String clazzPath) {
                this.clazz = assertArgNotNull("clazz", clazz);
-               this.clazzPath = "/".equals(clazzPath) ? "/" : 
nullIfEmpty3(trimTrailingSlashes(clazzPath));
+               this.clazzPath = "/".equals(clazzPath) ? "/" : 
Utils.nullIfEmpty3(trimTrailingSlashes(clazzPath));
                this.path = null;
                this.hashCode = HashCode.of(clazz, clazzPath);
        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index 03e6d3930..2764f595f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -476,8 +476,8 @@ public final class HtmlParserSession extends 
XmlParserSession {
                String name = getElementText(r);
                if (beanType != null && beanType.hasAnnotation(HtmlLink.class)) 
{
                        Value<String> uriProperty = Value.empty(), nameProperty 
= Value.empty();
-                       beanType.forEachAnnotation(HtmlLink.class, x -> 
isNotEmpty3(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
-                       beanType.forEachAnnotation(HtmlLink.class, x -> 
isNotEmpty3(x.nameProperty()), x -> nameProperty.set(x.nameProperty()));
+                       beanType.forEachAnnotation(HtmlLink.class, x -> 
Utils.isNotEmpty3(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
+                       beanType.forEachAnnotation(HtmlLink.class, x -> 
Utils.isNotEmpty3(x.nameProperty()), x -> nameProperty.set(x.nameProperty()));
                        BeanMap<T> m = newBeanMap(beanType.getInnerClass());
                        m.put(uriProperty.orElse(""), href);
                        m.put(nameProperty.orElse(""), name);
@@ -812,7 +812,7 @@ public final class HtmlParserSession extends 
XmlParserSession {
                                        et = r.next();
                                        if (et == CHARACTERS) {
                                                String s = r.getText();
-                                               if (isNotEmpty3(s)) {
+                                               if (Utils.isNotEmpty3(s)) {
                                                        char c = 
r.getText().charAt(0);
                                                        if (c == '\u2003')
                                                                c = '\t';
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index c50e37ae7..cbfa247ce 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -515,8 +515,8 @@ public class HtmlSerializerSession extends 
XmlSerializerSession {
                                BeanMap m = toBeanMap(o);
                                if (aType.hasAnnotation(HtmlLink.class)) {
                                        Value<String> uriProperty = 
Value.empty(), nameProperty = Value.empty();
-                                       aType.forEachAnnotation(HtmlLink.class, 
x -> isNotEmpty3(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
-                                       aType.forEachAnnotation(HtmlLink.class, 
x -> isNotEmpty3(x.nameProperty()), x -> nameProperty.set(x.nameProperty()));
+                                       aType.forEachAnnotation(HtmlLink.class, 
x -> Utils.isNotEmpty3(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
+                                       aType.forEachAnnotation(HtmlLink.class, 
x -> Utils.isNotEmpty3(x.nameProperty()), x -> 
nameProperty.set(x.nameProperty()));
                                        Object urlProp = 
m.get(uriProperty.orElse(""));
                                        Object nameProp = 
m.get(nameProperty.orElse(""));
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
index 75c37cd67..fdf95b88b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
@@ -12,13 +12,13 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.annotation;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 import java.lang.annotation.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -88,8 +88,8 @@ public class FormDataAnnotation {
         */
        public static Value<String> findName(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(FormData.class, x -> 
isNotEmpty3(x.value()), x -> n.set(x.value()));
-               pi.forEachAnnotation(FormData.class, x -> 
isNotEmpty3(x.name()), x -> n.set(x.name()));
+               pi.forEachAnnotation(FormData.class, x -> 
Utils.isNotEmpty3(x.value()), x -> n.set(x.value()));
+               pi.forEachAnnotation(FormData.class, x -> 
Utils.isNotEmpty3(x.name()), x -> n.set(x.name()));
                return n;
        }
 
@@ -101,7 +101,7 @@ public class FormDataAnnotation {
         */
        public static Value<String> findDef(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(FormData.class, x -> isNotEmpty3(x.def()), 
x -> n.set(x.def()));
+               pi.forEachAnnotation(FormData.class, x -> 
Utils.isNotEmpty3(x.def()), x -> n.set(x.def()));
                return n;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
index 3d018e99d..4b0fec5b6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
@@ -14,12 +14,12 @@ package org.apache.juneau.http.annotation;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
 
 import java.lang.annotation.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -89,8 +89,8 @@ public class HeaderAnnotation {
         */
        public static Value<String> findName(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(Header.class, x -> isNotEmpty3(x.value()), 
x -> n.set(x.value()));
-               pi.forEachAnnotation(Header.class, x -> isNotEmpty3(x.name()), 
x -> n.set(x.name()));
+               pi.forEachAnnotation(Header.class, x -> 
Utils.isNotEmpty3(x.value()), x -> n.set(x.value()));
+               pi.forEachAnnotation(Header.class, x -> 
Utils.isNotEmpty3(x.name()), x -> n.set(x.name()));
                return n;
        }
 
@@ -102,7 +102,7 @@ public class HeaderAnnotation {
         */
        public static Value<String> findDef(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(Header.class, x -> isNotEmpty3(x.def()), x 
-> n.set(x.def()));
+               pi.forEachAnnotation(Header.class, x -> 
Utils.isNotEmpty3(x.def()), x -> n.set(x.def()));
                return n;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
index a49813e84..ead58dc53 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
@@ -14,12 +14,12 @@ package org.apache.juneau.http.annotation;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
 
 import java.lang.annotation.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -89,8 +89,8 @@ public class PathAnnotation {
         */
        public static Value<String> findName(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(Path.class, x -> isNotEmpty3(x.value()) , 
x -> n.set(x.value()));
-               pi.forEachAnnotation(Path.class, x -> isNotEmpty3(x.name()) , x 
-> n.set(x.name()));
+               pi.forEachAnnotation(Path.class, x -> 
Utils.isNotEmpty3(x.value()) , x -> n.set(x.value()));
+               pi.forEachAnnotation(Path.class, x -> 
Utils.isNotEmpty3(x.name()) , x -> n.set(x.name()));
                return n;
        }
 
@@ -102,7 +102,7 @@ public class PathAnnotation {
         */
        public static Value<String> findDef(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(Path.class, x -> isNotEmpty3(x.def()), x 
-> n.set(x.def()));
+               pi.forEachAnnotation(Path.class, x -> 
Utils.isNotEmpty3(x.def()), x -> n.set(x.def()));
                return n;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
index 836362ee6..ab4246f21 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
@@ -14,12 +14,12 @@ package org.apache.juneau.http.annotation;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
 
 import java.lang.annotation.*;
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
@@ -86,8 +86,8 @@ public class QueryAnnotation {
         */
        public static Value<String> findName(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(Query.class, x -> isNotEmpty3(x.value()), 
x -> n.set(x.value()));
-               pi.forEachAnnotation(Query.class, x -> isNotEmpty3(x.name()), x 
-> n.set(x.name()));
+               pi.forEachAnnotation(Query.class, x -> 
Utils.isNotEmpty3(x.value()), x -> n.set(x.value()));
+               pi.forEachAnnotation(Query.class, x -> 
Utils.isNotEmpty3(x.name()), x -> n.set(x.name()));
                return n;
        }
 
@@ -99,7 +99,7 @@ public class QueryAnnotation {
         */
        public static Value<String> findDef(ParamInfo pi) {
                Value<String> n = Value.empty();
-               pi.forEachAnnotation(Query.class, x -> isNotEmpty3(x.def()), x 
-> n.set(x.def()));
+               pi.forEachAnnotation(Query.class, x -> 
Utils.isNotEmpty3(x.def()), x -> n.set(x.def()));
                return n;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
index 2d1eb9c6e..7f6375d02 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DateUtils.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.internal;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.ThrowableUtils.*;
 
 import java.lang.ref.*;
@@ -22,6 +21,7 @@ import java.util.*;
 
 import jakarta.xml.bind.*;
 
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.reflect.*;
 
 /**
@@ -67,7 +67,7 @@ public final class DateUtils {
         * @return The parsed value, or <jk>null</jk> if the string was 
<jk>null</jk> or empty.
         */
        public static Calendar parseISO8601Calendar(String s) {
-               if (isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return null;
                return DatatypeConverter.parseDateTime(toValidISO8601DT(s));
        }
@@ -218,7 +218,7 @@ public final class DateUtils {
         * @return The formatter.
         */
        public static DateTimeFormatter getFormatter(String pattern) {
-               if (isEmpty3(pattern))
+               if (Utils.isEmpty3(pattern))
                        return DateTimeFormatter.ISO_INSTANT;
                try {
                        FieldInfo fi = 
ClassInfo.of(DateTimeFormatter.class).getPublicField(x -> x.isStatic() && 
x.hasName(pattern));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileUtils.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileUtils.java
index 51951f4df..3919905bd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileUtils.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/FileUtils.java
@@ -234,7 +234,7 @@ public class FileUtils {
         * @return The file name.
         */
        public static String getFileName(String path) {
-               if (isEmpty3(path))
+               if (Utils.isEmpty3(path))
                        return null;
                path = trimTrailingSlashes(path);
                int i = path.lastIndexOf('/');
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/VersionRange.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/VersionRange.java
index 6f39d58a6..5dbbff986 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/VersionRange.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/VersionRange.java
@@ -12,9 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.internal;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
 
 /**
  * Represents an OSGi-style version range like <js>"1.2"</js> or 
<js>"[1.0,2.0)"</js>.
@@ -69,7 +68,7 @@ public class VersionRange {
         * @return <jk>true</jk> if the specified version string matches this 
version range.
         */
        public boolean matches(String v) {
-               if (isEmpty3(v))
+               if (Utils.isEmpty3(v))
                        return (minVersion == null && maxVersion == null);
                Version ver = new Version(v);
                if ((minVersion != null && ! ver.isAtLeast(minVersion, 
minExclusive)) || (maxVersion != null && ! ver.isAtMost(maxVersion, 
maxExclusive)))
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
index 6b8ec9c43..5d457d12f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
@@ -12,9 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.json;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.json.annotation.*;
 
 /**
@@ -39,7 +38,7 @@ public class JsonClassMeta extends ExtendedClassMeta {
                super(cm);
 
                Value<String> wrapperAttr = Value.empty();
-               cm.forEachAnnotation(Json.class, x -> 
isNotEmpty3(x.wrapperAttr()), x -> wrapperAttr.set(x.wrapperAttr()));
+               cm.forEachAnnotation(Json.class, x -> 
Utils.isNotEmpty3(x.wrapperAttr()), x -> wrapperAttr.set(x.wrapperAttr()));
                this.wrapperAttr = wrapperAttr.orElse(null);
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
index bc03d27ba..235fb17ed 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
@@ -15,7 +15,6 @@ package org.apache.juneau.jsonschema;
 import static org.apache.juneau.common.internal.Utils.*;
 
 import static org.apache.juneau.collections.JsonMap.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static java.util.Collections.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
index 570c4b636..a89668913 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
@@ -312,7 +312,7 @@ public class JsonSchemaGeneratorSession extends 
BeanTraverseSession {
 
                out.append(jscm.getSchema());
 
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                out.appendIfAbsentIf(ne, "type", type);
                out.appendIfAbsentIf(ne, "format", format);
 
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 f931cefa4..3af7984ca 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
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.jsonschema;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.Utils.*;
 
 import java.util.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
index e61708dc0..b732eea44 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/ObjectRest.java
@@ -13,14 +13,13 @@
 package org.apache.juneau.objecttools;
 
 import static java.net.HttpURLConnection.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.io.*;
 import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 
@@ -747,7 +746,7 @@ public final class ObjectRest {
                        url = "";
 
                // Strip off leading slash if present.
-               if (isNotEmpty3(url) && url.charAt(0) == '/')
+               if (Utils.isNotEmpty3(url) && url.charAt(0) == '/')
                        url = url.substring(1);
 
                return url;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
index c387892bd..2e00cd37e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.svl;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import org.apache.juneau.common.internal.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
index 8f7a0837a..55461080b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/MultipartVar.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.svl;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import org.apache.juneau.common.internal.*;
 
 /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
index b6c9efac2..9d4666947 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
@@ -12,9 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.svl.vars;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import org.apache.juneau.collections.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -80,7 +79,7 @@ public class ArgsVar extends DefaultingVar {
                        this.args = ARGS;
                else {
                        String s = System.getProperty("sun.java.command");
-                       if (isNotEmpty3(s)) {
+                       if (Utils.isNotEmpty3(s)) {
                                int i = s.indexOf(' ');
                                args = new Args(i == -1 ? "" : 
s.substring(i+1));
                        } else {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
index 8a4b971c9..29c9801d3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
@@ -13,8 +13,6 @@
 package org.apache.juneau.svl.vars;
 
 import static org.apache.juneau.common.internal.ArgUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.util.regex.*;
 
 import org.apache.juneau.common.internal.*;
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/XMLGregorianCalendarSwap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/XMLGregorianCalendarSwap.java
index 69017ed41..1bdf9eae4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/XMLGregorianCalendarSwap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/XMLGregorianCalendarSwap.java
@@ -12,12 +12,12 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.swaps;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.ThrowableUtils.*;
 
 import javax.xml.datatype.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.swap.*;
 
 /**
@@ -61,7 +61,7 @@ public class XMLGregorianCalendarSwap extends 
StringSwap<XMLGregorianCalendar> {
         */
        @Override /* ObjectSwap */
        public XMLGregorianCalendar unswap(BeanSession session, String s, 
ClassMeta<?> hint) throws Exception {
-               if (isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return null;
                return dtf.newXMLGregorianCalendar(s);
        }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index fe617bb36..7dd5005c7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -259,7 +259,7 @@ public class UonParserSession extends ReaderParserSession 
implements HttpPartPar
        public <T> T parse(HttpPartType partType, HttpPartSchema schema, String 
in, ClassMeta<T> toType) throws ParseException, SchemaValidationException {
                if (in == null)
                        return null;
-               if (toType.isString() && isNotEmpty3(in)) {
+               if (toType.isString() && Utils.isNotEmpty3(in)) {
                        // Shortcut - If we're returning a string and the value 
doesn't start with "'" or is "null", then
                        // just return the string since it's a plain value.
                        // This allows us to bypass the creation of a 
UonParserSession object.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
index b8844aa92..0ce533761 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
@@ -14,7 +14,6 @@ package org.apache.juneau.utils;
 
 import static java.lang.Character.*;
 import static org.apache.juneau.collections.JsonMap.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.Utils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 
@@ -198,7 +197,7 @@ public class ReflectionMap<V> {
                 * @return This object.
                 */
                public Builder<V> append(String key, V value) {
-                       if (isEmpty3(key))
+                       if (Utils.isEmpty3(key))
                                throw new BasicRuntimeException("Invalid 
reflection signature: [{0}]", key);
                        try {
                                splitNames(key, k -> {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
index d70b1c6f9..423db594c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
@@ -94,7 +94,7 @@ public class StringExpressionMatcher {
        }
 
        private Exp parse(String expression) throws ParseException {
-               if (StringUtils.isEmptyOrBlank3(expression))
+               if (Utils.isEmptyOrBlank3(expression))
                        return new Never();
 
                expression = expression.trim();
@@ -330,7 +330,7 @@ public class StringExpressionMatcher {
 
                Match(String operand) {
                        this.operand = operand;
-                       p = StringUtils.getMatchPattern3(operand);
+                       p = Utils.getMatchPattern3(operand);
                }
 
                @Override /* Exp */
diff --git 
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
 
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
index 1b0386140..313b83c49 100755
--- 
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ 
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.microservice;
 
 import static org.apache.juneau.common.internal.IOUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.Utils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
@@ -774,7 +773,7 @@ public class Microservice implements ConfigEventListener {
                        this.logger = Logger.getLogger("");
                        String logFile = Utils.firstNonNull(logConfig.logFile, 
config.get("Logging/logFile").orElse(null));
 
-                       if (isNotEmpty3(logFile)) {
+                       if (Utils.isNotEmpty3(logFile)) {
                                String logDir = 
Utils.firstNonNull(logConfig.logDir, config.get("Logging/logDir").orElse("."));
                                File logDirFile = resolveFile(logDir);
                                mkdirs(logDirFile, false);
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
index 6a3512e6e..45d8af0b4 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.httppart.HttpPartType.*;
 import static org.apache.juneau.collections.JsonMap.*;
 import static org.apache.juneau.common.internal.IOUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.Utils.*;
 import static org.apache.juneau.http.HttpEntities.*;
 import static org.apache.juneau.http.HttpHeaders.*;
@@ -1491,10 +1490,10 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
        
//------------------------------------------------------------------------------------------------------------------
 
        RestRequest headerArg(String name, Object value, HttpPartSchema schema, 
HttpPartSerializer serializer, boolean skipIfEmpty) {
-               boolean isMulti = isEmpty3(name) || "*".equals(name) || value 
instanceof HeaderList || isHeaderArray(value);
+               boolean isMulti = Utils.isEmpty3(name) || "*".equals(name) || 
value instanceof HeaderList || isHeaderArray(value);
 
                if (! isMulti) {
-                       if (! (skipIfEmpty && isEmpty3(Utils.s(value))))
+                       if (! (skipIfEmpty && Utils.isEmpty3(Utils.s(value))))
                                return header(createHeader(name, value, 
serializer, schema, skipIfEmpty));
                        return this;
                }
@@ -1519,7 +1518,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                }
 
                if (skipIfEmpty)
-                       l.removeIf(x -> isEmpty3(x.getValue()));
+                       l.removeIf(x -> Utils.isEmpty3(x.getValue()));
 
                headerData.append(l);
 
@@ -1527,10 +1526,10 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
        }
 
        RestRequest queryArg(String name, Object value, HttpPartSchema schema, 
HttpPartSerializer serializer, boolean skipIfEmpty) {
-               boolean isMulti = isEmpty3(name) || "*".equals(name) || value 
instanceof PartList || isNameValuePairArray(value);
+               boolean isMulti = Utils.isEmpty3(name) || "*".equals(name) || 
value instanceof PartList || isNameValuePairArray(value);
 
                if (! isMulti) {
-                       if (! (skipIfEmpty && isEmpty3(Utils.s(value))))
+                       if (! (skipIfEmpty && Utils.isEmpty3(Utils.s(value))))
                                return queryData(createPart(name, value, QUERY, 
serializer, schema, skipIfEmpty));
                        return this;
                }
@@ -1556,7 +1555,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                }
 
                if (skipIfEmpty)
-                       l.removeIf(x -> isEmpty3(x.getValue()));
+                       l.removeIf(x -> Utils.isEmpty3(x.getValue()));
 
                queryData.append(l);
 
@@ -1564,10 +1563,10 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
        }
 
        RestRequest formDataArg(String name, Object value, HttpPartSchema 
schema, HttpPartSerializer serializer, boolean skipIfEmpty) {
-               boolean isMulti = isEmpty3(name) || "*".equals(name) || value 
instanceof PartList || isNameValuePairArray(value);
+               boolean isMulti = Utils.isEmpty3(name) || "*".equals(name) || 
value instanceof PartList || isNameValuePairArray(value);
 
                if (! isMulti) {
-                       if (! (skipIfEmpty && isEmpty3(Utils.s(value))))
+                       if (! (skipIfEmpty && Utils.isEmpty3(Utils.s(value))))
                                return formData(createPart(name, value, 
FORMDATA, serializer, schema, skipIfEmpty));
                        return this;
                }
@@ -1593,7 +1592,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                }
 
                if (skipIfEmpty)
-                       l.removeIf(x -> isEmpty3(x.getValue()));
+                       l.removeIf(x -> Utils.isEmpty3(x.getValue()));
 
                formData.append(l);
 
@@ -1601,7 +1600,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
        }
 
        RestRequest pathArg(String name, Object value, HttpPartSchema schema, 
HttpPartSerializer serializer) {
-               boolean isMulti = isEmpty3(name) || "*".equals(name) || value 
instanceof PartList || isNameValuePairArray(value);
+               boolean isMulti = Utils.isEmpty3(name) || "*".equals(name) || 
value instanceof PartList || isNameValuePairArray(value);
 
                if (! isMulti)
                        return pathData(createPart(name, value, PATH, 
serializer, schema, false));
@@ -2506,7 +2505,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                Header h = request.getFirstHeader("Content-Type");
                if (h != null) {
                        String s = h.getValue();
-                       if (! isEmpty3(s))
+                       if (! Utils.isEmpty3(s))
                                return ContentType.of(s);
                }
                return def;
@@ -2528,7 +2527,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
         * @return A new header.
         */
        protected Header createHeader(String name, Object value, 
HttpPartSerializer serializer, HttpPartSchema schema, Boolean skipIfEmpty) {
-               if (isEmpty3(name))
+               if (Utils.isEmpty3(name))
                        return null;
                if (skipIfEmpty == null)
                        skipIfEmpty = client.isSkipEmptyHeaderData();
@@ -2553,7 +2552,7 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
         * @return A new part.
         */
        protected NameValuePair createPart(String name, Object value, 
HttpPartType type, HttpPartSerializer serializer, HttpPartSchema schema, 
Boolean skipIfEmpty) {
-               if (isEmpty3(name))
+               if (Utils.isEmpty3(name))
                        return null;
                if (skipIfEmpty == null) {
                        if (type == QUERY)
@@ -2621,12 +2620,12 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
                                value = 
((SerializedPart)x).copyWith(getPartSerializerSession(), null).getValue();
                        } else {
                                String v = x.getValue();
-                               value = (isEmpty3(v) && skipIfEmpty) ? null : v;
+                               value = (Utils.isEmpty3(v) && skipIfEmpty) ? 
null : v;
                        }
                }
 
                boolean isValid() {
-                       if (isEmpty3(name) || value == null)
+                       if (Utils.isEmpty3(name) || value == null)
                                return false;
                        return true;
                }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
index 883972559..b034088a4 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
@@ -29,6 +29,7 @@ import org.apache.http.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.assertions.*;
 import org.apache.juneau.common.internal.*;
+import org.apache.juneau.common.internal.Utils;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.httppart.bean.*;
@@ -196,7 +197,7 @@ public class RestResponse implements HttpResponse {
                String s = null;
                if (ct.isPresent())
                        s = getContentType().get().getParameter("charset");
-               return StringUtils.isEmpty3(s) ? "utf-8" : s;
+               return Utils.isEmpty3(s) ? "utf-8" : s;
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
index dfc23cac4..47f4c4bdf 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteOperationMeta.java
@@ -21,6 +21,7 @@ import java.util.*;
 import java.util.function.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.Utils;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.remote.RemoteOp;
 import org.apache.juneau.httppart.*;
@@ -98,7 +99,7 @@ public class RemoteOperationMeta {
                        path = _path.orElse("").trim();
 
                        Value<String> value = Value.empty();
-                       al.forEach(RemoteOp.class, x -> 
isNotEmpty3(x.inner().value().trim()), x -> 
value.set(x.inner().value().trim()));
+                       al.forEach(RemoteOp.class, x -> 
Utils.isNotEmpty3(x.inner().value().trim()), x -> 
value.set(x.inner().value().trim()));
 
                        if (value.isPresent()) {
                                String v = value.get();
@@ -110,13 +111,13 @@ public class RemoteOperationMeta {
                                        path = v.substring(i).trim();
                                }
                        } else {
-                               al.forEach(x -> ! x.isType(RemoteOp.class) && 
isNotEmpty3(x.getValue(String.class, "value", NOT_EMPTY).orElse("").trim()),x 
-> value.set(x.getValue(String.class, "value", NOT_EMPTY).get().trim()));
+                               al.forEach(x -> ! x.isType(RemoteOp.class) && 
Utils.isNotEmpty3(x.getValue(String.class, "value", 
NOT_EMPTY).orElse("").trim()),x -> value.set(x.getValue(String.class, "value", 
NOT_EMPTY).get().trim()));
                                if (value.isPresent())
                                        path = value.get();
                        }
 
                        if (path.isEmpty()) {
-                               path = HttpUtils.detectHttpPath(m, 
nullIfEmpty3(httpMethod));
+                               path = HttpUtils.detectHttpPath(m, 
Utils.nullIfEmpty3(httpMethod));
                        }
                        if (httpMethod.isEmpty())
                                httpMethod = HttpUtils.detectHttpMethod(m, 
true, defaultMethod);
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpParts.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpParts.java
index e7608cd23..8ec4ebaaf 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpParts.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpParts.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.net.*;
 import java.time.*;
 import java.util.*;
@@ -419,29 +418,29 @@ public class HttpParts {
 
        private static final Function<ClassMeta<?>,String> HEADER_NAME_FUNCTION 
= x -> {
                Value<String> n = Value.empty();
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.Header.class, y -> 
isNotEmpty3(y.value()), y -> n.set(y.value()));
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.Header.class, y -> 
isNotEmpty3(y.name()), y -> n.set(y.name()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.Header.class, y -> 
Utils.isNotEmpty3(y.value()), y -> n.set(y.value()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.Header.class, y -> 
Utils.isNotEmpty3(y.name()), y -> n.set(y.name()));
                return n.orElse(null);
        };
 
        private static final Function<ClassMeta<?>,String> QUERY_NAME_FUNCTION 
= x -> {
                Value<String> n = Value.empty();
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.Query.class, y -> 
isNotEmpty3(y.value()), y -> n.set(y.value()));
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.Query.class, y -> 
isNotEmpty3(y.name()), y -> n.set(y.name()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.Query.class, y -> 
Utils.isNotEmpty3(y.value()), y -> n.set(y.value()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.Query.class, y -> 
Utils.isNotEmpty3(y.name()), y -> n.set(y.name()));
                return n.orElse(null);
        };
 
        private static final Function<ClassMeta<?>,String> 
FORMDATA_NAME_FUNCTION = x -> {
                Value<String> n = Value.empty();
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.FormData.class, y -> 
isNotEmpty3(y.value()), y -> n.set(y.value()));
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.FormData.class, y -> 
isNotEmpty3(y.name()), y -> n.set(y.name()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.FormData.class, y -> 
Utils.isNotEmpty3(y.value()), y -> n.set(y.value()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.FormData.class, y -> 
Utils.isNotEmpty3(y.name()), y -> n.set(y.name()));
                return n.orElse(null);
        };
 
        private static final Function<ClassMeta<?>,String> PATH_NAME_FUNCTION = 
x -> {
                Value<String> n = Value.empty();
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.Path.class, y -> 
isNotEmpty3(y.value()), y -> n.set(y.value()));
-               
x.forEachAnnotation(org.apache.juneau.http.annotation.Path.class, y -> 
isNotEmpty3(y.name()), y -> n.set(y.name()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.Path.class, y -> 
Utils.isNotEmpty3(y.value()), y -> n.set(y.value()));
+               
x.forEachAnnotation(org.apache.juneau.http.annotation.Path.class, y -> 
Utils.isNotEmpty3(y.name()), y -> n.set(y.name()));
                return n.orElse(null);
        };
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java
index 5571da92c..5f0fdf672 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicBooleanHeader.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.util.*;
 import java.util.function.*;
 
@@ -112,7 +111,7 @@ public class BasicBooleanHeader extends BasicHeader {
         */
        public BasicBooleanHeader(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null : Boolean.valueOf(value);
+               this.value = Utils.isEmpty3(value) ? null : 
Boolean.valueOf(value);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
index fc3dc29c4..33bc7d192 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicCsvHeader.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
 import java.util.*;
 import java.util.function.*;
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
index eb2f380ac..84a905344 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicDateHeader.java
@@ -14,7 +14,6 @@ package org.apache.juneau.http.header;
 
 import static java.time.format.DateTimeFormatter.*;
 import static java.time.temporal.ChronoUnit.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.time.*;
 import java.util.*;
 import java.util.function.*;
@@ -111,7 +110,7 @@ public class BasicDateHeader extends BasicHeader {
         */
        public BasicDateHeader(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null : 
ZonedDateTime.from(RFC_1123_DATE_TIME.parse(value.toString())).truncatedTo(SECONDS);
+               this.value = Utils.isEmpty3(value) ? null : 
ZonedDateTime.from(RFC_1123_DATE_TIME.parse(value.toString())).truncatedTo(SECONDS);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
index b5c488bf9..d075d5e81 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicHeader.java
@@ -108,7 +108,7 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
         * @throws IllegalArgumentException If name is <jk>null</jk> or empty.
         */
        public BasicHeader(String name, Object value) {
-               assertArg(StringUtils.isNotEmpty3(name), "Name cannot be empty 
on header.");
+               assertArg(Utils.isNotEmpty3(name), "Name cannot be empty on 
header.");
                this.name = name;
                this.value = value instanceof Supplier ? null : value;
                this.stringValue = Utils.s(value);
@@ -128,7 +128,7 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
         * @throws IllegalArgumentException If name is <jk>null</jk> or empty.
         */
        public BasicHeader(String name, Supplier<Object> value) {
-               assertArg(StringUtils.isNotEmpty3(name), "Name cannot be empty 
on header.");
+               assertArg(Utils.isNotEmpty3(name), "Name cannot be empty on 
header.");
                this.name = name;
                this.value = null;
                this.stringValue = null;
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
index a39ae92f9..530710ee2 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/BasicUriHeader.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.net.*;
 import java.util.*;
 import java.util.function.*;
@@ -108,7 +107,7 @@ public class BasicUriHeader extends BasicHeader {
         */
        public BasicUriHeader(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null :  URI.create(value);
+               this.value = Utils.isEmpty3(value) ? null :  URI.create(value);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
index b4857455c..9fa0cabd4 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/EntityTags.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.copyOf;
 import java.util.*;
 import org.apache.juneau.annotation.*;
@@ -40,7 +39,7 @@ public class EntityTags {
         * @return A parsed header value.
         */
        public static EntityTags of(String value) {
-               return isEmpty3(value) ? EMPTY : CACHE.get(value, ()->new 
EntityTags(value));
+               return Utils.isEmpty3(value) ? EMPTY : CACHE.get(value, ()->new 
EntityTags(value));
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
index 39de5fcad..630c8a325 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/HeaderList.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.http.header;
 
 import static org.apache.juneau.common.internal.ArgUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.Utils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/SerializedHeader.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/SerializedHeader.java
index 1b588086e..87ceb875b 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/SerializedHeader.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/header/SerializedHeader.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.util.function.*;
 
 import org.apache.juneau.*;
@@ -290,7 +288,7 @@ public class SerializedHeader extends BasicHeader {
                                if ((def == null && ! schema.isRequired()) || 
(def == null && schema.isAllowEmptyValue()))
                                        return null;
                        }
-                       if (isEmpty3(Utils.s(v)) && skipIfEmpty && def == null)
+                       if (Utils.isEmpty3(Utils.s(v)) && skipIfEmpty && def == 
null)
                                return null;
                        return serializer == null ? Utils.s(v) : 
serializer.serialize(HttpPartType.HEADER, schema, v);
                } catch (SchemaValidationException e) {
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java
index bc3065a7e..d9e277754 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicBooleanPart.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.util.*;
 import java.util.function.*;
 
@@ -41,7 +40,7 @@ public class BasicBooleanPart extends BasicPart {
         * @return A new {@link BasicBooleanPart} object, or <jk>null</jk> if 
the name or value is <jk>null</jk>.
         */
        public static BasicBooleanPart of(String name, Boolean value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicBooleanPart(name, value);
        }
@@ -57,7 +56,7 @@ public class BasicBooleanPart extends BasicPart {
         * @return A new {@link BasicBooleanPart} object, or <jk>null</jk> if 
the name or supplier is <jk>null</jk>.
         */
        public static BasicBooleanPart of(String name, Supplier<Boolean> value) 
{
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicBooleanPart(name, value);
        }
@@ -105,7 +104,7 @@ public class BasicBooleanPart extends BasicPart {
         */
        public BasicBooleanPart(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null : Boolean.valueOf(value);
+               this.value = Utils.isEmpty3(value) ? null : 
Boolean.valueOf(value);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
index a08775348..953ac894a 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicCsvArrayPart.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ArrayUtils.copyOf;
 import java.util.*;
 import java.util.function.*;
@@ -44,7 +43,7 @@ public class BasicCsvArrayPart extends BasicPart {
         * @return A new {@link BasicCsvArrayPart} object, or <jk>null</jk> if 
the name or value is <jk>null</jk>.
         */
        public static BasicCsvArrayPart of(String name, String...value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicCsvArrayPart(name, value);
        }
@@ -60,7 +59,7 @@ public class BasicCsvArrayPart extends BasicPart {
         * @return A new {@link BasicCsvArrayPart} object, or <jk>null</jk> if 
the name or supplier is <jk>null</jk>.
         */
        public static BasicCsvArrayPart of(String name, Supplier<String[]> 
value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicCsvArrayPart(name, value);
        }
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicDatePart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicDatePart.java
index 4f7218a23..6c48f3687 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicDatePart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicDatePart.java
@@ -14,7 +14,6 @@ package org.apache.juneau.http.part;
 
 import static java.time.format.DateTimeFormatter.*;
 import static java.time.temporal.ChronoUnit.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.time.*;
 import java.time.format.*;
 import java.util.*;
@@ -45,7 +44,7 @@ public class BasicDatePart extends BasicPart {
         * @return A new {@link BasicDatePart} object, or <jk>null</jk> if the 
name or value is <jk>null</jk>.
         */
        public static BasicDatePart of(String name, ZonedDateTime value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicDatePart(name, value);
        }
@@ -61,7 +60,7 @@ public class BasicDatePart extends BasicPart {
         * @return A new {@link BasicDatePart} object, or <jk>null</jk> if the 
name or supplier is <jk>null</jk>.
         */
        public static BasicDatePart of(String name, Supplier<ZonedDateTime> 
value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicDatePart(name, value);
        }
@@ -109,7 +108,7 @@ public class BasicDatePart extends BasicPart {
         */
        public BasicDatePart(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null : 
ZonedDateTime.from(ISO_DATE_TIME.parse(value)).truncatedTo(SECONDS);
+               this.value = Utils.isEmpty3(value) ? null : 
ZonedDateTime.from(ISO_DATE_TIME.parse(value)).truncatedTo(SECONDS);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
index e072ef5bd..35365d8c5 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicIntegerPart.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.util.*;
 import java.util.function.*;
 
@@ -41,7 +40,7 @@ public class BasicIntegerPart extends BasicPart {
         * @return A new {@link BasicIntegerPart} object, or <jk>null</jk> if 
the name or value is <jk>null</jk>.
         */
        public static BasicIntegerPart of(String name, Integer value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicIntegerPart(name, value);
        }
@@ -57,7 +56,7 @@ public class BasicIntegerPart extends BasicPart {
         * @return A new {@link BasicIntegerPart} object, or <jk>null</jk> if 
the name or supplier is <jk>null</jk>.
         */
        public static BasicIntegerPart of(String name, Supplier<Integer> value) 
{
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicIntegerPart(name, value);
        }
@@ -105,7 +104,7 @@ public class BasicIntegerPart extends BasicPart {
         */
        public BasicIntegerPart(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null : Integer.valueOf(value);
+               this.value = Utils.isEmpty3(value) ? null : 
Integer.valueOf(value);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
index 2a19870cc..8a15cfcb4 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicLongPart.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.util.*;
 import java.util.function.*;
 
@@ -41,7 +40,7 @@ public class BasicLongPart extends BasicPart {
         * @return A new {@link BasicLongPart} object, or <jk>null</jk> if the 
name or value is <jk>null</jk>.
         */
        public static BasicLongPart of(String name, Long value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicLongPart(name, value);
        }
@@ -57,7 +56,7 @@ public class BasicLongPart extends BasicPart {
         * @return A new {@link BasicLongPart} object, or <jk>null</jk> if the 
name or supplier is <jk>null</jk>.
         */
        public static BasicLongPart of(String name, Supplier<Long> value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicLongPart(name, value);
        }
@@ -106,7 +105,7 @@ public class BasicLongPart extends BasicPart {
         */
        public BasicLongPart(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null : Long.valueOf(value);
+               this.value = Utils.isEmpty3(value) ? null : Long.valueOf(value);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicStringPart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicStringPart.java
index 05d828b8e..4cc0dcbf9 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicStringPart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicStringPart.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.util.*;
 import java.util.function.*;
 
@@ -41,7 +40,7 @@ public class BasicStringPart extends BasicPart {
         * @return A new {@link BasicStringPart} object, or <jk>null</jk> if 
the name or value is <jk>null</jk>.
         */
        public static BasicStringPart of(String name, String value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicStringPart(name, value);
        }
@@ -57,7 +56,7 @@ public class BasicStringPart extends BasicPart {
         * @return A new {@link BasicStringPart} object, or <jk>null</jk> if 
the name or supplier is <jk>null</jk>.
         */
        public static BasicStringPart of(String name, Supplier<String> value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicStringPart(name, value);
        }
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicUriPart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicUriPart.java
index 1ae890674..28588ccf9 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicUriPart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/BasicUriPart.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import java.net.*;
 import java.util.*;
 import java.util.function.*;
@@ -41,7 +40,7 @@ public class BasicUriPart extends BasicPart {
         * @return A new {@link BasicUriPart} object, or <jk>null</jk> if the 
name or value is <jk>null</jk>.
         */
        public static BasicUriPart of(String name, URI value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicUriPart(name, value);
        }
@@ -57,7 +56,7 @@ public class BasicUriPart extends BasicPart {
         * @return A new {@link BasicUriPart} object, or <jk>null</jk> if the 
name or supplier is <jk>null</jk>.
         */
        public static BasicUriPart of(String name, Supplier<URI> value) {
-               if (isEmpty3(name) || value == null)
+               if (Utils.isEmpty3(name) || value == null)
                        return null;
                return new BasicUriPart(name, value);
        }
@@ -105,7 +104,7 @@ public class BasicUriPart extends BasicPart {
         */
        public BasicUriPart(String name, String value) {
                super(name, value);
-               this.value = isEmpty3(value) ? null : URI.create(value);
+               this.value = Utils.isEmpty3(value) ? null : URI.create(value);
                this.supplier = null;
        }
 
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/SerializedPart.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/SerializedPart.java
index d30d87e72..0d628a4b6 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/SerializedPart.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/part/SerializedPart.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.part;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.util.function.*;
 
 import org.apache.http.*;
@@ -221,7 +219,7 @@ public class SerializedPart extends BasicPart {
                                if ((def == null && ! schema.isRequired()) || 
(def == null && schema.isAllowEmptyValue()))
                                        return null;
                        }
-                       if (isEmpty3(Utils.s(v)) && skipIfEmpty && def == null)
+                       if (Utils.isEmpty3(Utils.s(v)) && skipIfEmpty && def == 
null)
                                return null;
                        return serializer == null ? Utils.s(v) : 
serializer.serialize(type, schema, v);
                } catch (SchemaValidationException e) {
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java
index 7effc705e..d7e728253 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/resource/BasicResource.java
@@ -12,14 +12,13 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.resource;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.io.*;
 import java.util.function.*;
 
 import org.apache.http.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.assertions.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.http.entity.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
@@ -353,7 +352,7 @@ public class BasicResource implements HttpResource {
                        if (h != null) {
                                String n = h.getName();
                                String v = h.getValue();
-                               if (isNotEmpty3(n)) {
+                               if (Utils.isNotEmpty3(n)) {
                                        if (n.equalsIgnoreCase("content-type"))
                                                setContentType(v);
                                        else if 
(n.equalsIgnoreCase("content-encoding"))
@@ -379,7 +378,7 @@ public class BasicResource implements HttpResource {
                        if (h != null) {
                                String n = h.getName();
                                String v = h.getValue();
-                               if (isNotEmpty3(n)) {
+                               if (Utils.isNotEmpty3(n)) {
                                        if (n.equalsIgnoreCase("content-type"))
                                                setContentType(v);
                                        else if 
(n.equalsIgnoreCase("content-encoding"))
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
index 9965e8058..e9e1f4c4d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
@@ -12,9 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.arg;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
@@ -66,8 +65,8 @@ public class AttributeArg implements RestOpArg {
 
        private String getName(ParamInfo paramInfo) {
                Value<String> n = Value.empty();
-               paramInfo.forEachAnnotation(Attr.class, x -> 
isNotEmpty3(x.name()), x -> n.set(x.name()));
-               paramInfo.forEachAnnotation(Attr.class, x -> 
isNotEmpty3(x.value()), x -> n.set(x.value()));
+               paramInfo.forEachAnnotation(Attr.class, x -> 
Utils.isNotEmpty3(x.name()), x -> n.set(x.name()));
+               paramInfo.forEachAnnotation(Attr.class, x -> 
Utils.isNotEmpty3(x.value()), x -> n.set(x.value()));
                if (n.isEmpty())
                        throw new ArgException(paramInfo, "@Attr used without 
name or value");
                return n.get();
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasFormDataArg.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasFormDataArg.java
index bde2479e4..c75120fd3 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasFormDataArg.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasFormDataArg.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.common.internal.StringUtils.*;
 
 import java.lang.reflect.*;
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.*;
@@ -71,7 +72,7 @@ public class HasFormDataArg implements RestOpArg {
        }
 
        private static boolean hasName(HasFormData x) {
-               return isNotEmpty3(x.name()) || isNotEmpty3(x.value());
+               return Utils.isNotEmpty3(x.name()) || 
Utils.isNotEmpty3(x.value());
        }
 
        private static String getName(HasFormData x) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasQueryArg.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasQueryArg.java
index afb614b30..890e568b6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasQueryArg.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HasQueryArg.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.common.internal.StringUtils.*;
 import java.lang.reflect.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.*;
@@ -72,7 +73,7 @@ public class HasQueryArg implements RestOpArg {
        }
 
        private static boolean hasName(HasQuery x) {
-               return isNotEmpty3(x.name()) || isNotEmpty3(x.value());
+               return Utils.isNotEmpty3(x.name()) || 
Utils.isNotEmpty3(x.value());
        }
 
        private static String getName(HasQuery x) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
index 99b51f745..92c4024c1 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.debug;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.rest.annotation.RestOpAnnotation.*;
 
 import java.util.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
index e00e1c1d5..cc0a5572c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
@@ -95,7 +95,7 @@ public class RoleMatcher {
        }
 
        private Exp parse(String expression) throws ParseException {
-               if (StringUtils.isEmptyOrBlank3(expression))
+               if (Utils.isEmptyOrBlank3(expression))
                        return new Never();
 
                expression = expression.trim();
@@ -336,7 +336,7 @@ public class RoleMatcher {
 
                Match(String operand) {
                        this.operand = operand;
-                       p = StringUtils.getMatchPattern3(operand);
+                       p = Utils.getMatchPattern3(operand);
                }
 
                @Override /* Exp */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
index 30f02d777..c067b106a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
@@ -532,7 +532,7 @@ public class RequestContent {
 
                MediaType mt = getMediaType();
 
-               if ((isEmpty3(Utils.s(mt)) || 
mt.toString().startsWith("text/plain")) && cm.hasStringMutater())
+               if ((Utils.isEmpty3(Utils.s(mt)) || 
mt.toString().startsWith("text/plain")) && cm.hasStringMutater())
                        return cm.getStringMutater().mutate(asString());
 
                Optional<ContentType> ct = req.getHeader(ContentType.class);
@@ -545,7 +545,7 @@ public class RequestContent {
        private Encoder getEncoder() throws UnsupportedMediaType {
                if (encoder == null) {
                        String ce = 
req.getHeaderParam("content-encoding").orElse(null);
-                       if (isNotEmpty3(ce)) {
+                       if (Utils.isNotEmpty3(ce)) {
                                ce = ce.trim();
                                encoder = encoders.getEncoder(ce);
                                if (encoder == null)
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
index 2fd684343..91eece624 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
@@ -231,7 +231,7 @@ public class RequestFormParams extends 
ArrayList<RequestFormParam> {
                for (NameValuePair p : pairs) {
                        String name = p.getName();
                        Stream<RequestFormParam> l = stream(name);
-                       boolean hasAllBlanks = l.allMatch(x -> 
StringUtils.isEmpty3(x.getValue()));
+                       boolean hasAllBlanks = l.allMatch(x -> 
Utils.isEmpty3(x.getValue()));
                        if (hasAllBlanks) {
                                removeAll(getAll(name));
                                add(new RequestFormParam(req, name, 
vs.resolve(p.getValue())));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java
index cedf21fa0..5863b5abe 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java
@@ -208,7 +208,7 @@ public class RequestHeaders extends 
ArrayList<RequestHeader> {
                for (Header p : pairs) {
                        String name = p.getName();
                        Stream<RequestHeader> l = stream(name);
-                       boolean hasAllBlanks = l.allMatch(x -> 
StringUtils.isEmpty3(x.getValue()));
+                       boolean hasAllBlanks = l.allMatch(x -> 
Utils.isEmpty3(x.getValue()));
                        if (hasAllBlanks) {
                                removeAll(getAll(name));
                                add(new RequestHeader(req, name, 
vs.resolve(p.getValue())));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestPathParams.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestPathParams.java
index 3890bf3dd..8b2acafdd 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestPathParams.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestPathParams.java
@@ -204,7 +204,7 @@ public class RequestPathParams extends 
ArrayList<RequestPathParam> {
                for (NameValuePair p : pairs) {
                        String name = p.getName();
                        Stream<RequestPathParam> l = stream(name);
-                       boolean hasAllBlanks = l.allMatch(x -> 
StringUtils.isEmpty3(x.getValue()));
+                       boolean hasAllBlanks = l.allMatch(x -> 
Utils.isEmpty3(x.getValue()));
                        if (hasAllBlanks) {
                                removeAll(getAll(name));
                                add(new RequestPathParam(req, name, 
vs.resolve(p.getValue())));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java
index 6838ef656..e5e920893 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java
@@ -223,7 +223,7 @@ public class RequestQueryParams extends 
ArrayList<RequestQueryParam> {
                for (NameValuePair p : pairs) {
                        String name = p.getName();
                        Stream<RequestQueryParam> l = stream(name);
-                       boolean hasAllBlanks = l.allMatch(x -> 
StringUtils.isEmpty3(x.getValue()));
+                       boolean hasAllBlanks = l.allMatch(x -> 
Utils.isEmpty3(x.getValue()));
                        if (hasAllBlanks) {
                                removeAll(getAll(name));
                                add(new RequestQueryParam(req, name, 
vs.resolve(p.getValue())));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggingDetail.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggingDetail.java
index b55e2653a..084d32f5b 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggingDetail.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggingDetail.java
@@ -52,7 +52,7 @@ public enum CallLoggingDetail {
         * @return The resolved value.
         */
        public static CallLoggingDetail fromString(String s) {
-               if (! StringUtils.isEmpty3(s)) {
+               if (! Utils.isEmpty3(s)) {
                        try {
                                return valueOf(s.toUpperCase());
                        } catch (IllegalArgumentException  e) {}
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java
index a6fa51eba..bc666a1c3 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java
@@ -18,6 +18,7 @@ import static 
org.apache.juneau.rest.annotation.RestOpAnnotation.*;
 import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 
@@ -42,7 +43,7 @@ public class ClientVersionMatcher extends RestMatcher {
         * @param mi The version string that the client version must match.
         */
        public ClientVersionMatcher(String clientVersionHeader, MethodInfo mi) {
-               this.clientVersionHeader = isEmpty3(clientVersionHeader) ? 
"Client-Version" : clientVersionHeader;
+               this.clientVersionHeader = Utils.isEmpty3(clientVersionHeader) 
? "Client-Version" : clientVersionHeader;
                Value<String> clientVersion = Value.empty();
                mi.getAnnotationList(REST_OP_GROUP).forEachValue(String.class, 
"clientVersion", NOT_EMPTY, x -> clientVersion.set(x));
                range = new VersionRange(clientVersion.orElse(null));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
index a942548fc..d3b4e9522 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
@@ -12,12 +12,11 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.processor;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.io.*;
 
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.util.*;
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.response.*;
 
@@ -36,12 +35,12 @@ public final class PlainTextPojoProcessor implements 
ResponseProcessor {
                RestResponse res = opSession.getResponse();
                String accept = req.getHeaderParam("Accept").orElse("*/*");
 
-               if (res.getSerializerMatch().isPresent() || ! (isEmpty3(accept) 
|| accept.startsWith("text/plain") || accept.contains("*/*")))
+               if (res.getSerializerMatch().isPresent() || ! 
(Utils.isEmpty3(accept) || accept.startsWith("text/plain") || 
accept.contains("*/*")))
                        return NEXT;
 
                Object o = res.getContent(Object.class);
 
-               if (isEmpty3(res.getContentType()))
+               if (Utils.isEmpty3(res.getContentType()))
                        res.setHeader(ContentType.TEXT_PLAIN);
 
                FinishablePrintWriter w = res.getNegotiatedWriter();
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
index 620f56c92..33ab8a9d5 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
@@ -116,7 +116,7 @@ public abstract class RestServlet extends HttpServlet {
                        return context.getFullPath();
                ClassInfo ci = ClassInfo.of(getClass());
                Value<String> path = Value.empty();
-               ci.forEachAnnotation(Rest.class, x -> isNotEmpty3(x.path()), x 
-> path.set(trimSlashes(x.path())));
+               ci.forEachAnnotation(Rest.class, x -> 
Utils.isNotEmpty3(x.path()), x -> path.set(trimSlashes(x.path())));
                return path.orElse("");
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
index 9c86e9821..e1a32a0a3 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
@@ -97,7 +97,7 @@ public class BasicSwaggerProviderSession {
 
                InputStream is = ff.getStream(rci.getSimpleName() + ".json", 
locale).orElse(null);
 
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                Predicate<Collection<?>> nec = Utils::isNotEmpty2;
                Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
 
@@ -731,7 +731,7 @@ public class BasicSwaggerProviderSession {
        private JsonMap toMap(ExternalDocs a, String location, 
Object...locationArgs) {
                if (ExternalDocsAnnotation.empty(a))
                        return null;
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                JsonMap om = JsonMap.create()
                        .appendIf(ne, "description", 
resolve(joinnl(a.description())))
                        .appendIf(ne, "url", resolve(a.url()));
@@ -741,7 +741,7 @@ public class BasicSwaggerProviderSession {
        private JsonMap toMap(Contact a, String location, 
Object...locationArgs) {
                if (ContactAnnotation.empty(a))
                        return null;
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                JsonMap om = JsonMap.create()
                        .appendIf(ne, "name", resolve(a.name()))
                        .appendIf(ne, "url", resolve(a.url()))
@@ -752,7 +752,7 @@ public class BasicSwaggerProviderSession {
        private JsonMap toMap(License a, String location, 
Object...locationArgs) {
                if (LicenseAnnotation.empty(a))
                        return null;
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                JsonMap om = JsonMap.create()
                        .appendIf(ne, "name", resolve(a.name()))
                        .appendIf(ne, "url", resolve(a.url()));
@@ -761,7 +761,7 @@ public class BasicSwaggerProviderSession {
 
        private JsonMap toMap(Tag a, String location, Object...locationArgs) {
                JsonMap om = JsonMap.create();
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
                om
                        .appendIf(ne, "name", resolve(a.name()))
@@ -823,7 +823,7 @@ public class BasicSwaggerProviderSession {
                                sex = schema.getString("example", 
schema.getString("example"));
                }
 
-               if (isEmpty3(sex))
+               if (Utils.isEmpty3(sex))
                        return;
 
                Object example = null;
@@ -872,7 +872,7 @@ public class BasicSwaggerProviderSession {
 
                String s = piri.getString("example");
 
-               if (isEmpty3(s))
+               if (Utils.isEmpty3(s))
                        return;
 
                JsonMap examples = piri.getMap("examples");
@@ -931,7 +931,7 @@ public class BasicSwaggerProviderSession {
                        if (SchemaAnnotation.empty(a))
                                return om;
                        om = newMap(om);
-                       Predicate<String> ne = StringUtils::isNotEmpty3;
+                       Predicate<String> ne = Utils::isNotEmpty3;
                        Predicate<Collection<?>> nec = Utils::isNotEmpty2;
                        Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
                        Predicate<Boolean> nf = Utils::isTrue;
@@ -978,7 +978,7 @@ public class BasicSwaggerProviderSession {
                if (ExternalDocsAnnotation.empty(a))
                        return om;
                om = newMap(om);
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                return om
                        .appendIf(ne, "description", resolve(a.description()))
                        .appendIf(ne, "url", a.url())
@@ -989,7 +989,7 @@ public class BasicSwaggerProviderSession {
                if (ItemsAnnotation.empty(a))
                        return om;
                om = newMap(om);
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                Predicate<Collection<?>> nec = Utils::isNotEmpty2;
                Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
                Predicate<Boolean> nf = Utils::isTrue;
@@ -1020,7 +1020,7 @@ public class BasicSwaggerProviderSession {
                if (SubItemsAnnotation.empty(a))
                        return om;
                om = newMap(om);
-               Predicate<String> ne = StringUtils::isNotEmpty3;
+               Predicate<String> ne = Utils::isNotEmpty3;
                Predicate<Collection<?>> nec = Utils::isNotEmpty2;
                Predicate<Map<?,?>> nem = Utils::isNotEmpty2;
                Predicate<Boolean> nf = Utils::isTrue;
@@ -1067,7 +1067,7 @@ public class BasicSwaggerProviderSession {
                om = newMap(om);
                for (Header aa : a) {
                        String name = StringUtils.firstNonEmpty(aa.name(), 
aa.value());
-                       if (isEmpty3(name))
+                       if (Utils.isEmpty3(name))
                                throw new IllegalArgumentException("@Header 
used without name or value.");
                        merge(om.getMap(name, true), aa.schema());
                }
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 264babc7a..8703ee2aa 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
@@ -293,7 +293,7 @@ public final class RestUtils {
                        if (m == null)
                                m = map();
 
-                       if (qs == null || ((qs instanceof CharSequence) && 
isEmpty3(Utils.s(qs))))
+                       if (qs == null || ((qs instanceof CharSequence) && 
Utils.isEmpty3(Utils.s(qs))))
                                return m;
 
                        try (ParserPipe p = new ParserPipe(qs)) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatch.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatch.java
index 6de3ba9a7..2fc7a8a26 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatch.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatch.java
@@ -13,10 +13,9 @@
 package org.apache.juneau.rest.util;
 
 import static org.apache.juneau.collections.JsonMap.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.util.*;
 
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.internal.*;
 
 /**
@@ -75,7 +74,7 @@ public class UrlPathMatch {
         */
        public boolean hasEmptyVars() {
                for (String v : vars.values())
-                       if (isEmpty3(v))
+                       if (Utils.isEmpty3(v))
                                return true;
                return false;
        }
@@ -90,7 +89,7 @@ public class UrlPathMatch {
         */
        public String getRemainder() {
                String suffix = getSuffix();
-               if (isNotEmpty3(suffix) && suffix.charAt(0) == '/')
+               if (Utils.isNotEmpty3(suffix) && suffix.charAt(0) == '/')
                        suffix = suffix.substring(1);
                return suffix;
        }
@@ -129,7 +128,7 @@ public class UrlPathMatch {
                        if (c == -1)
                                c = path.length();
                }
-               return nullIfEmpty3(path.substring(0, c));
+               return Utils.nullIfEmpty3(path.substring(0, c));
        }
 
        @Override /* Object */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
index ece285d5d..fd03411b6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
@@ -12,8 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.vars;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
-
 import java.io.*;
 
 import org.apache.juneau.common.internal.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
index 6dbeb3b94..5cb5797f4 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/MenuItemWidget.java
@@ -13,11 +13,11 @@
 package org.apache.juneau.rest.widget;
 
 import static org.apache.juneau.common.internal.IOUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.common.internal.ThrowableUtils.*;
 
 import java.io.*;
 
+import org.apache.juneau.common.internal.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.*;
@@ -121,7 +121,7 @@ public abstract class MenuItemWidget extends Widget {
                // Need a unique number to define unique function names.
                Integer id = null;
 
-               String pre = nullIfEmpty3(getBeforeShowScript(req, res)), post 
= nullIfEmpty3(getAfterShowScript(req, res));
+               String pre = Utils.nullIfEmpty3(getBeforeShowScript(req, res)), 
post = Utils.nullIfEmpty3(getAfterShowScript(req, res));
 
                sb.append("\n<div class='menu-item'>");
                if (pre != null || post != null) {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java 
b/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java
index 124b014f2..1ed9f4de2 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/ComboInput.java
@@ -249,7 +249,7 @@ public class ComboInput<T> {
        public void verify(T o, String testName) {
                for (Function<T,String> f : verify) {
                        String s = f.apply(o);
-                       if (! StringUtils.isEmpty3(s)) {
+                       if (! Utils.isEmpty3(s)) {
                                throw new BasicAssertionError("Verification 
failed on test {0}/{1}: {2}", label, testName, s);
                        }
                }
diff --git a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java 
b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
index 40b0c3845..6b5363025 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java
@@ -14,7 +14,6 @@ package org.apache.juneau;
 
 import static java.util.Optional.*;
 import static java.util.stream.Collectors.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.io.*;
@@ -44,7 +43,7 @@ public class TestUtils extends Utils {
         * Asserts value when stringified matches the specified pattern.
         */
        public static Object assertMatches(String pattern, Object value) {
-               var m = getMatchPattern3(pattern).matcher(s(value));
+               var m = Utils.getMatchPattern3(pattern).matcher(s(value));
                if (! m.matches()) {
                        var msg = "Pattern didn't match: 
\n\tExpected:\n"+pattern+"\n\tActual:\n"+value;
                        System.err.println(msg);  // For easier debugging.
@@ -571,7 +570,7 @@ public class TestUtils extends Utils {
 
        public static void assertJsonMatches(Object o, String pattern) throws 
AssertionError {
                var json = json(o);
-               
assertTrue(StringUtils.getMatchPattern3(pattern).matcher(json).matches(), 
fs("JSON did not match pattern.\njson={0}", json));
+               
assertTrue(Utils.getMatchPattern3(pattern).matcher(json).matches(), fs("JSON 
did not match pattern.\njson={0}", json));
        }
 
        public static void assertSameObject(Object o1, Object o2) {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigMapTest.java 
b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigMapTest.java
index 67296dcc2..3e6dcc4d5 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigMapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigMapTest.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.config;
 
 import static org.apache.juneau.TestUtils.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.junit.Assert.*;
 
 import java.util.*;
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java 
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
index 5ee3b4c35..a6b6a8259 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
@@ -701,9 +701,9 @@ class StringUtilsTest extends SimpleTestBase {
        // matchPattern(String)
        
//====================================================================================================
        @Test void a29_getMatchPattern() {
-               assertTrue(getMatchPattern3("a").matcher("a").matches());
-               assertTrue(getMatchPattern3("*a*").matcher("aaa").matches());
-               assertFalse(getMatchPattern3("*b*").matcher("aaa").matches());
+               assertTrue(Utils.getMatchPattern3("a").matcher("a").matches());
+               
assertTrue(Utils.getMatchPattern3("*a*").matcher("aaa").matches());
+               
assertFalse(Utils.getMatchPattern3("*b*").matcher("aaa").matches());
        }
 
        
//====================================================================================================
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java 
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java
index 327f14ad1..b1ad820a9 100755
--- 
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.junit.Assert.*;
 
 import org.apache.juneau.*;
@@ -170,7 +169,7 @@ class StringVarResolverTest extends SimpleTestBase {
                String t;
 
                t = "$E{PATH}";
-               assertFalse(isEmpty3(VarResolver.DEFAULT.resolve(t)));
+               assertFalse(Utils.isEmpty3(VarResolver.DEFAULT.resolve(t)));
        }
 
        
//====================================================================================================


Reply via email to