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

remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/10.1.x by this push:
     new ee246168da Missing strings mostly
ee246168da is described below

commit ee246168dacc262f5ca87718ab913b48499194e5
Author: remm <r...@apache.org>
AuthorDate: Fri Feb 16 12:19:09 2024 +0100

    Missing strings mostly
---
 java/org/apache/catalina/filters/CorsFilter.java   | 11 +------
 .../catalina/filters/LocalStrings.properties       |  1 +
 java/org/apache/catalina/servlets/CGIServlet.java  |  5 ++--
 .../catalina/servlets/LocalStrings.properties      |  2 ++
 .../apache/catalina/session/DataSourceStore.java   | 35 +++++++++++-----------
 .../catalina/session/LocalStrings.properties       |  1 +
 .../catalina/storeconfig/LocalStrings.properties   |  1 +
 .../apache/catalina/storeconfig/StoreRegistry.java |  2 +-
 .../membership/cloud/AbstractStreamProvider.java   |  7 ++---
 .../membership/cloud/CloudMembershipProvider.java  |  3 +-
 .../membership/cloud/DNSMembershipProvider.java    |  2 +-
 .../cloud/KubernetesMembershipProvider.java        |  2 +-
 .../membership/cloud/LocalStrings.properties       |  6 ++++
 .../valves/CrawlerSessionManagerValve.java         |  8 ++---
 .../valves/rewrite/LocalStrings.properties         |  5 ++++
 .../catalina/valves/rewrite/Substitution.java      | 23 +++++++-------
 .../tomcat/websocket/LocalStrings.properties       |  1 +
 17 files changed, 62 insertions(+), 53 deletions(-)

diff --git a/java/org/apache/catalina/filters/CorsFilter.java 
b/java/org/apache/catalina/filters/CorsFilter.java
index 1f063aa4c4..bdc97ddb12 100644
--- a/java/org/apache/catalina/filters/CorsFilter.java
+++ b/java/org/apache/catalina/filters/CorsFilter.java
@@ -350,16 +350,7 @@ public class CorsFilter extends GenericFilter {
         response.resetBuffer();
 
         if (log.isDebugEnabled()) {
-            // Debug so no need for i18n
-            StringBuilder message = new StringBuilder("Invalid CORS request; 
Origin=");
-            message.append(origin);
-            message.append(";Method=");
-            message.append(method);
-            if (accessControlRequestHeaders != null) {
-                message.append(";Access-Control-Request-Headers=");
-                message.append(accessControlRequestHeaders);
-            }
-            log.debug(message.toString());
+            sm.getString("corsFilter.invalidRequest", origin, method, 
accessControlRequestHeaders);
         }
     }
 
diff --git a/java/org/apache/catalina/filters/LocalStrings.properties 
b/java/org/apache/catalina/filters/LocalStrings.properties
index be56650ae2..aab53ede4f 100644
--- a/java/org/apache/catalina/filters/LocalStrings.properties
+++ b/java/org/apache/catalina/filters/LocalStrings.properties
@@ -16,6 +16,7 @@
 addDefaultCharset.unsupportedCharset=Specified character set [{0}] is not 
supported
 
 corsFilter.invalidPreflightMaxAge=Unable to parse preflightMaxAge
+corsFilter.invalidRequest=Invalid CORS request; Origin [{0}] Method [{1}] 
Access-Control-Request-Headers [{2}]
 corsFilter.invalidSupportsCredentials=It is not allowed to configure 
supportsCredentials=[true] when allowedOrigins=[*]
 corsFilter.nullRequest=HttpServletRequest object is null
 corsFilter.nullRequestType=CORSRequestType object is null
diff --git a/java/org/apache/catalina/servlets/CGIServlet.java 
b/java/org/apache/catalina/servlets/CGIServlet.java
index 30b2097b36..7458b5aab2 100644
--- a/java/org/apache/catalina/servlets/CGIServlet.java
+++ b/java/org/apache/catalina/servlets/CGIServlet.java
@@ -1433,7 +1433,7 @@ public final class CGIServlet extends HttpServlet {
              */
 
             if (!isReady()) {
-                throw new IOException(this.getClass().getName() + ": not ready 
to run.");
+                throw new IOException(sm.getString("cgiServlet.notReady"));
             }
 
             if (log.isTraceEnabled()) {
@@ -1442,8 +1442,7 @@ public final class CGIServlet extends HttpServlet {
 
             if ((command.contains(File.separator + "." + File.separator)) ||
                     (command.contains(File.separator + "..")) || 
(command.contains(".." + File.separator))) {
-                throw new IOException(this.getClass().getName() + "Illegal 
Character in CGI command path " +
-                        "('.' or '..') detected.  Not running CGI [" + command 
+ "].");
+                throw new 
IOException(sm.getString("cgiServlet.invalidCommand", command));
             }
 
             /*
diff --git a/java/org/apache/catalina/servlets/LocalStrings.properties 
b/java/org/apache/catalina/servlets/LocalStrings.properties
index 1ce4990490..38807654a3 100644
--- a/java/org/apache/catalina/servlets/LocalStrings.properties
+++ b/java/org/apache/catalina/servlets/LocalStrings.properties
@@ -25,6 +25,8 @@ cgiServlet.find.location=Looking for a file at [{0}]
 cgiServlet.find.path=CGI script requested at path [{0}] relative to CGI 
location [{1}]
 cgiServlet.invalidArgumentDecoded=The decoded command line argument [{0}] did 
not match the configured cmdLineArgumentsDecoded pattern [{1}]
 cgiServlet.invalidArgumentEncoded=The encoded command line argument [{0}] did 
not match the configured cmdLineArgumentsEncoded pattern [{1}]
+cgiServlet.invalidCommand=Illegal Character in CGI command path ('.' or '..') 
detected, not running CGI [{0}]
+cgiServlet.notReady=CGI Servlet is not ready to run
 cgiServlet.runBadHeader=Bad header line [{0}]
 cgiServlet.runFail=I/O problems processing CGI
 cgiServlet.runHeaderReaderFail=I/O problems closing header reader
diff --git a/java/org/apache/catalina/session/DataSourceStore.java 
b/java/org/apache/catalina/session/DataSourceStore.java
index 77f282ff62..b6c489aec6 100644
--- a/java/org/apache/catalina/session/DataSourceStore.java
+++ b/java/org/apache/catalina/session/DataSourceStore.java
@@ -366,7 +366,7 @@ public class DataSourceStore extends StoreBase {
                     }
                 }
             } catch (SQLException e) {
-                
manager.getContext().getLogger().error(sm.getString(getStoreName() + 
".SQLException", e));
+                
manager.getContext().getLogger().error(sm.getString("dataSourceStore.SQLException",
 e));
                 keys = new String[0];
                 // Close the connection so that it gets reopened next time
             } finally {
@@ -408,7 +408,7 @@ public class DataSourceStore extends StoreBase {
                     numberOfTries = 0;
                 }
             } catch (SQLException e) {
-                
manager.getContext().getLogger().error(sm.getString(getStoreName() + 
".SQLException", e));
+                
manager.getContext().getLogger().error(sm.getString("dataSourceStore.SQLException",
 e));
             } finally {
                 release(_conn);
             }
@@ -452,7 +452,7 @@ public class DataSourceStore extends StoreBase {
                     if (rst.next()) {
                         try (ObjectInputStream ois = 
getObjectInputStream(rst.getBinaryStream(2))) {
                             if (contextLog.isTraceEnabled()) {
-                                contextLog.trace(sm.getString(getStoreName() + 
".loading", id, sessionTable));
+                                
contextLog.trace(sm.getString("dataSourceStore.loading", id, sessionTable));
                             }
 
                             _session = (StandardSession) 
manager.createEmptySession();
@@ -460,13 +460,13 @@ public class DataSourceStore extends StoreBase {
                             _session.setManager(manager);
                         }
                     } else if (context.getLogger().isDebugEnabled()) {
-                        contextLog.debug(getStoreName() + ": No persisted data 
object found");
+                        
contextLog.debug(sm.getString("dataSourceStore.noObject", id));
                     }
                     // Break out after the finally block
                     numberOfTries = 0;
                 }
             } catch (SQLException e) {
-                contextLog.error(sm.getString(getStoreName() + 
".SQLException", e));
+                contextLog.error(sm.getString("dataSourceStore.SQLException", 
e));
             } finally {
                 context.unbind(Globals.IS_SECURITY_ENABLED, 
oldThreadContextCL);
                 release(_conn);
@@ -500,7 +500,7 @@ public class DataSourceStore extends StoreBase {
                 // Break out after the finally block
                 numberOfTries = 0;
             } catch (SQLException e) {
-                
manager.getContext().getLogger().error(sm.getString(getStoreName() + 
".SQLException", e));
+                
manager.getContext().getLogger().error(sm.getString("dataSourceStore.SQLException",
 e));
             } finally {
                 release(_conn);
             }
@@ -508,7 +508,7 @@ public class DataSourceStore extends StoreBase {
         }
 
         if (manager.getContext().getLogger().isTraceEnabled()) {
-            manager.getContext().getLogger().trace(sm.getString(getStoreName() 
+ ".removing", id, sessionTable));
+            
manager.getContext().getLogger().trace(sm.getString("dataSourceStore.removing", 
id, sessionTable));
         }
     }
 
@@ -553,7 +553,7 @@ public class DataSourceStore extends StoreBase {
                 // Break out after the finally block
                 numberOfTries = 0;
             } catch (SQLException e) {
-                
manager.getContext().getLogger().error(sm.getString(getStoreName() + 
".SQLException", e));
+                
manager.getContext().getLogger().error(sm.getString("dataSourceStore.SQLException",
 e));
             } finally {
                 release(_conn);
             }
@@ -609,7 +609,7 @@ public class DataSourceStore extends StoreBase {
                         numberOfTries = 0;
                     }
                 } catch (SQLException e) {
-                    
manager.getContext().getLogger().error(sm.getString(getStoreName() + 
".SQLException", e));
+                    
manager.getContext().getLogger().error(sm.getString("dataSourceStore.SQLException",
 e));
                 } catch (IOException e) {
                     // Ignore
                 } finally {
@@ -621,7 +621,7 @@ public class DataSourceStore extends StoreBase {
 
         if (manager.getContext().getLogger().isTraceEnabled()) {
             manager.getContext().getLogger()
-                    .trace(sm.getString(getStoreName() + ".saving", 
session.getIdInternal(), sessionTable));
+                    .trace(sm.getString("dataSourceStore.saving", 
session.getIdInternal(), sessionTable));
         }
     }
 
@@ -639,16 +639,16 @@ public class DataSourceStore extends StoreBase {
         try {
             conn = open();
             if (conn == null || conn.isClosed()) {
-                
manager.getContext().getLogger().info(sm.getString(getStoreName() + 
".checkConnectionDBClosed"));
+                
manager.getContext().getLogger().info(sm.getString("dataSourceStore.checkConnectionDBClosed"));
                 conn = open();
                 if (conn == null || conn.isClosed()) {
                     manager.getContext().getLogger()
-                            .info(sm.getString(getStoreName() + 
".checkConnectionDBReOpenFail"));
+                            
.info(sm.getString("dataSourceStore.checkConnectionDBReOpenFail"));
                 }
             }
         } catch (SQLException ex) {
             manager.getContext().getLogger()
-                    .error(sm.getString(getStoreName() + 
".checkConnectionSQLException", ex.toString()));
+                    
.error(sm.getString("dataSourceStore.checkConnectionSQLException", ex));
         }
 
         return conn;
@@ -675,7 +675,7 @@ public class DataSourceStore extends StoreBase {
                 Context envCtx = (Context) initCtx.lookup("java:comp/env");
                 this.dataSource = (DataSource) 
envCtx.lookup(this.dataSourceName);
             } catch (NamingException e) {
-                context.getLogger().error(sm.getString(getStoreName() + 
".wrongDataSource", this.dataSourceName), e);
+                
context.getLogger().error(sm.getString("dataSourceStore.wrongDataSource", 
this.dataSourceName), e);
             } finally {
                 if (getLocalDataSource()) {
                     context.unbind(Globals.IS_SECURITY_ENABLED, 
oldThreadContextCL);
@@ -686,7 +686,7 @@ public class DataSourceStore extends StoreBase {
         if (dataSource != null) {
             return dataSource.getConnection();
         } else {
-            throw new IllegalStateException(sm.getString(getStoreName() + 
".missingDataSource"));
+            throw new 
IllegalStateException(sm.getString("dataSourceStore.missingDataSource"));
         }
     }
 
@@ -708,15 +708,14 @@ public class DataSourceStore extends StoreBase {
                 dbConnection.commit();
             }
         } catch (SQLException e) {
-            manager.getContext().getLogger().error(sm.getString(getStoreName() 
+ ".commitSQLException"), e);
+            
manager.getContext().getLogger().error(sm.getString("dataSourceStore.commitSQLException"),
 e);
         }
 
         // Close this database connection, and log any errors
         try {
             dbConnection.close();
         } catch (SQLException e) {
-            manager.getContext().getLogger().error(sm.getString(getStoreName() 
+ ".close", e.toString())); // Just log
-                                                                               
                            // it here
+            
manager.getContext().getLogger().error(sm.getString("dataSourceStore.close", 
e));
         }
     }
 
diff --git a/java/org/apache/catalina/session/LocalStrings.properties 
b/java/org/apache/catalina/session/LocalStrings.properties
index 40896868fc..b5f654f228 100644
--- a/java/org/apache/catalina/session/LocalStrings.properties
+++ b/java/org/apache/catalina/session/LocalStrings.properties
@@ -22,6 +22,7 @@ dataSourceStore.commitSQLException=SQLException committing 
connection before clo
 dataSourceStore.loading=Loading Session [{0}] from database [{1}]
 dataSourceStore.missingDataSource=No data source available
 dataSourceStore.missingDataSourceName=No valid JNDI name was given
+dataSourceStore.noObject=No persisted data object found for session [{0}]
 dataSourceStore.removing=Removing Session [{0}] at database [{1}]
 dataSourceStore.saving=Saving Session [{0}] to database [{1}]
 dataSourceStore.wrongDataSource=Cannot open JNDI DataSource [{0}]
diff --git a/java/org/apache/catalina/storeconfig/LocalStrings.properties 
b/java/org/apache/catalina/storeconfig/LocalStrings.properties
index 4067b860b8..2facbe157c 100644
--- a/java/org/apache/catalina/storeconfig/LocalStrings.properties
+++ b/java/org/apache/catalina/storeconfig/LocalStrings.properties
@@ -26,6 +26,7 @@ globalNamingResourcesSF.noFactory=Cannot find NamingResources 
store factory
 globalNamingResourcesSF.wrongElement=Wrong element [{0}]
 
 registry.loadClassFailed=Failed to load class [{0}]
+registry.noDescriptor=Can't find descriptor for key [{0}]
 
 standardContextSF.cannotWriteFile=Cannot write file at [{0}]
 standardContextSF.canonicalPathError=Failed to obtain the canonical path of 
the configuration file [{0}]
diff --git a/java/org/apache/catalina/storeconfig/StoreRegistry.java 
b/java/org/apache/catalina/storeconfig/StoreRegistry.java
index a4dea64261..4865171d14 100644
--- a/java/org/apache/catalina/storeconfig/StoreRegistry.java
+++ b/java/org/apache/catalina/storeconfig/StoreRegistry.java
@@ -132,7 +132,7 @@ public class StoreRegistry {
                 log.trace("find descriptor " + id + "#" + desc.getTag() + "#"
                         + desc.getStoreFactoryClass());
             } else {
-                log.debug(("Can't find descriptor for key " + id));
+                log.debug(sm.getString("registry.noDescriptor", id));
             }
         }
         return desc;
diff --git 
a/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java 
b/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java
index 2c283890a7..68785e3243 100644
--- 
a/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java
+++ 
b/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java
@@ -75,7 +75,7 @@ public abstract class AbstractStreamProvider implements 
StreamProvider {
      */
     public URLConnection openConnection(String url, Map<String, String> 
headers, int connectTimeout, int readTimeout) throws IOException {
         if (log.isDebugEnabled()) {
-            log.debug(String.format("%s opening connection: url [%s], headers 
[%s], connectTimeout [%s], readTimeout [%s]",
+            log.debug(sm.getString("abstractStream.connection",
                     getClass().getSimpleName(), url, headers, 
Integer.toString(connectTimeout), Integer.toString(readTimeout)));
         }
         URLConnection connection;
@@ -91,9 +91,8 @@ public abstract class AbstractStreamProvider implements 
StreamProvider {
             }
         }
         if (connectTimeout < 0 || readTimeout < 0) {
-            throw new IllegalArgumentException(
-                String.format("Neither connectTimeout [%s] nor readTimeout 
[%s] can be less than 0 for URLConnection.",
-                        Integer.toString(connectTimeout), 
Integer.toString(readTimeout)));
+            throw new 
IllegalArgumentException(sm.getString("abstractStream.invalidTimeout",
+                    Integer.toString(connectTimeout), 
Integer.toString(readTimeout)));
         }
         connection.setConnectTimeout(connectTimeout);
         connection.setReadTimeout(readTimeout);
diff --git 
a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java 
b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
index 67300cc454..fe5e193583 100644
--- 
a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
+++ 
b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
@@ -152,7 +152,8 @@ public abstract class CloudMembershipProvider extends 
MembershipProviderBase imp
             return;
         }
         if (log.isDebugEnabled()) {
-            String message = add ? "Member added: " + member : "Member 
disappeared: " + member;
+            String message = add ? sm.getString("cloudMembershipProvider.add", 
member)
+                    : sm.getString("cloudMembershipProvider.remove", member);
             log.debug(message);
         }
         Runnable r = () -> {
diff --git 
a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java 
b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
index f5a6874496..9822487cb1 100644
--- 
a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
+++ 
b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
@@ -106,7 +106,7 @@ public class DNSMembershipProvider extends 
CloudMembershipProvider {
         }
 
         if (log.isDebugEnabled()) {
-            log.debug(String.format("Namespace [%s] set; clustering enabled", 
dnsServiceName));
+            log.debug(sm.getString("cloudMembershipProvider.start", 
dnsServiceName));
         }
         dnsServiceName = URLEncoder.encode(dnsServiceName, "UTF-8");
 
diff --git 
a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
 
b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
index 98dd6eccd8..6f0f4f244e 100644
--- 
a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
+++ 
b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
@@ -57,7 +57,7 @@ public class KubernetesMembershipProvider extends 
CloudMembershipProvider {
         String namespace = getNamespace();
 
         if (log.isDebugEnabled()) {
-            log.debug(String.format("Namespace [%s] set; clustering enabled", 
namespace));
+            log.debug(sm.getString("cloudMembershipProvider.start", 
namespace));
         }
 
         String protocol = getEnv(CUSTOM_ENV_PREFIX + "MASTER_PROTOCOL", 
"KUBERNETES_MASTER_PROTOCOL");
diff --git 
a/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties 
b/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
index 33816e5b2f..77bc9bbdcc 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
@@ -14,11 +14,17 @@
 # limitations under the License.
 
 abstractStream.CACertUndefined=CA cert file undefined
+abstractStream.connection=[{0}] opening connection: url [{1}], headers [{2}], 
connectTimeout [{3}], readTimeout [{4}]
 abstractStream.fileNotFound=CA cert file [{0}] not found
+abstractStream.invalidTimeout=Neither connectTimeout [{0}] nor readTimeout 
[{1}] can be less than 0 for URLConnection
 abstractStream.trustManagerError=Could not create trust manager for [{0}]
 
 certificateStream.clientCertError=Could not create key manager for [{0}] 
([{1}])
 
+cloudMembershipProvider.add=Member [{0}] added
+cloudMembershipProvider.remove=Member [{0}] disappeared
+cloudMembershipProvider.start=Namespace [{0}] set; clustering enabled
+
 cloudMembershipService.stopFail=Unable to stop the cloud membership service, 
level: [{0}]
 
 dnsMembershipProvider.dnsError=Error getting hosts address list for namespace 
[{0}]
diff --git a/java/org/apache/catalina/valves/CrawlerSessionManagerValve.java 
b/java/org/apache/catalina/valves/CrawlerSessionManagerValve.java
index 18cd9a26b4..21f032847f 100644
--- a/java/org/apache/catalina/valves/CrawlerSessionManagerValve.java
+++ b/java/org/apache/catalina/valves/CrawlerSessionManagerValve.java
@@ -245,13 +245,13 @@ public class CrawlerSessionManagerValve extends ValveBase 
{
                             new 
CrawlerHttpSessionBindingListener(clientIdSessionId, clientIdentifier));
                     s.setMaxInactiveInterval(sessionInactiveInterval);
 
-                    if (log.isDebugEnabled()) {
-                        log.debug(request.hashCode() + ": New bot session. 
SessionID=" + s.getId());
+                    if (log.isTraceEnabled()) {
+                        log.trace(request.hashCode() + ": New bot session. 
SessionID=" + s.getId());
                     }
                 }
             } else {
-                if (log.isDebugEnabled()) {
-                    log.debug(request.hashCode() + ": Bot session accessed. 
SessionID=" + sessionId);
+                if (log.isTraceEnabled()) {
+                    log.trace(request.hashCode() + ": Bot session accessed. 
SessionID=" + sessionId);
                 }
             }
         }
diff --git a/java/org/apache/catalina/valves/rewrite/LocalStrings.properties 
b/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
index db07290ebb..ffb6009f6d 100644
--- a/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
+++ b/java/org/apache/catalina/valves/rewrite/LocalStrings.properties
@@ -26,3 +26,8 @@ rewriteValve.invalidMapClassName=Invalid map class name [{0}]
 rewriteValve.noConfiguration=No configuration resource found [{0}]
 rewriteValve.readConfiguration=Read configuration from [/WEB-INF/{0}]
 rewriteValve.readError=Error reading configuration
+
+substitution.badType=Bad type [{0}] in substitution [{1}]
+substitution.invalid=Invalid substitution [{0}]
+substitution.missingDigit=Substitution [{0}] is missing digit or curly brace
+substitution.noMap=Map [{0}] not found in substitution [{1}]
diff --git a/java/org/apache/catalina/valves/rewrite/Substitution.java 
b/java/org/apache/catalina/valves/rewrite/Substitution.java
index 1e70de2fcd..b7e39158e6 100644
--- a/java/org/apache/catalina/valves/rewrite/Substitution.java
+++ b/java/org/apache/catalina/valves/rewrite/Substitution.java
@@ -22,9 +22,12 @@ import java.util.Map;
 import java.util.regex.Matcher;
 
 import org.apache.catalina.util.URLEncoder;
+import org.apache.tomcat.util.res.StringManager;
 
 public class Substitution {
 
+    protected static final StringManager sm = 
StringManager.getManager(Substitution.class);
+
     public abstract static class SubstitutionElement {
         public abstract String evaluate(Matcher rule, Matcher cond, Resolver 
resolver);
     }
@@ -148,7 +151,7 @@ public class Substitution {
                 elements.add(newElement);
             } else if (isFirstPos(backslashPos, dollarPos, percentPos)) {
                 if (backslashPos + 1 == sub.length()) {
-                    throw new IllegalArgumentException(sub);
+                    throw new 
IllegalArgumentException(sm.getString("substitution.invalid", sub));
                 }
                 StaticElement newElement = new StaticElement();
                 newElement.value = sub.substring(pos, backslashPos) + 
sub.substring(backslashPos + 1, backslashPos + 2);
@@ -157,7 +160,7 @@ public class Substitution {
             } else if (isFirstPos(dollarPos, percentPos)) {
                 // $: back reference to rule or map lookup
                 if (dollarPos + 1 == sub.length()) {
-                    throw new IllegalArgumentException(sub);
+                    throw new 
IllegalArgumentException(sm.getString("substitution.invalid", sub));
                 }
                 if (pos < dollarPos) {
                     // Static text
@@ -179,17 +182,17 @@ public class Substitution {
                     int def = findMatchingColonOrBar(false, sub, open);
                     int close = findMatchingBrace(sub, open);
                     if (!(-1 < open && open < colon && colon < close)) {
-                        throw new IllegalArgumentException(sub);
+                        throw new 
IllegalArgumentException(sm.getString("substitution.invalid", sub));
                     }
                     newElement.map = maps.get(sub.substring(open + 1, colon));
                     if (newElement.map == null) {
-                        throw new IllegalArgumentException(sub + ": No map: " 
+ sub.substring(open + 1, colon));
+                        throw new 
IllegalArgumentException(sm.getString("substitution.noMap", sub.substring(open 
+ 1, colon), sub));
                     }
                     String key = null;
                     String defaultValue = null;
                     if (def > -1) {
                         if (!(colon < def && def < close)) {
-                            throw new IllegalArgumentException(sub);
+                            throw new 
IllegalArgumentException(sm.getString("substitution.invalid", sub));
                         }
                         key = sub.substring(colon + 1, def);
                         defaultValue = sub.substring(def + 1, close);
@@ -203,12 +206,12 @@ public class Substitution {
                     pos = close + 1;
                     elements.add(newElement);
                 } else {
-                    throw new IllegalArgumentException(sub + ": missing digit 
or curly brace.");
+                    throw new 
IllegalArgumentException(sm.getString("substitution.missingDigit", sub));
                 }
             } else {
                 // %: back reference to condition or server variable
                 if (percentPos + 1 == sub.length()) {
-                    throw new IllegalArgumentException(sub);
+                    throw new 
IllegalArgumentException(sm.getString("substitution.invalid", sub));
                 }
                 if (pos < percentPos) {
                     // Static text
@@ -229,7 +232,7 @@ public class Substitution {
                     int colon = findMatchingColonOrBar(true, sub, open);
                     int close = findMatchingBrace(sub, open);
                     if (!(-1 < open && open < close)) {
-                        throw new IllegalArgumentException(sub);
+                        throw new 
IllegalArgumentException(sm.getString("substitution.invalid", sub));
                     }
                     if (colon > -1 && open < colon && colon < close) {
                         String type = sub.substring(open + 1, colon);
@@ -243,7 +246,7 @@ public class Substitution {
                             newElement = new ServerVariableHttpElement();
                             ((ServerVariableHttpElement) newElement).key = 
sub.substring(colon + 1, close);
                         } else {
-                            throw new IllegalArgumentException(sub + ": Bad 
type: " + type);
+                            throw new 
IllegalArgumentException(sm.getString("substitution.badType", type, sub));
                         }
                     } else {
                         newElement = new ServerVariableElement();
@@ -252,7 +255,7 @@ public class Substitution {
                     pos = close + 1;
                     elements.add(newElement);
                 } else {
-                    throw new IllegalArgumentException(sub + ": missing digit 
or curly brace.");
+                    throw new 
IllegalArgumentException(sm.getString("substitution.missingDigit", sub));
                 }
             }
         }
diff --git a/java/org/apache/tomcat/websocket/LocalStrings.properties 
b/java/org/apache/tomcat/websocket/LocalStrings.properties
index a24e32610d..79b8472007 100644
--- a/java/org/apache/tomcat/websocket/LocalStrings.properties
+++ b/java/org/apache/tomcat/websocket/LocalStrings.properties
@@ -94,6 +94,7 @@ wsRemoteEndpoint.closedDuringMessage=The remainder of the 
message will not be se
 wsRemoteEndpoint.closedOutputStream=This method may not be called as the 
OutputStream has been closed
 wsRemoteEndpoint.closedWriter=This method may not be called as the Writer has 
been closed
 wsRemoteEndpoint.encoderDestoryFailed=Failed to destroy the encoder of type 
[{0}]
+wsRemoteEndpoint.encoderError=Encoding error [{0}]
 wsRemoteEndpoint.flushOnCloseFailed=Batched messages still enabled after 
session has been closed. Unable to flush remaining batched message.
 wsRemoteEndpoint.invalidEncoder=The specified encoder of type [{0}] could not 
be instantiated
 wsRemoteEndpoint.noEncoder=No encoder specified for object of class [{0}]


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to