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 &p=}, {@code &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
