Use locale insensitive case changes to ensure user code doesn't break… (#4268)

* Use locale insensitive case changes to ensure user code doesn't break in other locales (i.e. Turkey)

Signed-off-by: Michael Jameson <mjameson.se@gmail.com>
diff --git a/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyDigestAuthenticator.java b/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyDigestAuthenticator.java
index 668ed58..b47d508 100644
--- a/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyDigestAuthenticator.java
+++ b/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyDigestAuthenticator.java
@@ -22,6 +22,7 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
+import java.util.Locale;
 import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -98,7 +99,7 @@
         if (parts.length != 2) {
             return null;
         }
-        if (!parts[0].toLowerCase().equals("digest")) {
+        if (!parts[0].toLowerCase(Locale.ROOT).equals("digest")) {
             return null;
         }
 
@@ -326,7 +327,7 @@
                 return Algorithm.UNSPECIFIED;
             }
             val = val.trim();
-            if (val.contains(MD5_SESS.md) || val.contains(MD5_SESS.md.toLowerCase())) {
+            if (val.contains(MD5_SESS.md) || val.contains(MD5_SESS.md.toLowerCase(Locale.ROOT))) {
                 return MD5_SESS;
             }
             return MD5;
diff --git a/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyHttp2ResponseWriter.java b/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyHttp2ResponseWriter.java
index c08d065..059b18e 100644
--- a/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyHttp2ResponseWriter.java
+++ b/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyHttp2ResponseWriter.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
@@ -74,7 +75,7 @@
         response.status(Integer.toString(responseContext.getStatus()));
 
         for (final Map.Entry<String, List<String>> e : responseContext.getStringHeaders().entrySet()) {
-            response.add(e.getKey().toLowerCase(), e.getValue());
+            response.add(e.getKey().toLowerCase(Locale.ROOT), e.getValue());
         }
 
         response.set(HttpHeaderNames.CONTENT_LENGTH, Long.toString(contentLength));
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java b/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java
index d27c619..d887a44 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java
@@ -125,7 +125,7 @@
 
         final String method = request.getMethod();
 
-        final EntityPresence entityPresence = METHODS.get(method.toUpperCase());
+        final EntityPresence entityPresence = METHODS.get(method.toUpperCase(Locale.ROOT));
         if (entityPresence == EntityPresence.MUST_BE_NULL && request.hasEntity()) {
             if (suppressExceptions) {
                 LOGGER.warning(LocalizationMessages.ERROR_HTTP_METHOD_ENTITY_NOT_NULL(method));
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java b/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java
index bf6ac86..4382144 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java
@@ -17,6 +17,7 @@
 package org.glassfish.jersey.client.authentication;
 
 import java.util.Base64;
+import java.util.Locale;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -96,7 +97,7 @@
      */
     public boolean filterResponseAndAuthenticate(ClientRequestContext request, ClientResponseContext response) {
         final String authenticate = response.getHeaders().getFirst(HttpHeaders.WWW_AUTHENTICATE);
-        if (authenticate != null && authenticate.trim().toUpperCase().startsWith("BASIC")) {
+        if (authenticate != null && authenticate.trim().toUpperCase(Locale.ROOT).startsWith("BASIC")) {
             HttpAuthenticationFilter.Credentials credentials = HttpAuthenticationFilter
                     .getCredentials(request, defaultCredentials, HttpAuthenticationFilter.Type.BASIC);
 
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/authentication/DigestAuthenticator.java b/core-client/src/main/java/org/glassfish/jersey/client/authentication/DigestAuthenticator.java
index fd04a1d..639d64c 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/authentication/DigestAuthenticator.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/authentication/DigestAuthenticator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -24,6 +24,7 @@
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -166,7 +167,7 @@
             if (parts.length != 2) {
                 continue;
             }
-            if (!"digest".equals(parts[0].toLowerCase())) {
+            if (!"digest".equals(parts[0].toLowerCase(Locale.ROOT))) {
                 continue;
             }
 
@@ -400,7 +401,7 @@
                 return Algorithm.UNSPECIFIED;
             }
             val = val.trim();
-            if (val.contains(MD5_SESS.md) || val.contains(MD5_SESS.md.toLowerCase())) {
+            if (val.contains(MD5_SESS.md) || val.contains(MD5_SESS.md.toLowerCase(Locale.ROOT))) {
                 return MD5_SESS;
             }
             return MD5;
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/authentication/HttpAuthenticationFilter.java b/core-client/src/main/java/org/glassfish/jersey/client/authentication/HttpAuthenticationFilter.java
index 09185c4..077cb39 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/authentication/HttpAuthenticationFilter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/authentication/HttpAuthenticationFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -23,6 +23,7 @@
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.annotation.Priority;
@@ -202,7 +203,7 @@
             List<String> authStrings = response.getHeaders().get(HttpHeaders.WWW_AUTHENTICATE);
             if (authStrings != null) {
                 for (String authString : authStrings) {
-                    final String upperCaseAuth = authString.trim().toUpperCase();
+                    final String upperCaseAuth = authString.trim().toUpperCase(Locale.ROOT);
                     if (result == null && upperCaseAuth.startsWith("BASIC")) {
                         result = Type.BASIC;
                     } else if (upperCaseAuth.startsWith("DIGEST")) {
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/HttpUrlConnector.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/HttpUrlConnector.java
index 0b018d6..b84c5b3 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/HttpUrlConnector.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/HttpUrlConnector.java
@@ -29,6 +29,7 @@
 import java.security.PrivilegedExceptionAction;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
@@ -90,7 +91,7 @@
 
     static {
         for (String headerName : restrictedHeaders) {
-            restrictedHeaderSet.add(headerName.toLowerCase());
+            restrictedHeaderSet.add(headerName.toLowerCase(Locale.ROOT));
         }
     }
 
@@ -424,7 +425,7 @@
     }
 
     private boolean isHeaderRestricted(String name, String value) {
-        name = name.toLowerCase();
+        name = name.toLowerCase(Locale.ROOT);
         return name.startsWith("sec-")
                 || restrictedHeaderSet.contains(name)
                 && !("connection".equalsIgnoreCase(name) && "close".equalsIgnoreCase(value));
diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/util/PropertiesHelper.java b/core-common/src/main/java/org/glassfish/jersey/internal/util/PropertiesHelper.java
index f14743b..ee292cf 100644
--- a/core-common/src/main/java/org/glassfish/jersey/internal/util/PropertiesHelper.java
+++ b/core-common/src/main/java/org/glassfish/jersey/internal/util/PropertiesHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -20,6 +20,7 @@
 import java.lang.reflect.Method;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.logging.Level;
@@ -217,7 +218,7 @@
             String runtimeAwareKey = getPropertyNameForRuntime(key, runtimeType);
             if (key.equals(runtimeAwareKey)) {
                 // legacy behaviour
-                runtimeAwareKey = key + "." + runtimeType.name().toLowerCase();
+                runtimeAwareKey = key + "." + runtimeType.name().toLowerCase(Locale.ROOT);
             }
             value = properties.get(runtimeAwareKey);
         }
@@ -251,11 +252,11 @@
         if (runtimeType != null && key.startsWith("jersey.config")) {
             RuntimeType[] types = RuntimeType.values();
             for (RuntimeType type : types) {
-                if (key.startsWith("jersey.config." + type.name().toLowerCase())) {
+                if (key.startsWith("jersey.config." + type.name().toLowerCase(Locale.ROOT))) {
                     return key;
                 }
             }
-            return key.replace("jersey.config", "jersey.config." + runtimeType.name().toLowerCase());
+            return key.replace("jersey.config", "jersey.config." + runtimeType.name().toLowerCase(Locale.ROOT));
         }
         return key;
     }
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/CacheControlProvider.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/CacheControlProvider.java
index 8cf122c..eb31e57 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/CacheControlProvider.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/CacheControlProvider.java
@@ -19,6 +19,7 @@
 import java.text.ParseException;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -113,7 +114,7 @@
     private void readDirective(CacheControl cacheControl,
                                HttpHeaderReader reader) throws ParseException {
 
-        final String directiveName = reader.nextToken().toString().toLowerCase();
+        final String directiveName = reader.nextToken().toString().toLowerCase(Locale.ROOT);
         if ("private".equals(directiveName)) {
             cacheControl.setPrivate(true);
             readFieldNames(cacheControl.getPrivateFields(), reader);
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/CookiesParser.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/CookiesParser.java
index 74ce034..5ac1b42 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/CookiesParser.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/CookiesParser.java
@@ -19,6 +19,7 @@
 import java.text.ParseException;
 import java.util.Date;
 import java.util.LinkedHashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -133,7 +134,7 @@
             if (cookie == null) {
                 cookie = new MutableNewCookie(name, value);
             } else {
-                final String param = name.toLowerCase();
+                final String param = name.toLowerCase(Locale.ROOT);
 
                 if (param.startsWith("comment")) {
                     cookie.comment = value;
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/HttpHeaderReader.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/HttpHeaderReader.java
index 25f6962..dacd743 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/HttpHeaderReader.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/HttpHeaderReader.java
@@ -24,6 +24,7 @@
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -291,7 +292,7 @@
             }
 
             // Get the parameter name
-            String name = reader.nextToken().toString().toLowerCase();
+            String name = reader.nextToken().toString().toLowerCase(Locale.ROOT);
             reader.nextSeparator('=');
             // Get the parameter value
             String value;
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/InboundMessageContext.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/InboundMessageContext.java
index 026fd69..a8ba51c 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/InboundMessageContext.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/InboundMessageContext.java
@@ -539,7 +539,7 @@
             return Collections.emptySet();
         }
         try {
-            return new HashSet<String>(HttpHeaderReader.readStringList(allowed.toUpperCase()));
+            return new HashSet<String>(HttpHeaderReader.readStringList(allowed.toUpperCase(Locale.ROOT)));
         } catch (java.text.ParseException e) {
             throw exception(HttpHeaders.ALLOW, allowed, e);
         }
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessageBodyFactory.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessageBodyFactory.java
index 73551ca..f8d31a2 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessageBodyFactory.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessageBodyFactory.java
@@ -34,6 +34,7 @@
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -131,7 +132,7 @@
                 @Override
                 public int hash(final MediaType mt) {
                     // treat compatible types as equal
-                    return mt.getType().toLowerCase().hashCode() + mt.getSubtype().toLowerCase().hashCode();
+                    return mt.getType().toLowerCase(Locale.ROOT).hashCode() + mt.getSubtype().toLowerCase(Locale.ROOT).hashCode();
                 }
             };
     /**
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/TracingUtils.java b/core-server/src/main/java/org/glassfish/jersey/server/TracingUtils.java
index 471a733..44635a9 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/TracingUtils.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/TracingUtils.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 
 import javax.ws.rs.core.Configuration;
 import javax.ws.rs.core.HttpHeaders;
@@ -36,12 +37,12 @@
     private static final List<String> SUMMARY_HEADERS = new ArrayList<>();
 
     static {
-        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT.toLowerCase());
-        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT_ENCODING.toLowerCase());
-        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT_CHARSET.toLowerCase());
-        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT_LANGUAGE.toLowerCase());
-        SUMMARY_HEADERS.add(HttpHeaders.CONTENT_TYPE.toLowerCase());
-        SUMMARY_HEADERS.add(HttpHeaders.CONTENT_LENGTH.toLowerCase());
+        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT.toLowerCase(Locale.ROOT));
+        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT_ENCODING.toLowerCase(Locale.ROOT));
+        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT_CHARSET.toLowerCase(Locale.ROOT));
+        SUMMARY_HEADERS.add(HttpHeaders.ACCEPT_LANGUAGE.toLowerCase(Locale.ROOT));
+        SUMMARY_HEADERS.add(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.ROOT));
+        SUMMARY_HEADERS.add(HttpHeaders.CONTENT_LENGTH.toLowerCase(Locale.ROOT));
     }
 
     private static final TracingConfig DEFAULT_CONFIGURATION_TYPE = TracingConfig.OFF;
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilter.java b/core-server/src/main/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilter.java
index b4fc462..6a583ce 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilter.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/filter/HttpMethodOverrideFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,6 +17,7 @@
 package org.glassfish.jersey.server.filter;
 
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -228,7 +229,7 @@
             return null;
         }
         value = value.trim();
-        return value.length() == 0 ? null : value.toUpperCase();
+        return value.length() == 0 ? null : value.toUpperCase(Locale.ROOT);
     }
 
     @Override
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java b/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java
index 825c0c6..edabd3d 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java
@@ -25,6 +25,7 @@
 import java.security.AccessController;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 
 import org.glassfish.jersey.internal.OsgiRegistry;
@@ -133,7 +134,7 @@
 
     private void add(final UriSchemeResourceFinderFactory uriSchemeResourceFinderFactory) {
         for (final String scheme : uriSchemeResourceFinderFactory.getSchemes()) {
-            finderFactories.put(scheme.toLowerCase(), uriSchemeResourceFinderFactory);
+            finderFactories.put(scheme.toLowerCase(Locale.ROOT), uriSchemeResourceFinderFactory);
         }
     }
 
@@ -254,7 +255,7 @@
     }
 
     private void addResourceFinder(final URI u) {
-        final UriSchemeResourceFinderFactory finderFactory = finderFactories.get(u.getScheme().toLowerCase());
+        final UriSchemeResourceFinderFactory finderFactory = finderFactories.get(u.getScheme().toLowerCase(Locale.ROOT));
         if (finderFactory != null) {
             compositeResourceFinder.push(finderFactory.create(u, recursive));
         } else {
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/model/ResourceMethod.java b/core-server/src/main/java/org/glassfish/jersey/server/model/ResourceMethod.java
index a57fd26..d76a280 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/model/ResourceMethod.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/model/ResourceMethod.java
@@ -26,6 +26,7 @@
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
@@ -578,7 +579,7 @@
             this.managedAsync = managedAsync;
             this.type = JaxrsType.classify(httpMethod);
 
-            this.httpMethod = (httpMethod == null) ? httpMethod : httpMethod.toUpperCase();
+            this.httpMethod = (httpMethod == null) ? httpMethod : httpMethod.toUpperCase(Locale.ROOT);
 
             this.consumedTypes = Collections.unmodifiableList(new ArrayList<>(consumedTypes));
             this.producedTypes = Collections.unmodifiableList(new ArrayList<>(producedTypes));
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoader.java b/core-server/src/main/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoader.java
index f61bc40..ae7ea97 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoader.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/wadl/config/WadlGeneratorLoader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,6 +25,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.logging.Level;
@@ -147,7 +148,7 @@
                                         final Class<?> osgiConfigClass) throws Exception {
         Callback result = null;
 
-        final String methodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
+        final String methodName = "set" + propertyName.substring(0, 1).toUpperCase(Locale.ROOT) + propertyName.substring(1);
         final Method method = getMethodByName(methodName, generator.getClass());
         if (method.getParameterTypes().length != 1) {
             throw new RuntimeException(
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlUtils.java b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlUtils.java
index d96a885..144644d 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlUtils.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlUtils.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -18,6 +18,7 @@
 
 import java.io.InputStream;
 import java.util.List;
+import java.util.Locale;
 
 import javax.ws.rs.ProcessingException;
 import javax.ws.rs.core.UriInfo;
@@ -96,7 +97,7 @@
             }
 
             final String value = simple.get(0).trim();
-            return value.isEmpty() || value.toUpperCase().equals("TRUE");
+            return value.isEmpty() || value.toUpperCase(Locale.ROOT).equals("TRUE");
         }
         return false;
     }
diff --git a/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java b/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java
index 55d67c2..339415e 100644
--- a/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java
+++ b/ext/mvc/src/main/java/org/glassfish/jersey/server/mvc/spi/AbstractTemplateProcessor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -28,6 +28,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -96,7 +97,7 @@
         this.supportedExtensions =
                 Arrays.stream(supportedExtensions)
                       .map(input -> {
-                          input = input.toLowerCase();
+                          input = input.toLowerCase(Locale.ROOT);
                           return input.startsWith(".") ? input : "." + input;
                       })
                       .collect(Collectors.toSet());
@@ -221,7 +222,7 @@
      * @return collection of possible template paths.
      */
     private Collection<String> getTemplatePaths(final String name) {
-        final String lowerName = name.toLowerCase();
+        final String lowerName = name.toLowerCase(Locale.ROOT);
         final String templatePath = basePath.endsWith("/") ? basePath + name.substring(1) : basePath + name;
 
         // Check whether the given name ends with supported suffix.
diff --git a/media/jaxb/src/main/java/org/glassfish/jersey/jaxb/internal/NounInflector.java b/media/jaxb/src/main/java/org/glassfish/jersey/jaxb/internal/NounInflector.java
index 8a23ec9..21fab06 100644
--- a/media/jaxb/src/main/java/org/glassfish/jersey/jaxb/internal/NounInflector.java
+++ b/media/jaxb/src/main/java/org/glassfish/jersey/jaxb/internal/NounInflector.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -764,7 +765,7 @@
      */
     public void addUncountable(final String word) {
 
-        uncountables.add(0, word.toLowerCase());
+        uncountables.add(0, word.toLowerCase(Locale.ROOT));
 
     }
 
diff --git a/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/file/DefaultMediaTypePredictor.java b/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/file/DefaultMediaTypePredictor.java
index 8833ad4..56eb715 100644
--- a/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/file/DefaultMediaTypePredictor.java
+++ b/media/multipart/src/main/java/org/glassfish/jersey/media/multipart/file/DefaultMediaTypePredictor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,6 +17,7 @@
 package org.glassfish.jersey.media.multipart.file;
 
 import java.io.File;
+import java.util.Locale;
 
 import javax.ws.rs.core.MediaType;
 
@@ -139,7 +140,7 @@
             CommonMediaTypes[] types = CommonMediaTypes.values();
             if (types != null && types.length > 0) {
                 for (CommonMediaTypes type : types) {
-                    if (fileName.toLowerCase().endsWith(type.getExtension())) {
+                    if (fileName.toLowerCase(Locale.ROOT).endsWith(type.getExtension())) {
                         return type.getMediaType();
                     }
                 }
diff --git a/security/oauth1-signature/src/main/java/org/glassfish/jersey/oauth1/signature/OAuth1Signature.java b/security/oauth1-signature/src/main/java/org/glassfish/jersey/oauth1/signature/OAuth1Signature.java
index f5272f9..2df7f36 100644
--- a/security/oauth1-signature/src/main/java/org/glassfish/jersey/oauth1/signature/OAuth1Signature.java
+++ b/security/oauth1-signature/src/main/java/org/glassfish/jersey/oauth1/signature/OAuth1Signature.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -25,6 +25,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 
 import javax.inject.Inject;
 
@@ -208,7 +209,8 @@
             if (url == null) {
                 throw new OAuth1SignatureException();
             }
-            final StringBuilder builder = new StringBuilder(url.getProtocol()).append("://").append(url.getHost().toLowerCase());
+            final StringBuilder builder = new StringBuilder(url.getProtocol()).append("://")
+                    .append(url.getHost().toLowerCase(Locale.ROOT));
             final int port = url.getPort();
             if (port > 0 && port != url.getDefaultPort()) {
                 builder.append(':').append(port);
@@ -232,7 +234,7 @@
     private String baseString(final OAuth1Request request,
                               final OAuth1Parameters params) throws OAuth1SignatureException {
         // HTTP request method
-        final StringBuilder builder = new StringBuilder(request.getRequestMethod().toUpperCase());
+        final StringBuilder builder = new StringBuilder(request.getRequestMethod().toUpperCase(Locale.ROOT));
 
         // request URL, see section 3.4.1.2 http://tools.ietf.org/html/draft-hammer-oauth-10#section-3.4.1.2
         builder.append('&').append(UriComponent.encode(constructRequestURL(request).toASCIIString(),
diff --git a/security/oauth2-client/src/main/java/org/glassfish/jersey/client/oauth2/AuthCodeGrantImpl.java b/security/oauth2-client/src/main/java/org/glassfish/jersey/client/oauth2/AuthCodeGrantImpl.java
index e39c17e..f9979d3 100644
--- a/security/oauth2-client/src/main/java/org/glassfish/jersey/client/oauth2/AuthCodeGrantImpl.java
+++ b/security/oauth2-client/src/main/java/org/glassfish/jersey/client/oauth2/AuthCodeGrantImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -22,6 +22,7 @@
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
 
@@ -263,10 +264,12 @@
 
         setDefaultProperty(OAuth2Parameters.CLIENT_SECRET, clientIdentifier.getClientSecret(), accessTokenProperties,
                 refreshTokenProperties);
-        setDefaultProperty(OAuth2Parameters.GrantType.key, OAuth2Parameters.GrantType.AUTHORIZATION_CODE.name().toLowerCase(),
+        setDefaultProperty(OAuth2Parameters.GrantType.key,
+                OAuth2Parameters.GrantType.AUTHORIZATION_CODE.name().toLowerCase(Locale.ROOT),
                 accessTokenProperties);
 
-        setDefaultProperty(OAuth2Parameters.GrantType.key, OAuth2Parameters.GrantType.REFRESH_TOKEN.name().toLowerCase(),
+        setDefaultProperty(OAuth2Parameters.GrantType.key,
+                OAuth2Parameters.GrantType.REFRESH_TOKEN.name().toLowerCase(Locale.ROOT),
                 refreshTokenProperties);
     }