You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/05/02 08:45:31 UTC

svn commit: r1793437 - in /tomcat/trunk: java/org/apache/catalina/connector/ java/org/apache/catalina/core/ java/org/apache/catalina/servlets/ java/org/apache/tomcat/util/buf/ java/org/apache/tomcat/util/descriptor/web/ java/org/apache/tomcat/util/dige...

Author: markt
Date: Tue May  2 08:45:30 2017
New Revision: 1793437

URL: http://svn.apache.org/viewvc?rev=1793437&view=rev
Log:
Move towards using Charset rather than String internally to reduce the number of calls required to B2CConverter.getCharset() during a request.

Added:
    tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties   (with props)
Modified:
    tomcat/trunk/java/org/apache/catalina/connector/Request.java
    tomcat/trunk/java/org/apache/catalina/core/ApplicationServletRegistration.java
    tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java
    tomcat/trunk/java/org/apache/tomcat/util/buf/UDecoder.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FilterMap.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/JspPropertyGroup.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityCollection.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityConstraint.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/XmlEncodingBase.java
    tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java
    tomcat/trunk/java/org/apache/tomcat/util/digester/DocumentProperties.java
    tomcat/trunk/test/org/apache/catalina/core/TestApplicationContextGetRequestDispatcher.java
    tomcat/trunk/test/org/apache/tomcat/util/buf/TestUDecoder.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Tue May  2 08:45:30 2017
@@ -2027,7 +2027,7 @@ public class Request implements HttpServ
             candidate = uri.substring(0, pos);
         }
         candidate = removePathParameters(candidate);
-        candidate = UDecoder.URLDecode(candidate, connector.getURIEncoding());
+        candidate = UDecoder.URLDecode(candidate, connector.getURICharset());
         candidate = org.apache.tomcat.util.http.RequestUtil.normalize(candidate);
         boolean match = canonicalContextPath.equals(candidate);
         while (!match && pos != -1) {
@@ -2038,7 +2038,7 @@ public class Request implements HttpServ
                 candidate = uri.substring(0, pos);
             }
             candidate = removePathParameters(candidate);
-            candidate = UDecoder.URLDecode(candidate, connector.getURIEncoding());
+            candidate = UDecoder.URLDecode(candidate, connector.getURICharset());
             candidate = org.apache.tomcat.util.http.RequestUtil.normalize(candidate);
             match = canonicalContextPath.equals(candidate);
         }

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationServletRegistration.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationServletRegistration.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationServletRegistration.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationServletRegistration.java Tue May  2 08:45:30 2017
@@ -17,6 +17,7 @@
 
 package org.apache.catalina.core;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -191,7 +192,7 @@ public class ApplicationServletRegistrat
 
         for (String urlPattern : urlPatterns) {
             context.addServletMappingDecoded(
-                    UDecoder.URLDecode(urlPattern, "UTF-8"), wrapper.getName());
+                    UDecoder.URLDecode(urlPattern, StandardCharsets.UTF_8), wrapper.getName());
         }
         return Collections.emptySet();
     }

Modified: tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java Tue May  2 08:45:30 2017
@@ -1524,7 +1524,7 @@ public class WebdavServlet
         }
 
         // Remove url encoding from destination
-        destinationPath = UDecoder.URLDecode(destinationPath, "UTF8");
+        destinationPath = UDecoder.URLDecode(destinationPath, StandardCharsets.UTF_8);
 
         int protocolIndex = destinationPath.indexOf("://");
         if (protocolIndex >= 0) {

Modified: tomcat/trunk/java/org/apache/tomcat/util/buf/UDecoder.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/buf/UDecoder.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/buf/UDecoder.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/buf/UDecoder.java Tue May  2 08:45:30 2017
@@ -19,6 +19,7 @@ package org.apache.tomcat.util.buf;
 import java.io.CharConversionException;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.juli.logging.Log;
@@ -294,7 +295,7 @@ public final class UDecoder {
 
     /**
      * Decode and return the specified URL-encoded String.
-     * When the byte array is converted to a string, the UTF-8 is used. This may
+     * When the byte array is converted to a string, UTF-8 is used. This may
      * be different than some other servers. It is assumed the string is not a
      * query string.
      *
@@ -304,7 +305,7 @@ public final class UDecoder {
      * by a valid 2-digit hexadecimal number
      */
     public static String URLDecode(String str) {
-        return URLDecode(str, null);
+        return URLDecode(str, StandardCharsets.UTF_8);
     }
 
 
@@ -318,13 +319,34 @@ public final class UDecoder {
      * @return the decoded string
      * @exception IllegalArgumentException if a '%' character is not followed
      * by a valid 2-digit hexadecimal number
+     *
+     * @deprecated This method will be removed in Tomcat 9
      */
+    @Deprecated
     public static String URLDecode(String str, String enc) {
         return URLDecode(str, enc, false);
     }
 
 
     /**
+     * Decode and return the specified URL-encoded String. It is assumed the
+     * string is not a query string.
+     *
+     * @param str The url-encoded string
+     * @param charset The character encoding to use; if null, UTF-8 is used.
+     * @return the decoded string
+     * @exception IllegalArgumentException if a '%' character is not followed
+     * by a valid 2-digit hexadecimal number
+     */
+    public static String URLDecode(String str, Charset charset) {
+        if (str == null) {
+            return null;
+        }
+        return URLDecode(str.getBytes(StandardCharsets.US_ASCII), charset, false);
+    }
+
+
+    /**
      * Decode and return the specified URL-encoded String.
      *
      * @param str The url-encoded string
@@ -334,7 +356,10 @@ public final class UDecoder {
      * @return the decoded string
      * @exception IllegalArgumentException if a '%' character is not followed
      * by a valid 2-digit hexadecimal number
+     *
+     * @deprecated This method will be removed in Tomcat 9
      */
+    @Deprecated
     public static String URLDecode(String str, String enc, boolean isQuery) {
         if (str == null) {
             return null;
@@ -357,11 +382,36 @@ public final class UDecoder {
      * @return the decoded string
      * @exception IllegalArgumentException if a '%' character is not followed
      * by a valid 2-digit hexadecimal number
+     *
+     * @deprecated This method will be removed in Tomcat 9
      */
+    @Deprecated
     public static String URLDecode(byte[] bytes, String enc, boolean isQuery) {
+        Charset charset = null;
+
+        if (enc != null) {
+            try {
+                charset = B2CConverter.getCharset(enc);
+            } catch (UnsupportedEncodingException uee) {
+                if (log.isDebugEnabled()) {
+                    log.debug(sm.getString("uDecoder.urlDecode.uee", enc), uee);
+                }
+            }
+        }
 
-        if (bytes == null)
+        return URLDecode(bytes, charset, isQuery);
+    }
+
+
+    private static String URLDecode(byte[] bytes, Charset charset, boolean isQuery) {
+
+        if (bytes == null) {
             return null;
+        }
+
+        if (charset == null) {
+            charset = StandardCharsets.UTF_8;
+        }
 
         int len = bytes.length;
         int ix = 0;
@@ -380,18 +430,8 @@ public final class UDecoder {
             }
             bytes[ox++] = b;
         }
-        if (enc != null) {
-            try {
-                return new String(bytes, 0, ox, B2CConverter.getCharset(enc));
-            } catch (UnsupportedEncodingException uee) {
-                if (log.isDebugEnabled()) {
-                    log.debug(sm.getString("uDecoder.urlDecode.uee", enc), uee);
-                }
-                return null;
-            }
-        }
-        return new String(bytes, 0, ox, StandardCharsets.UTF_8);
 
+        return new String(bytes, 0, ox, charset);
     }
 
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FilterMap.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FilterMap.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FilterMap.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FilterMap.java Tue May  2 08:45:30 2017
@@ -127,7 +127,7 @@ public class FilterMap extends XmlEncodi
     }
 
     public void addURLPattern(String urlPattern) {
-        addURLPatternDecoded(UDecoder.URLDecode(urlPattern, getEncoding()));
+        addURLPatternDecoded(UDecoder.URLDecode(urlPattern, getCharset()));
     }
     public void addURLPatternDecoded(String urlPattern) {
         if ("*".equals(urlPattern)) {

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/JspPropertyGroup.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/JspPropertyGroup.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/JspPropertyGroup.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/JspPropertyGroup.java Tue May  2 08:45:30 2017
@@ -78,7 +78,7 @@ public class JspPropertyGroup extends Xm
 
     private LinkedHashSet<String> urlPattern = new LinkedHashSet<>();
     public void addUrlPattern(String urlPattern) {
-        addUrlPatternDecoded(UDecoder.URLDecode(urlPattern, getEncoding()));
+        addUrlPatternDecoded(UDecoder.URLDecode(urlPattern, getCharset()));
     }
     public void addUrlPatternDecoded(String urlPattern) {
         this.urlPattern.add(urlPattern);

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/LocalStrings.properties Tue May  2 08:45:30 2017
@@ -62,3 +62,5 @@ webXml.wrongFragmentName=Used a wrong fr
 webXmlParser.applicationParse=Parse error in application web.xml file at [{0}]
 webXmlParser.applicationPosition=Occurred at line [{0}] column [{1}]
 webXmlParser.applicationStart=Parsing application web.xml file at [{0}]
+
+xmlEncodingBase.encodingInvalid=The encoding [{0}] is not recognised by this JRE. The existing value of [{1}] will be used
\ No newline at end of file

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityCollection.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityCollection.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityCollection.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityCollection.java Tue May  2 08:45:30 2017
@@ -17,6 +17,7 @@
 package org.apache.tomcat.util.descriptor.web;
 
 import java.io.Serializable;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.tomcat.util.buf.UDecoder;
 
@@ -209,7 +210,7 @@ public class SecurityCollection extends
      * @param pattern The pattern
      */
     public void addPattern(String pattern) {
-        addPatternDecoded(UDecoder.URLDecode(pattern, "UTF-8"));
+        addPatternDecoded(UDecoder.URLDecode(pattern, StandardCharsets.UTF_8));
     }
     public void addPatternDecoded(String pattern) {
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityConstraint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityConstraint.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityConstraint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/SecurityConstraint.java Tue May  2 08:45:30 2017
@@ -281,7 +281,7 @@ public class SecurityConstraint extends
         if (collection == null)
             return;
 
-        collection.setEncoding(getEncoding());
+        collection.setCharset(getCharset());
 
         SecurityCollection results[] =
             new SecurityCollection[collections.length + 1];

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java Tue May  2 08:45:30 2017
@@ -55,7 +55,9 @@ import org.apache.tomcat.util.res.String
  * This class checks for invalid duplicates (eg filter/servlet names)
  * StandardContext will check validity of values (eg URL formats etc)
  */
-public class WebXml extends XmlEncodingBase implements DocumentProperties.Encoding {
+@SuppressWarnings("deprecation")
+public class WebXml extends XmlEncodingBase implements DocumentProperties.Encoding,
+        DocumentProperties.Charset {
 
     protected static final String ORDER_OTHERS =
         "org.apache.catalina.order.others";
@@ -318,7 +320,7 @@ public class WebXml extends XmlEncodingB
     private final Map<String,String> servletMappings = new HashMap<>();
     private final Set<String> servletMappingNames = new HashSet<>();
     public void addServletMapping(String urlPattern, String servletName) {
-        addServletMappingDecoded(UDecoder.URLDecode(urlPattern, getEncoding()), servletName);
+        addServletMappingDecoded(UDecoder.URLDecode(urlPattern, getCharset()), servletName);
     }
     public void addServletMappingDecoded(String urlPattern, String servletName) {
         String oldServletName = servletMappings.put(urlPattern, servletName);
@@ -403,7 +405,7 @@ public class WebXml extends XmlEncodingB
     // jsp-config/jsp-property-group
     private final Set<JspPropertyGroup> jspPropertyGroups = new LinkedHashSet<>();
     public void addJspPropertyGroup(JspPropertyGroup propertyGroup) {
-        propertyGroup.setEncoding(getEncoding());
+        propertyGroup.setCharset(getCharset());
         jspPropertyGroups.add(propertyGroup);
     }
     public Set<JspPropertyGroup> getJspPropertyGroups() {
@@ -415,7 +417,7 @@ public class WebXml extends XmlEncodingB
     // TODO: Should support multiple description elements with language
     private final Set<SecurityConstraint> securityConstraints = new HashSet<>();
     public void addSecurityConstraint(SecurityConstraint securityConstraint) {
-        securityConstraint.setEncoding(getEncoding());
+        securityConstraint.setCharset(getCharset());
         securityConstraints.add(securityConstraint);
     }
     public Set<SecurityConstraint> getSecurityConstraints() {

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/XmlEncodingBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/XmlEncodingBase.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/XmlEncodingBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/XmlEncodingBase.java Tue May  2 08:45:30 2017
@@ -16,17 +16,38 @@
  */
 package org.apache.tomcat.util.descriptor.web;
 
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.buf.B2CConverter;
+import org.apache.tomcat.util.res.StringManager;
+
 /**
  * Base class for those elements that need to track the encoding used in the
  * source XML.
  */
 public abstract class XmlEncodingBase {
 
-    private String encoding = null;
+    private static final Log log = LogFactory.getLog(XmlEncodingBase.class);
+    private static final StringManager sm = StringManager.getManager(XmlEncodingBase.class);
+    private Charset charset = StandardCharsets.UTF_8;
 
 
+    /**
+     * @param encoding The encoding of the XML source that was used to
+     *                 populated this object.
+     * @deprecated This method will be removed in Tomcat 9
+     */
+    @Deprecated
     public void setEncoding(String encoding) {
-        this.encoding = encoding;
+        try {
+            charset = B2CConverter.getCharset(encoding);
+        } catch (UnsupportedEncodingException e) {
+            log.warn(sm.getString("xmlEncodingBase.encodingInvalid", encoding, charset.name()), e);
+        }
     }
 
 
@@ -36,11 +57,27 @@ public abstract class XmlEncodingBase {
      *
      * @return The encoding of the associated XML source or <code>UTF-8</code>
      *         if the encoding could not be determined
+     * @deprecated This method will be removed in Tomcat 9
      */
+    @Deprecated
     public String getEncoding() {
-        if (encoding == null || encoding.length() == 0) {
-            return "UTF-8";
-        }
-        return encoding;
+        return charset.name();
+    }
+
+
+    public void setCharset(Charset charset) {
+        this.charset = charset;
+    }
+
+
+    /**
+     * Obtain the character encoding of the XML source that was used to
+     * populated this object.
+     *
+     * @return The character encoding of the associated XML source or
+     *         <code>UTF-8</code> if the encoding could not be determined
+     */
+    public Charset getCharset() {
+        return charset;
     }
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java Tue May  2 08:45:30 2017
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -39,6 +40,8 @@ import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.IntrospectionUtils;
+import org.apache.tomcat.util.buf.B2CConverter;
+import org.apache.tomcat.util.res.StringManager;
 import org.apache.tomcat.util.security.PermissionCheck;
 import org.xml.sax.Attributes;
 import org.xml.sax.EntityResolver;
@@ -76,7 +79,6 @@ import org.xml.sax.helpers.AttributesImp
  */
 public class Digester extends DefaultHandler2 {
 
-
     // ---------------------------------------------------------- Static Fields
 
     protected static IntrospectionUtils.PropertySource propertySource = null;
@@ -289,8 +291,8 @@ public class Digester extends DefaultHan
     /**
      * The Log to which most logging calls will be made.
      */
-    protected Log log = LogFactory.getLog("org.apache.tomcat.util.digester.Digester");
-
+    protected Log log = LogFactory.getLog(Digester.class);
+    protected StringManager sm = StringManager.getManager(Digester.class);
 
     /**
      * The Log to which all SAX event related logging calls will be made.
@@ -1112,6 +1114,7 @@ public class Digester extends DefaultHan
      *
      * @exception SAXException if a parsing error is to be reported
      */
+    @SuppressWarnings("deprecation")
     @Override
     public void startDocument() throws SAXException {
 
@@ -1119,8 +1122,17 @@ public class Digester extends DefaultHan
             saxLog.debug("startDocument()");
         }
 
-        if (locator instanceof Locator2 && root instanceof DocumentProperties.Encoding) {
-            ((DocumentProperties.Encoding) root).setEncoding(((Locator2) locator).getEncoding());
+        if (locator instanceof Locator2) {
+            if (root instanceof DocumentProperties.Charset) {
+                String enc = ((Locator2) locator).getEncoding();
+                try {
+                    ((DocumentProperties.Charset) root).setCharset(B2CConverter.getCharset(enc));
+                } catch (UnsupportedEncodingException e) {
+                    log.warn(sm.getString("disgester.encodingInvalid", enc), e);
+                }
+            } else if (root instanceof DocumentProperties.Encoding) {
+                ((DocumentProperties.Encoding) root).setEncoding(((Locator2) locator).getEncoding());
+            }
         }
 
         // ensure that the digester is properly configured, as

Modified: tomcat/trunk/java/org/apache/tomcat/util/digester/DocumentProperties.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/digester/DocumentProperties.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/digester/DocumentProperties.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/digester/DocumentProperties.java Tue May  2 08:45:30 2017
@@ -26,9 +26,19 @@ package org.apache.tomcat.util.digester;
 public interface DocumentProperties {
 
     /**
-     * The encoding used by the source XMl document.
+     * The encoding used by the source XML document.
+     *
+     * @deprecated This method will be removed in Tomcat 9
      */
+    @Deprecated
     public interface Encoding {
         public void setEncoding(String encoding);
     }
+
+    /**
+     * The character encoding used by the source XML document.
+     */
+    public interface Charset {
+        public void setCharset(java.nio.charset.Charset charset);
+    }
 }

Added: tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties?rev=1793437&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties (added)
+++ tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties Tue May  2 08:45:30 2017
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+disgester.encodingInvalid=The encoding [{0}] is not recognised by the JRE and will be ignored
\ No newline at end of file

Propchange: tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tomcat/trunk/test/org/apache/catalina/core/TestApplicationContextGetRequestDispatcher.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestApplicationContextGetRequestDispatcher.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestApplicationContextGetRequestDispatcher.java (original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestApplicationContextGetRequestDispatcher.java Tue May  2 08:45:30 2017
@@ -17,6 +17,7 @@
 package org.apache.catalina.core;
 
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collection;
 
@@ -369,7 +370,8 @@ public class TestApplicationContextGetRe
 
         // Add a target servlet to dispatch to
         Tomcat.addServlet(ctx, "target", new TargetServlet());
-        ctx.addServletMappingDecoded(UDecoder.URLDecode(targetPath, "UTF-8"), "target");
+        ctx.addServletMappingDecoded(
+                UDecoder.URLDecode(targetPath, StandardCharsets.UTF_8), "target");
 
         if (useAsync) {
             Wrapper w = Tomcat.addServlet(
@@ -378,7 +380,7 @@ public class TestApplicationContextGetRe
         } else {
             Tomcat.addServlet(ctx, "rd", new DispatcherServlet(dispatchPath));
         }
-        ctx.addServletMappingDecoded(UDecoder.URLDecode(startPath, "UTF-8"), "rd");
+        ctx.addServletMappingDecoded(UDecoder.URLDecode(startPath, StandardCharsets.UTF_8), "rd");
 
         tomcat.start();
 

Modified: tomcat/trunk/test/org/apache/tomcat/util/buf/TestUDecoder.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/buf/TestUDecoder.java?rev=1793437&r1=1793436&r2=1793437&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/buf/TestUDecoder.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/buf/TestUDecoder.java Tue May  2 08:45:30 2017
@@ -16,6 +16,8 @@
  */
 package org.apache.tomcat.util.buf;
 
+import java.nio.charset.StandardCharsets;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -47,41 +49,41 @@ public class TestUDecoder {
     @Test
     public void testURLDecodeStringValidIso88591Start() {
 
-        String result = UDecoder.URLDecode("%41xxxx", "ISO-8859-1");
+        String result = UDecoder.URLDecode("%41xxxx", StandardCharsets.ISO_8859_1);
         assertEquals("Axxxx", result);
     }
 
     @Test
     public void testURLDecodeStringValidIso88591Middle() {
 
-        String result = UDecoder.URLDecode("xx%41xx", "ISO-8859-1");
+        String result = UDecoder.URLDecode("xx%41xx", StandardCharsets.ISO_8859_1);
         assertEquals("xxAxx", result);
     }
 
     @Test
     public void testURLDecodeStringValidIso88591End() {
 
-        String result = UDecoder.URLDecode("xxxx%41", "ISO-8859-1");
+        String result = UDecoder.URLDecode("xxxx%41", StandardCharsets.ISO_8859_1);
         assertEquals("xxxxA", result);
     }
 
     @Test
     public void testURLDecodeStringValidUtf8Start() {
-        String result = UDecoder.URLDecode("%c3%aaxxxx", "UTF-8");
+        String result = UDecoder.URLDecode("%c3%aaxxxx", StandardCharsets.UTF_8);
         assertEquals("\u00eaxxxx", result);
     }
 
     @Test
     public void testURLDecodeStringValidUtf8Middle() {
 
-        String result = UDecoder.URLDecode("xx%c3%aaxx", "UTF-8");
+        String result = UDecoder.URLDecode("xx%c3%aaxx", StandardCharsets.UTF_8);
         assertEquals("xx\u00eaxx", result);
     }
 
     @Test
     public void testURLDecodeStringValidUtf8End() {
 
-        String result = UDecoder.URLDecode("xxxx%c3%aa", "UTF-8");
+        String result = UDecoder.URLDecode("xxxx%c3%aa", StandardCharsets.UTF_8);
         assertEquals("xxxx\u00ea", result);
     }
 }



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