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

commit 11c403c3e6e04bf8d563f43af229cae3a9aafbd5
Author: James Bognar <[email protected]>
AuthorDate: Fri Jul 17 08:44:59 2026 -0400

    TODO-255: Add Locale.ROOT casing helpers and sweep parse/match sites onto 
them
    
    Adds Shorts.lcr/ucr and StringUtils.lowerCaseRoot/upperCaseRoot as
    locale-independent (Locale.ROOT) casing helpers for parse/match/normalize
    code paths, and sweeps ~22 parse/match main files (+2 test files) off
    default-locale and Locale.ENGLISH casing onto them. Includes converting the
    three REST HTTP-method sites (RestOpContext, RestSession, RestOperation) 
that
    previously used toUpperCase(Locale.ENGLISH) for consistency with the sweep.
    
    Co-authored-by: Cursor <[email protected]>
---
 .../apache/juneau/bean/swagger/OperationMap.java   | 10 ++---
 .../juneau/commons/collections/CacheMode.java      |  4 +-
 .../commons/httppart/HttpPartCollectionFormat.java |  6 ++-
 .../juneau/commons/httppart/HttpPartDataType.java  |  6 ++-
 .../juneau/commons/httppart/HttpPartFormat.java    |  6 ++-
 .../apache/juneau/commons/io/MimeTypeDetector.java |  4 +-
 .../apache/juneau/commons/settings/Settings.java   |  2 +-
 .../org/apache/juneau/commons/utils/Shorts.java    | 26 +++++++++++
 .../apache/juneau/commons/utils/StringUtils.java   | 52 +++++++++++++++++-----
 .../apache/juneau/commons/utils/Shorts_Test.java   | 12 +++++
 .../juneau/commons/utils/StringUtils_Test.java     | 26 +++++++++++
 .../juneau/rest/client/classic/RestOperation.java  |  5 ++-
 .../client/classic/remote/RemoteOperationMeta.java |  4 +-
 .../java/org/apache/juneau/http/HttpMethod.java    |  2 +-
 .../juneau/http/remote/RrpcInterfaceMeta.java      |  4 +-
 .../apache/juneau/rest/common/utils/HttpUtils.java |  8 ++--
 .../apache/juneau/rest/server/RestOpContext.java   |  2 +-
 .../apache/juneau/rest/server/RestOperations.java  |  2 +-
 .../org/apache/juneau/rest/server/RestRequest.java |  2 +-
 .../org/apache/juneau/rest/server/RestSession.java |  2 +-
 .../rest/server/httppart/RequestFormParamList.java |  2 +-
 .../rest/server/httppart/RequestHeaderList.java    |  4 +-
 .../rest/server/httppart/RequestPathParamList.java |  2 +-
 .../server/httppart/RequestQueryParamList.java     |  2 +-
 .../rest/server/logger/CallLoggingDetail.java      |  2 +-
 .../swagger/BasicSwaggerProviderSession.java       |  2 +-
 .../server/config/repository/GetConfiguration.java |  3 +-
 27 files changed, 155 insertions(+), 47 deletions(-)

diff --git 
a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
index 9f101667b6..b9ac396de9 100644
--- 
a/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
+++ 
b/juneau-bean/juneau-bean-swagger-v2/src/main/java/org/apache/juneau/bean/swagger/OperationMap.java
@@ -105,12 +105,12 @@ public class OperationMap extends 
TreeMap<String,Operation> {
                @Override
                public int compare(String o1, String o2) {
                        // Since keys are now stored in lowercase, we need to 
normalize them for comparison
-                       var s1 = methods.get(emptyIfNull(o1).toLowerCase());
-                       var s2 = methods.get(emptyIfNull(o2).toLowerCase());
+                       var s1 = methods.get(lcr(emptyIfNull(o1)));
+                       var s2 = methods.get(lcr(emptyIfNull(o2)));
                        if (s1 == null)
-                               s1 = emptyIfNull(o1).toLowerCase();
+                               s1 = lcr(emptyIfNull(o1));
                        if (s2 == null)
-                               s2 = emptyIfNull(o2).toLowerCase();
+                               s2 = lcr(emptyIfNull(o2));
                        return StringUtils.compare(s1, s2);
                }
        };
@@ -143,6 +143,6 @@ public class OperationMap extends TreeMap<String,Operation> 
{
         */
        @Override
        public Operation put(String key, Operation value) {
-               return super.put(emptyIfNull(key).toLowerCase(), value);
+               return super.put(lcr(emptyIfNull(key)), value);
        }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/CacheMode.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/CacheMode.java
index e9c099ad99..02d82c5bd8 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/CacheMode.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/collections/CacheMode.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.commons.collections;
 
+import static org.apache.juneau.commons.utils.Shorts.*;
+
 /**
  * Cache modes for {@link Cache} and related cache classes.
  *
@@ -122,7 +124,7 @@ public enum CacheMode {
        public static CacheMode parse(String value) {
                if (value == null)
                        return FULL;
-               return switch (value.toUpperCase()) {
+               return switch (ucr(value)) {
                        case CONST_NONE -> NONE;
                        case CONST_WEAK -> WEAK;
                        case CONST_FULL -> FULL;
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartCollectionFormat.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartCollectionFormat.java
index 1480293eb7..907b656f18 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartCollectionFormat.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartCollectionFormat.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.commons.httppart;
 
+import static org.apache.juneau.commons.utils.Shorts.*;
+
 /**
  * Valid values for the <c>collectionFormat</c> field.
  *
@@ -71,11 +73,11 @@ public enum HttpPartCollectionFormat {
                        return null;
                if (value.equalsIgnoreCase("UON"))
                        return UONC;
-               return valueOf(value.toUpperCase());
+               return valueOf(ucr(value));
        }
 
        @Override /* Overridden from Object */
        public String toString() {
-               return name().toLowerCase();
+               return lcr(name());
        }
 }
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartDataType.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartDataType.java
index 64860d7a38..462054ca60 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartDataType.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartDataType.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.commons.httppart;
 
+import static org.apache.juneau.commons.utils.Shorts.*;
+
 /**
  * Valid values for the <c>type</c> field.
  *
@@ -72,11 +74,11 @@ public enum HttpPartDataType {
         * @return The enum.
         */
        public static HttpPartDataType fromString(String value) {
-               return valueOf(value.toUpperCase());
+               return valueOf(ucr(value));
        }
 
        @Override /* Overridden from Object */
        public String toString() {
-               return name().toLowerCase();
+               return lcr(name());
        }
 }
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartFormat.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartFormat.java
index 487fd6df91..6567d96d1d 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartFormat.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/httppart/HttpPartFormat.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.commons.httppart;
 
+import static org.apache.juneau.commons.utils.Shorts.*;
+
 /**
  * Valid values for the <c>format</c> field.
  *
@@ -218,7 +220,7 @@ public enum HttpPartFormat {
         * @return The enum.
         */
        public static HttpPartFormat fromString(String value) {
-               value = value.toUpperCase().replace('-', '_');
+               value = ucr(value).replace('-', '_');
                return valueOf(value);
        }
 
@@ -237,6 +239,6 @@ public enum HttpPartFormat {
 
        @Override /* Overridden from Object */
        public String toString() {
-               return name().toLowerCase().replace('_', '-');
+               return lcr(name()).replace('_', '-');
        }
 }
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/MimeTypeDetector.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/MimeTypeDetector.java
index 6f8d71ef53..097ffad108 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/MimeTypeDetector.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/io/MimeTypeDetector.java
@@ -113,7 +113,7 @@ public class MimeTypeDetector {
                public Builder addExtensionType(String ext, String type) {
                        assertArgNotNullOrBlank(ARG_ext, ext);
                        assertArgNotNullOrBlank(ARG_type, type);
-                       extMap.put(ext.toLowerCase(), type);
+                       extMap.put(lcr(ext), type);
                        return this;
                }
 
@@ -371,7 +371,7 @@ public class MimeTypeDetector {
                // Fall back to extension-based detection
                var extension = getFileExtension(fileName);
                if (ine(extension)) {
-                       var mimeType = extMap.get(extension.toLowerCase());
+                       var mimeType = extMap.get(lcr(extension));
                        if (nn(mimeType)) {
                                return mimeType;
                        }
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/settings/Settings.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/settings/Settings.java
index 0dbedd78ed..70412752ac 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/settings/Settings.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/settings/Settings.java
@@ -184,7 +184,7 @@ public class Settings {
                var v = SYSTEM_PROPERTY_SOURCE.get(property);
                if (v.isPresent())
                        return v.value();  // Not testable
-               v = SYSTEM_ENV_SOURCE.get(property.replace('.', 
'_').toUpperCase());
+               v = SYSTEM_ENV_SOURCE.get(ucr(property.replace('.', '_')));
                if (v.isPresent())
                        return v.value();  // Not testable
                return oe();
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Shorts.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Shorts.java
index 2d44b0e3a1..7676957438 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Shorts.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/Shorts.java
@@ -504,6 +504,19 @@ public class Shorts {
         */
        public static String lc(String s) { return StringUtils.lowerCase(s); }
 
+       /**
+        * Converts the specified string to lower case using {@link 
Locale#ROOT} (null-safe).
+        *
+        * <p>
+        * Locale-independent — use for parse/match/normalize/key-fold code 
paths (as opposed to {@link #lc(String)},
+        * which uses the default locale and is intended for display casing).
+        *
+        * @param s The string.
+        * @return The lower-cased string, or null if null.
+        * @see StringUtils#lowerCaseRoot(String)
+        */
+       public static String lcr(String s) { return 
StringUtils.lowerCaseRoot(s); }
+
        /**
         * Converts the specified string to upper case (null-safe).
         *
@@ -513,6 +526,19 @@ public class Shorts {
         */
        public static String uc(String s) { return StringUtils.upperCase(s); }
 
+       /**
+        * Converts the specified string to upper case using {@link 
Locale#ROOT} (null-safe).
+        *
+        * <p>
+        * Locale-independent — use for parse/match/normalize/key-fold code 
paths (as opposed to {@link #uc(String)},
+        * which uses the default locale and is intended for display casing).
+        *
+        * @param s The string.
+        * @return The upper-cased string, or null if null.
+        * @see StringUtils#upperCaseRoot(String)
+        */
+       public static String ucr(String s) { return 
StringUtils.upperCaseRoot(s); }
+
        /**
         * Trims leading/trailing whitespace from the specified string 
(null-safe).
         *
diff --git 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
index 38dc58be9f..b5a48e6549 100644
--- 
a/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
+++ 
b/juneau-core/juneau-commons/src/main/java/org/apache/juneau/commons/utils/StringUtils.java
@@ -1003,7 +1003,7 @@ public class StringUtils {
        public static boolean containsIgnoreCase(String str, String search) {
                if (str == null || search == null)
                        return false;
-               return str.toLowerCase().contains(search.toLowerCase());
+               return 
str.toLowerCase(Locale.ROOT).contains(search.toLowerCase(Locale.ROOT));
        }
 
        /**
@@ -1423,7 +1423,7 @@ public class StringUtils {
        public static boolean endsWithIgnoreCase(String str, String suffix) {
                if (str == null || suffix == null)
                        return false;
-               return str.toLowerCase().endsWith(suffix.toLowerCase());
+               return 
str.toLowerCase(Locale.ROOT).endsWith(suffix.toLowerCase(Locale.ROOT));
        }
 
        /**
@@ -2555,7 +2555,7 @@ public class StringUtils {
                var unitStart = i;
                while (i < len && LETTER.contains(s.charAt(i)))
                        i++;
-               var unit = s.substring(unitStart, i).trim().toLowerCase();
+               var unit = s.substring(unitStart, 
i).trim().toLowerCase(Locale.ROOT);
 
                        // Convert to milliseconds
                        var ms = parseUnit(unit, value);
@@ -2815,7 +2815,7 @@ public class StringUtils {
        public static int indexOfIgnoreCase(String str, String search) {
                if (str == null || search == null)
                        return -1;
-               return str.toLowerCase().indexOf(search.toLowerCase());
+               return 
str.toLowerCase(Locale.ROOT).indexOf(search.toLowerCase(Locale.ROOT));
        }
 
        /**
@@ -3912,7 +3912,7 @@ public class StringUtils {
                        return false;
 
                // Remove separators and check if it's 12 hex digits
-               var cleaned = mac.replaceAll("[:-]", "").toUpperCase();
+               var cleaned = mac.replaceAll("[:-]", 
"").toUpperCase(Locale.ROOT);
                if (cleaned.length() != 12)
                        return false;
 
@@ -4292,7 +4292,7 @@ public class StringUtils {
        public static int lastIndexOfIgnoreCase(String str, String search) {
                if (str == null || search == null)
                        return -1;
-               return str.toLowerCase().lastIndexOf(search.toLowerCase());
+               return 
str.toLowerCase(Locale.ROOT).lastIndexOf(search.toLowerCase(Locale.ROOT));
        }
 
        /**
@@ -4442,6 +4442,22 @@ public class StringUtils {
                return s == null ? null : s.toLowerCase();
        }
 
+       /**
+        * Null-safe convenience method for {@link String#toLowerCase(Locale)} 
using {@link Locale#ROOT}.
+        *
+        * <p>
+        * Locale-independent lower-casing for parse/match/normalize/key-fold 
code paths (as opposed to
+        * {@link #lowerCase(String)}, which uses the default locale and is 
intended for display casing).
+        *
+        * @param s The string to convert.
+        * @return The lowercase string, or <jk>null</jk> if the input was 
<jk>null</jk>.
+        * @see #upperCaseRoot(String)
+        * @see #lowerCase(String)
+        */
+       public static String lowerCaseRoot(String s) {
+               return s == null ? null : s.toLowerCase(Locale.ROOT);
+       }
+
        /**
         * Maps each element of a string array using the specified function.
         *
@@ -4518,7 +4534,7 @@ public class StringUtils {
                if (isEmpty(str))
                        return null;
 
-               var upper = str.toUpperCase().replaceAll("[^A-Z]", "");
+               var upper = str.toUpperCase(Locale.ROOT).replaceAll("[^A-Z]", 
"");
                if (upper.isEmpty())
                        return "";
 
@@ -6442,7 +6458,7 @@ public class StringUtils {
                if (isEmpty(str))
                        return null;
 
-               var upper = str.toUpperCase();
+               var upper = str.toUpperCase(Locale.ROOT);
                var result = new StringBuilder(4);
                result.append(upper.charAt(0));
 
@@ -7059,7 +7075,7 @@ public class StringUtils {
        public static boolean startsWithIgnoreCase(String str, String prefix) {
                if (str == null || prefix == null)
                        return false;
-               return str.toLowerCase().startsWith(prefix.toLowerCase());
+               return 
str.toLowerCase(Locale.ROOT).startsWith(prefix.toLowerCase(Locale.ROOT));
        }
 
        /**
@@ -7807,6 +7823,22 @@ public class StringUtils {
                return s == null ? null : s.toUpperCase();
        }
 
+       /**
+        * Null-safe convenience method for {@link String#toUpperCase(Locale)} 
using {@link Locale#ROOT}.
+        *
+        * <p>
+        * Locale-independent upper-casing for parse/match/normalize/key-fold 
code paths (as opposed to
+        * {@link #upperCase(String)}, which uses the default locale and is 
intended for display casing).
+        *
+        * @param s The string to convert.
+        * @return The uppercase string, or <jk>null</jk> if the input was 
<jk>null</jk>.
+        * @see #lowerCaseRoot(String)
+        * @see #upperCase(String)
+        */
+       public static String upperCaseRoot(String s) {
+               return s == null ? null : s.toUpperCase(Locale.ROOT);
+       }
+
        /**
         * Decodes a <c>application/x-www-form-urlencoded</c> string using 
<c>UTF-8</c> encoding scheme.
         *
@@ -8149,7 +8181,7 @@ public class StringUtils {
         */
        private static int estimateSyllables(String word) {
 
-               var lower = word.toLowerCase();
+               var lower = word.toLowerCase(Locale.ROOT);
                var count = 0;
                var prevWasVowel = false;
 
diff --git 
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/Shorts_Test.java
 
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/Shorts_Test.java
index a27fb69eae..ecabc878b0 100644
--- 
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/Shorts_Test.java
+++ 
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/Shorts_Test.java
@@ -151,6 +151,18 @@ class Shorts_Test extends TestBase {
        @Test
        void b007_uc_upperCase() { assertEquals("ABC", uc("abc")); }
 
+       @Test
+       void b007a_lcr_lowerCaseRoot() {
+               assertEquals("abc", lcr("ABC"));
+               assertNull(lcr(null));
+       }
+
+       @Test
+       void b007b_ucr_upperCaseRoot() {
+               assertEquals("ABC", ucr("abc"));
+               assertNull(ucr(null));
+       }
+
        @Test
        void b008_tr_trim() { assertEquals("x", tr("  x  ")); }
 
diff --git 
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
 
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
index 9db2f669f2..720e120965 100755
--- 
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
+++ 
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
@@ -3688,6 +3688,19 @@ class StringUtils_Test extends TestBase {
                assertEquals("hello123", lowerCase("Hello123"));
        }
 
+       
//====================================================================================================
+       // lowerCaseRoot(String)
+       
//====================================================================================================
+       @Test
+       void a122a_lowerCaseRoot() {
+               assertNull(lowerCaseRoot(null));
+               assertEquals("", lowerCaseRoot(""));
+               assertEquals("hello", lowerCaseRoot("Hello"));
+               assertEquals("hello", lowerCaseRoot("HELLO"));
+               // Locale.ROOT keeps ASCII 'I' -> 'i' regardless of default 
locale (e.g. Turkish).
+               assertEquals("id", lowerCaseRoot("ID"));
+       }
+
        
//====================================================================================================
        // mapped(String[],Function<String,String>)
        
//====================================================================================================
@@ -6617,6 +6630,19 @@ class StringUtils_Test extends TestBase {
                assertEquals("ABC", upperCase("abc"));
        }
 
+       
//====================================================================================================
+       // upperCaseRoot(String)
+       
//====================================================================================================
+       @Test
+       void a226a_upperCaseRoot() {
+               assertNull(upperCaseRoot(null));
+               assertEquals("", upperCaseRoot(""));
+               assertEquals("HELLO", upperCaseRoot("hello"));
+               assertEquals("ABC", upperCaseRoot("abc"));
+               // Locale.ROOT keeps ASCII 'i' -> 'I' regardless of default 
locale (e.g. Turkish).
+               assertEquals("ID", upperCaseRoot("id"));
+       }
+
        
//====================================================================================================
        // urlDecode(String)
        
//====================================================================================================
diff --git 
a/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestOperation.java
 
b/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestOperation.java
index 639b6f97ff..2797950683 100644
--- 
a/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestOperation.java
+++ 
b/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/RestOperation.java
@@ -16,8 +16,9 @@
  */
 package org.apache.juneau.rest.client.classic;
 
+import static org.apache.juneau.commons.utils.Shorts.*;
+
 import java.net.*;
-import java.util.*;
 
 import org.apache.http.client.utils.*;
 import org.apache.juneau.http.*;
@@ -104,7 +105,7 @@ public class RestOperation {
         */
        public RestOperation(String method, Object url, Object body) {
                this.url = url;
-               this.method = method.toUpperCase(Locale.ENGLISH);
+               this.method = ucr(method);
                this.content = body;
                this.hasContent = HttpMethod.hasContent(method);
        }
diff --git 
a/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/remote/RemoteOperationMeta.java
 
b/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/remote/RemoteOperationMeta.java
index 5834f53353..083c5816e1 100644
--- 
a/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/remote/RemoteOperationMeta.java
+++ 
b/juneau-rest/juneau-rest-client-classic/src/main/java/org/apache/juneau/rest/client/classic/remote/RemoteOperationMeta.java
@@ -80,8 +80,8 @@ public class RemoteOperationMeta {
 
                var httpMethodValue = Holder.<String>empty();
                var pathValue = Holder.<String>empty();
-               al.stream().map(x -> 
x.getNameSimple().substring(6).toUpperCase()).filter(x -> ! 
x.equals("OP")).forEach(httpMethodValue::set);
-               al.forEach(ai -> ai.getValue(String.class, 
"method").filter(NOT_EMPTY).ifPresent(x -> 
httpMethodValue.set(x.trim().toUpperCase())));
+               al.stream().map(x -> 
ucr(x.getNameSimple().substring(6))).filter(x -> ! 
x.equals("OP")).forEach(httpMethodValue::set);
+               al.forEach(ai -> ai.getValue(String.class, 
"method").filter(NOT_EMPTY).ifPresent(x -> httpMethodValue.set(ucr(x.trim()))));
                al.forEach(ai -> ai.getValue(String.class, 
"path").filter(NOT_EMPTY).ifPresent(x -> pathValue.set(x.trim())));
                httpMethod = httpMethodValue.orElse("").trim();
                path = pathValue.orElse("").trim();
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpMethod.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpMethod.java
index dca78c5a53..0329443dd6 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpMethod.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/HttpMethod.java
@@ -84,6 +84,6 @@ public class HttpMethod {
         * @return <jk>true</jk> if specified http method has content.
         */
        public static boolean hasContent(String name) {
-               return ! 
NO_BODY_METHODS.contains(emptyIfNull(name).toUpperCase());
+               return ! NO_BODY_METHODS.contains(ucr(emptyIfNull(name)));
        }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
index 1afd6c7acf..e62dd2ae21 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
@@ -516,9 +516,9 @@ public final class RrpcInterfaceMeta {
                if (!v.isEmpty()) {
                        var i = v.indexOf(' ');
                        if (i == -1) {
-                               method = v.toUpperCase();
+                               method = ucr(v);
                        } else {
-                               method = v.substring(0, i).trim().toUpperCase();
+                               method = ucr(v.substring(0, i).trim());
                                path = v.substring(i).trim();
                        }
                }
diff --git 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/rest/common/utils/HttpUtils.java
 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/rest/common/utils/HttpUtils.java
index d2b4e91223..cf3f458001 100644
--- 
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/rest/common/utils/HttpUtils.java
+++ 
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/rest/common/utils/HttpUtils.java
@@ -16,6 +16,8 @@
  */
 package org.apache.juneau.rest.common.utils;
 
+import static org.apache.juneau.commons.utils.Shorts.*;
+
 import java.lang.reflect.*;
 
 /**
@@ -47,14 +49,14 @@ public class HttpUtils {
                String n = m.getName();
                if (detectMethod) {
                        if (n.startsWith("do") && n.length() > 2) {
-                               String n2 = n.substring(2).toUpperCase();
+                               String n2 = ucr(n.substring(2));
                                for (var t : UC_METHODS)
                                        if (n2.equals(t))
                                                return n2;
                        }
                        for (var t : LC_METHODS)
                                if (n.startsWith(t) && (n.length() == 
t.length() || Character.isUpperCase(n.charAt(t.length()))))
-                                       return t.toUpperCase();
+                                       return ucr(t);
                }
                return def;
        }
@@ -73,7 +75,7 @@ public class HttpUtils {
                String n = m.getName();
                if (method == null) {
                        if (n.startsWith("do") && n.length() > 2) {
-                               String n2 = n.substring(2).toUpperCase();
+                               String n2 = ucr(n.substring(2));
                                for (var t : UC_METHODS)
                                        if (n2.equals(t))
                                                return "/";
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOpContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOpContext.java
index 4dea5ebc51..c75e665faa 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOpContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOpContext.java
@@ -1290,7 +1290,7 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        private static String normalizeHttpMethod(String v) {
                if ("METHOD".equalsIgnoreCase(v))
                        return "*";
-               return v.toUpperCase(Locale.ENGLISH);
+               return ucr(v);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOperations.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOperations.java
index 192d52cdad..3e7b1996f9 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOperations.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestOperations.java
@@ -76,7 +76,7 @@ public class RestOperations {
                 * @return Adds a method context to this builder.
                 */
                public Builder add(String httpMethodName, RestOpContext value) {
-                       httpMethodName = httpMethodName.toUpperCase();
+                       httpMethodName = ucr(httpMethodName);
                        map.computeIfAbsent(httpMethodName, k -> new 
TreeSet<>()).add(value);
                        set.add(value);
                        return this;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestRequest.java
index eb2e488f68..e311429dca 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestRequest.java
@@ -1121,7 +1121,7 @@ public class RestRequest extends 
HttpServletRequestWrapper {
                if (! swagger2.isPresent())
                        return oe();
 
-               return 
o(swagger2.get().getOperation(opContext.getPathPattern(), 
getMethod().toLowerCase()));
+               return 
o(swagger2.get().getOperation(opContext.getPathPattern(), lcr(getMethod())));
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestSession.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestSession.java
index 8619d04e4c..67c04d2f8f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestSession.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/RestSession.java
@@ -366,7 +366,7 @@ public class RestSession extends ContextSession {
                        if (method == null)
                                method = req.getMethod();
 
-                       method = method.toUpperCase(Locale.ENGLISH);
+                       method = ucr(method);
                }
 
                return method;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestFormParamList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestFormParamList.java
index 7c2ea28376..e4b6f651c7 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestFormParamList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestFormParamList.java
@@ -466,7 +466,7 @@ public class RequestFormParamList extends 
ArrayList<RequestFormParam> {
         * Returns all the unique header names in this list.
         * @return The list of all unique header names in this list.
         */
-       public List<String> getNames() { return 
stream().map(RequestFormParam::getName).map(x -> caseSensitive ? x : 
x.toLowerCase()).distinct().toList(); }
+       public List<String> getNames() { return 
stream().map(RequestFormParam::getName).map(x -> caseSensitive ? x : 
lcr(x)).distinct().toList(); }
 
        /**
         * Returns all headers in sorted order.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestHeaderList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestHeaderList.java
index 5ef599a49e..687a7dd26f 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestHeaderList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestHeaderList.java
@@ -393,7 +393,7 @@ public class RequestHeaderList extends 
ArrayList<RequestHeader> {
         * @return The list of all unique header names in this list.
         *      <br>List is unmodifiable.
         */
-       public List<String> getNames() { return 
stream().map(RequestHeader::getName).map(x -> caseSensitive ? x : 
x.toLowerCase()).distinct().toList(); }
+       public List<String> getNames() { return 
stream().map(RequestHeader::getName).map(x -> caseSensitive ? x : 
lcr(x)).distinct().toList(); }
 
        /**
         * Returns all headers in sorted order.
@@ -521,6 +521,6 @@ public class RequestHeaderList extends 
ArrayList<RequestHeader> {
        }
 
        private String key(String name) {
-               return caseSensitive ? name : name.toLowerCase();
+               return caseSensitive ? name : lcr(name);
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestPathParamList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestPathParamList.java
index 85369b61f1..d0abf95e19 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestPathParamList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestPathParamList.java
@@ -397,7 +397,7 @@ public class RequestPathParamList extends 
ArrayList<RequestPathParam> {
         * @return The list of all unique header names in this list.
         *      <br>List is unmodifiable.
         */
-       public List<String> getNames() { return 
stream().map(RequestPathParam::getName).map(x -> caseSensitive ? x : 
x.toLowerCase()).distinct().toList(); }
+       public List<String> getNames() { return 
stream().map(RequestPathParam::getName).map(x -> caseSensitive ? x : 
lcr(x)).distinct().toList(); }
 
        /**
         * Returns the decoded remainder of the URL following any path pattern 
matches.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestQueryParamList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestQueryParamList.java
index 8815c90cd4..3d94b0e83e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestQueryParamList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/httppart/RequestQueryParamList.java
@@ -428,7 +428,7 @@ public class RequestQueryParamList extends 
ArrayList<RequestQueryParam> {
         * @return The list of all unique header names in this list.
         *      <br>List is unmodifiable.
         */
-       public List<String> getNames() { return 
stream().map(RequestQueryParam::getName).map(x -> caseSensitive ? x : 
x.toLowerCase()).distinct().toList(); }
+       public List<String> getNames() { return 
stream().map(RequestQueryParam::getName).map(x -> caseSensitive ? x : 
lcr(x)).distinct().toList(); }
 
        /**
         * Locates the position/limit query arguments ({@code &amp;p=}, {@code 
&amp;l=}) in the query string and returns them as a {@link PageArgs} object.
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/logger/CallLoggingDetail.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/logger/CallLoggingDetail.java
index c2100b7f0d..ddce9af567 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/logger/CallLoggingDetail.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/logger/CallLoggingDetail.java
@@ -51,7 +51,7 @@ public enum CallLoggingDetail {
        public static CallLoggingDetail fromString(String s) {
                if (ine(s)) {
                        try {
-                               return valueOf(s.toUpperCase());
+                               return valueOf(ucr(s));
                        } catch (@SuppressWarnings("unused") 
IllegalArgumentException e) {
                                // Invalid enum value - return null below
                        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
index 84c0f90bb1..74762187f8 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/server/swagger/BasicSwaggerProviderSession.java
@@ -379,7 +379,7 @@ public class BasicSwaggerProviderSession {
                                continue;
 
                        // Get the operation from the existing swagger so far.
-                       var op = getOperation(omSwagger, sm.getPathPattern(), 
sm.getHttpMethod().toLowerCase());
+                       var op = getOperation(omSwagger, sm.getPathPattern(), 
lcr(sm.getHttpMethod()));
 
                        op.append(parseMap(ms.value(), "@OpSwagger(value) on 
class %s method %s", c, m));
                        op.appendIf(ne, SWAGGER_operationId,
diff --git 
a/juneau-sc/juneau-sc-server/src/main/java/org/apache/juneau/server/config/repository/GetConfiguration.java
 
b/juneau-sc/juneau-sc-server/src/main/java/org/apache/juneau/server/config/repository/GetConfiguration.java
index 7d07daf8d1..0502bd6f06 100644
--- 
a/juneau-sc/juneau-sc-server/src/main/java/org/apache/juneau/server/config/repository/GetConfiguration.java
+++ 
b/juneau-sc/juneau-sc-server/src/main/java/org/apache/juneau/server/config/repository/GetConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.server.config.repository;
 
 import static org.apache.juneau.commons.utils.FileUtils.*;
+import static org.apache.juneau.commons.utils.Shorts.*;
 
 import java.io.*;
 import java.nio.file.*;
@@ -81,7 +82,7 @@ public class GetConfiguration implements Command, 
GetValue<Map<String,ConfigItem
                gitControl.branch(branch);
                gitControl.pullFromRepo();
 
-               var fileDefaultStr = APPLICATION.toLowerCase().concat(EXT);
+               var fileDefaultStr = lcr(APPLICATION).concat(EXT);
                var fileProjectStr = this.project.concat(EXT);
 
                // Resolve the config file names under the checkout root 
through the shared boundary check


Reply via email to