http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtil.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtil.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtil.java
deleted file mode 100644
index f5b58f8..0000000
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtil.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.freemarker.dom;
-
-/**
- * For internal use only; don't depend on this, there's no backward 
compatibility guarantee at all!
- * This class is to work around the lack of module system in Java, i.e., so 
that other FreeMarker packages can
- * access things inside this package that users shouldn't. 
- */
-final class DomStringUtil {
-
-    private DomStringUtil() {
-        // Not meant to be instantiated
-    }
-
-    static boolean isXMLNameLike(String name) {
-        return isXMLNameLike(name, 0);
-    }
-    
-    /**
-     * Check if the name looks like an XML element name.
-     * 
-     * @param firstCharIdx The index of the character in the string parameter 
that we treat as the beginning of the
-     *      string to check. This is to spare substringing that has become 
more expensive in Java 7.  
-     * 
-     * @return whether the name is a valid XML element name. (This routine 
might only be 99% accurate. REVISIT)
-     */
-    static boolean isXMLNameLike(String name, int firstCharIdx) {
-        int ln = name.length();
-        for (int i = firstCharIdx; i < ln; i++) {
-            char c = name.charAt(i);
-            if (i == firstCharIdx && (c == '-' || c == '.' || 
Character.isDigit(c))) {
-                return false;
-            }
-            if (!Character.isLetterOrDigit(c) && c != '_' && c != '-' && c != 
'.') {
-                if (c == ':') {
-                    if (i + 1 < ln && name.charAt(i + 1) == ':') {
-                        // "::" is used in XPath
-                        return false;
-                    }
-                    // We don't return here, as a lonely ":" is allowed.
-                } else {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }    
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtils.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtils.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtils.java
new file mode 100644
index 0000000..b796c1e
--- /dev/null
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/DomStringUtils.java
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+
+package org.apache.freemarker.dom;
+
+/**
+ * For internal use only; don't depend on this, there's no backward 
compatibility guarantee at all!
+ * This class is to work around the lack of module system in Java, i.e., so 
that other FreeMarker packages can
+ * access things inside this package that users shouldn't. 
+ */
+final class DomStringUtils {
+
+    private DomStringUtils() {
+        // Not meant to be instantiated
+    }
+
+    static boolean isXMLNameLike(String name) {
+        return isXMLNameLike(name, 0);
+    }
+    
+    /**
+     * Check if the name looks like an XML element name.
+     * 
+     * @param firstCharIdx The index of the character in the string parameter 
that we treat as the beginning of the
+     *      string to check. This is to spare substringing that has become 
more expensive in Java 7.  
+     * 
+     * @return whether the name is a valid XML element name. (This routine 
might only be 99% accurate. REVISIT)
+     */
+    static boolean isXMLNameLike(String name, int firstCharIdx) {
+        int ln = name.length();
+        for (int i = firstCharIdx; i < ln; i++) {
+            char c = name.charAt(i);
+            if (i == firstCharIdx && (c == '-' || c == '.' || 
Character.isDigit(c))) {
+                return false;
+            }
+            if (!Character.isLetterOrDigit(c) && c != '_' && c != '-' && c != 
'.') {
+                if (c == ':') {
+                    if (i + 1 < ln && name.charAt(i + 1) == ':') {
+                        // "::" is used in XPath
+                        return false;
+                    }
+                    // We don't return here, as a lonely ":" is allowed.
+                } else {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }    
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
index 220f414..5e9de70 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/ElementModel.java
@@ -28,7 +28,7 @@ import 
org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateScalarModel;
 import org.apache.freemarker.core.model.TemplateSequenceModel;
 import org.apache.freemarker.core.model.impl.SimpleScalar;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -104,7 +104,7 @@ class ElementModel extends NodeModel implements 
TemplateScalarModel {
                     return super.get(key);
                 }
             } else { // Starts with "@", but not with "@@"
-                if (DomStringUtil.isXMLNameLike(key, 1)) {
+                if (DomStringUtils.isXMLNameLike(key, 1)) {
                     Attr att = getAttribute(key.substring(1));
                     if (att == null) { 
                         return new NodeListModel(this);
@@ -117,7 +117,7 @@ class ElementModel extends NodeModel implements 
TemplateScalarModel {
                     return super.get(key);
                 }
             }
-        } else if (DomStringUtil.isXMLNameLike(key)) {
+        } else if (DomStringUtils.isXMLNameLike(key)) {
             // We interpret key as an element name
             NodeListModel result = ((NodeListModel) 
getChildNodes()).filterByName(key);
             return result.size() != 1 ? result : result.get(0);
@@ -229,6 +229,6 @@ class ElementModel extends NodeModel implements 
TemplateScalarModel {
     }
 
     boolean matchesName(String name, Environment env) {
-        return _StringUtil.matchesQName(name, getNodeName(), 
getNodeNamespace(), env);
+        return _StringUtils.matchesQName(name, getNodeName(), 
getNodeNamespace(), env);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
index 333bb5c..ab7d701 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeListModel.java
@@ -137,9 +137,9 @@ class NodeListModel extends SimpleSequence implements 
TemplateHashModel, _Unexpe
                 }
             }
         }
-        if (DomStringUtil.isXMLNameLike(key) 
+        if (DomStringUtils.isXMLNameLike(key)
                 || ((key.startsWith("@")
-                        && (DomStringUtil.isXMLNameLike(key, 1)  || 
key.equals("@@") || key.equals("@*"))))
+                        && (DomStringUtils.isXMLNameLike(key, 1)  || 
key.equals("@@") || key.equals("@*"))))
                 || key.equals("*") || key.equals("**")) {
             NodeListModel result = new NodeListModel(contextNode);
             for (int i = 0; i < size(); i++) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeOutputter.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeOutputter.java 
b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeOutputter.java
index bda38ac..7b543f4 100644
--- a/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeOutputter.java
+++ b/freemarker-dom/src/main/java/org/apache/freemarker/dom/NodeOutputter.java
@@ -25,7 +25,7 @@ import java.util.LinkedHashMap;
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.Template;
 import org.apache.freemarker.core.util.BugException;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.DocumentType;
@@ -78,7 +78,7 @@ class NodeOutputter {
                 if (prefix == null) {
                     // Assign a generated prefix:
                     do {
-                        prefix = 
_StringUtil.toLowerABC(nextGeneratedPrefixNumber++);
+                        prefix = 
_StringUtils.toLowerABC(nextGeneratedPrefixNumber++);
                     } while (env.getNamespaceForPrefix(prefix) != null);
                 }
             }
@@ -150,7 +150,7 @@ class NodeOutputter {
                     buf.append(' ');
                     outputQualifiedName(n, buf);
                     buf.append("=\"")
-                       .append(_StringUtil.XMLEncQAttr(n.getNodeValue()))
+                       .append(_StringUtils.XMLEncQAttr(n.getNodeValue()))
                        .append('"');
                 }
                 break;
@@ -216,7 +216,7 @@ class NodeOutputter {
                         }*/
             case Node.CDATA_SECTION_NODE:
             case Node.TEXT_NODE: {
-                buf.append(_StringUtil.XMLEncNQG(n.getNodeValue()));
+                buf.append(_StringUtils.XMLEncNQG(n.getNodeValue()));
                 break;
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-dom/src/test/java/org/apache/freemarker/dom/test/DOMLoader.java
----------------------------------------------------------------------
diff --git 
a/freemarker-dom/src/test/java/org/apache/freemarker/dom/test/DOMLoader.java 
b/freemarker-dom/src/test/java/org/apache/freemarker/dom/test/DOMLoader.java
index bc957c5..cbb06e5 100644
--- a/freemarker-dom/src/test/java/org/apache/freemarker/dom/test/DOMLoader.java
+++ b/freemarker-dom/src/test/java/org/apache/freemarker/dom/test/DOMLoader.java
@@ -30,7 +30,7 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.apache.freemarker.dom.NodeModel;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -89,7 +89,7 @@ public final class DOMLoader {
         InputStream in = baseClass.getResourceAsStream(resourcePath);
         if (in == null) {
             throw new FileNotFoundException("Class loader resource not found: 
baseClass=" + baseClass.getName()
-                    + "; path=" + _StringUtil.jQuote(resourcePath));
+                    + "; path=" + _StringUtils.jQuote(resourcePath));
         }
         return toModel(new InputSource(in));
     }
@@ -121,7 +121,7 @@ public final class DOMLoader {
         InputStream in = baseClass.getResourceAsStream(resourcePath);
         if (in == null) {
             throw new FileNotFoundException("Class loader resource not found: 
baseClass="
-                    + baseClass.getName() + "; " + "path=" + 
_StringUtil.jQuote(resourcePath));
+                    + baseClass.getName() + "; " + "path=" + 
_StringUtils.jQuote(resourcePath));
         }
         return builder.parse(new InputSource(in));
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
index f987dcd..a670b62 100644
--- 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
+++ 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/BaseNTemplateNumberFormatFactory.java
@@ -23,8 +23,8 @@ import java.util.Locale;
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateNumberModel;
-import org.apache.freemarker.core.util._NumberUtil;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._NumberUtils;
+import org.apache.freemarker.core.util._StringUtils;
 import org.apache.freemarker.core.valueformat.InvalidFormatParametersException;
 import org.apache.freemarker.core.valueformat.TemplateFormatUtil;
 import org.apache.freemarker.core.valueformat.TemplateNumberFormat;
@@ -60,7 +60,7 @@ public class BaseNTemplateNumberFormatFactory extends 
TemplateNumberFormatFactor
                 } catch (TemplateValueFormatException e) {
                     throw new InvalidFormatParametersException(
                             "Couldn't get the fallback number format 
(specified after the \"|\"), "
-                            + _StringUtil.jQuote(fallbackFormatStr) + ". 
Reason: " + e.getMessage(),
+                            + _StringUtils.jQuote(fallbackFormatStr) + ". 
Reason: " + e.getMessage(),
                             e);
                 }
             } else {
@@ -78,7 +78,7 @@ public class BaseNTemplateNumberFormatFactory extends 
TemplateNumberFormatFactor
             }
             throw new InvalidFormatParametersException(
                     "The format paramter must be an integer, but was (shown 
quoted): "
-                    + _StringUtil.jQuote(params));
+                    + _StringUtils.jQuote(params));
         }
         if (base < 2) {
             throw new InvalidFormatParametersException("A base must be at 
least 2.");
@@ -101,7 +101,7 @@ public class BaseNTemplateNumberFormatFactory extends 
TemplateNumberFormatFactor
                 throws TemplateModelException, TemplateValueFormatException {
             Number n = TemplateFormatUtil.getNonNullNumber(numberModel);
             try {
-                return Integer.toString(_NumberUtil.toIntExact(n), base);
+                return Integer.toString(_NumberUtils.toIntExact(n), base);
             } catch (ArithmeticException e) {
                 if (fallbackFormat == null) {
                     throw new UnformattableValueException(

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/TemplateConfigurationExamples.java
----------------------------------------------------------------------
diff --git 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/TemplateConfigurationExamples.java
 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/TemplateConfigurationExamples.java
index 078e4db..d1b5e3e 100644
--- 
a/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/TemplateConfigurationExamples.java
+++ 
b/freemarker-manual/src/test/java/org/apache/freemarker/manual/examples/TemplateConfigurationExamples.java
@@ -37,7 +37,7 @@ import 
org.apache.freemarker.core.templateresolver.FirstMatchTemplateConfigurati
 import 
org.apache.freemarker.core.templateresolver.MergingTemplateConfigurationFactory;
 import org.apache.freemarker.core.templateresolver.OrMatcher;
 import org.apache.freemarker.core.templateresolver.PathGlobMatcher;
-import org.apache.freemarker.core.util._DateUtil;
+import org.apache.freemarker.core.util._DateUtils;
 import org.apache.freemarker.test.TemplateTest;
 import org.apache.freemarker.test.TestConfigurationBuilder;
 import org.junit.Test;
@@ -144,7 +144,7 @@ public class TemplateConfigurationExamples extends 
TemplateTest {
                                             .dateTimeFormat("iso")
                                             .dateFormat("iso")
                                             .timeFormat("iso")
-                                            .timeZone(_DateUtil.UTC)
+                                            .timeZone(_DateUtils.UTC)
                                             .build()),
                             new ConditionalTemplateConfigurationFactory(
                                     new PathGlobMatcher("mail/**"),

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
index 181d0ab..2121720 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
@@ -61,9 +61,9 @@ import 
org.apache.freemarker.core.templateresolver.TemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl.ClassTemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl.FileTemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl.MultiTemplateLoader;
-import org.apache.freemarker.core.util._CollectionUtil;
-import org.apache.freemarker.core.util._SecurityUtil;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._CollectionUtils;
+import org.apache.freemarker.core.util._SecurityUtils;
+import org.apache.freemarker.core.util._StringUtils;
 import org.apache.freemarker.servlet.jsp.TaglibFactory;
 import 
org.apache.freemarker.servlet.jsp.TaglibFactory.ClasspathMetaInfTldSource;
 import org.apache.freemarker.servlet.jsp.TaglibFactory.MetaInfTldSource;
@@ -566,7 +566,7 @@ public class FreemarkerServlet extends HttpServlet {
             }
             if (value == null) {
                 throw new MalformedWebXmlException(
-                        "init-param " + _StringUtil.jQuote(name) + " without 
param-value. "
+                        "init-param " + _StringUtils.jQuote(name) + " without 
param-value. "
                         + "Maybe the web.xml is not well-formed?");
             }
 
@@ -611,16 +611,16 @@ public class FreemarkerServlet extends HttpServlet {
                                 "Not one of the supported values.");
                     }
                 } else if (name.equals(INIT_PARAM_NO_CACHE)) {
-                    noCache = _StringUtil.getYesNo(value);
+                    noCache = _StringUtils.getYesNo(value);
                 } else if (name.equals(INIT_PARAM_BUFFER_SIZE)) {
                     bufferSize = Integer.valueOf(parseSize(value));
                 } else if (name.equals(DEPR_INITPARAM_DEBUG)) { // BC
                     if (getInitParameter(INIT_PARAM_DEBUG) != null) {
                         throw new 
ConflictingInitParamsException(INIT_PARAM_DEBUG, DEPR_INITPARAM_DEBUG);
                     }
-                    debug = _StringUtil.getYesNo(value);
+                    debug = _StringUtils.getYesNo(value);
                 } else if (name.equals(INIT_PARAM_DEBUG)) {
-                    debug = _StringUtil.getYesNo(value);
+                    debug = _StringUtils.getYesNo(value);
                 } else if (name.equals(INIT_PARAM_CONTENT_TYPE)) {
                     contentType = new ContentType(value);
                 } else if 
(name.equals(INIT_PARAM_OVERRIDE_RESPONSE_CONTENT_TYPE)) {
@@ -634,7 +634,7 @@ public class FreemarkerServlet extends HttpServlet {
                 } else if (name.equals(INIT_PARAM_OVERRIDE_RESPONSE_LOCALE)) {
                     overrideResponseLocale = initParamValueToEnum(value, 
OverrideResponseLocale.values());
                 } else if 
(name.equals(INIT_PARAM_EXCEPTION_ON_MISSING_TEMPLATE)) {
-                    exceptionOnMissingTemplate = _StringUtil.getYesNo(value);
+                    exceptionOnMissingTemplate = _StringUtils.getYesNo(value);
                 } else if (name.equals(INIT_PARAM_META_INF_TLD_LOCATIONS)) {
                     metaInfTldSources = 
TaglibFactory.parseMetaInfTldLocations(InitParamParser.parseCommaSeparatedList(value));
                 } else if (name.equals(INIT_PARAM_CLASSPATH_TLDS)) {
@@ -722,7 +722,7 @@ public class FreemarkerServlet extends HttpServlet {
         String templatePath = requestUrlToTemplatePath(request);
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("Requested template " + 
_StringUtil.jQuoteNoXSS(templatePath) + ".");
+            LOG.debug("Requested template " + 
_StringUtils.jQuoteNoXSS(templatePath) + ".");
         }
 
         Locale locale = request.getLocale();
@@ -736,21 +736,21 @@ public class FreemarkerServlet extends HttpServlet {
         } catch (TemplateNotFoundException e) {
             if (exceptionOnMissingTemplate) {
                 throw newServletExceptionWithFreeMarkerLogging(
-                        "Template not found for name " + 
_StringUtil.jQuoteNoXSS(templatePath) + ".", e);
+                        "Template not found for name " + 
_StringUtils.jQuoteNoXSS(templatePath) + ".", e);
             } else {
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Responding HTTP 404 \"Not found\" for missing 
template "
-                            + _StringUtil.jQuoteNoXSS(templatePath) + ".", e);
+                            + _StringUtils.jQuoteNoXSS(templatePath) + ".", e);
                 }
                 response.sendError(HttpServletResponse.SC_NOT_FOUND, "Page 
template not found");
                 return;
             }
         } catch (org.apache.freemarker.core.ParseException e) {
             throw newServletExceptionWithFreeMarkerLogging(
-                    "Parsing error with template " + 
_StringUtil.jQuoteNoXSS(templatePath) + ".", e);
+                    "Parsing error with template " + 
_StringUtils.jQuoteNoXSS(templatePath) + ".", e);
         } catch (Exception e) {
             throw newServletExceptionWithFreeMarkerLogging(
-                    "Unexpected error when loading template " + 
_StringUtil.jQuoteNoXSS(templatePath) + ".", e);
+                    "Unexpected error when loading template " + 
_StringUtils.jQuoteNoXSS(templatePath) + ".", e);
         }
 
         boolean tempSpecContentTypeContainsCharset = false;
@@ -810,7 +810,7 @@ public class FreemarkerServlet extends HttpServlet {
                                 throw new IllegalStateException(
                                         "Failed to resolve charset name 
returned by "
                                         + " 
HttpServletResponse.getCharacterEncoding(): "
-                                        + 
_StringUtil.jQuote(actualOutputCharsetName),
+                                        + 
_StringUtils.jQuote(actualOutputCharsetName),
                                         e);
                             }
                             env.setOutputEncoding(actualOutputCharset);
@@ -1001,7 +1001,7 @@ public class FreemarkerServlet extends HttpServlet {
 
         List<MetaInfTldSource> metaInfTldSourcesFromSysProp = null;
         try {
-            final String prop = 
_SecurityUtil.getSystemProperty(SYSTEM_PROPERTY_META_INF_TLD_SOURCES, null);
+            final String prop = 
_SecurityUtils.getSystemProperty(SYSTEM_PROPERTY_META_INF_TLD_SOURCES, null);
             metaInfTldSourcesFromSysProp = (List<MetaInfTldSource>) ((prop != 
null)
                     ? 
TaglibFactory.parseMetaInfTldLocations(InitParamParser.parseCommaSeparatedList(prop))
                     : Collections.emptyList());
@@ -1026,7 +1026,7 @@ public class FreemarkerServlet extends HttpServlet {
 
         List<String> classpathTldsFromSysProp = null;
         try {
-            final String prop = 
_SecurityUtil.getSystemProperty(SYSTEM_PROPERTY_CLASSPATH_TLDS, null);
+            final String prop = 
_SecurityUtils.getSystemProperty(SYSTEM_PROPERTY_CLASSPATH_TLDS, null);
             classpathTldsFromSysProp = (prop != null) ? 
InitParamParser.parseCommaSeparatedList(prop)
                     : Collections.<String>emptyList();
         } catch (ParseException e) {
@@ -1035,10 +1035,10 @@ public class FreemarkerServlet extends HttpServlet {
         }
 
         return new TaglibFactory.Builder(servletContext, objectWrapper)
-                .metaInfTldSources(_CollectionUtil.mergeImmutableLists(true, 
metaInfTldSources,
+                .metaInfTldSources(_CollectionUtils.mergeImmutableLists(true, 
metaInfTldSources,
                         metaInfTldSourcesFromSysProp, jettyMetaInfTldSources))
                 .classpathTlds(
-                        _CollectionUtil.mergeImmutableLists(classpathTlds, 
classpathTldsFromSysProp, true))
+                        _CollectionUtils.mergeImmutableLists(classpathTlds, 
classpathTldsFromSysProp, true))
                 .build();
     }
 
@@ -1329,14 +1329,14 @@ public class FreemarkerServlet extends HttpServlet {
     private static class InitParamValueException extends Exception {
 
         InitParamValueException(String initParamName, String initParamValue, 
Throwable casue) {
-            super("Failed to set the " + _StringUtil.jQuote(initParamName) + " 
servlet init-param to "
-                    + _StringUtil.jQuote(initParamValue) + "; see cause 
exception.",
+            super("Failed to set the " + _StringUtils.jQuote(initParamName) + 
" servlet init-param to "
+                    + _StringUtils.jQuote(initParamValue) + "; see cause 
exception.",
                     casue);
         }
 
         public InitParamValueException(String initParamName, String 
initParamValue, String cause) {
-            super("Failed to set the " + _StringUtil.jQuote(initParamName) + " 
servlet init-param to "
-                    + _StringUtil.jQuote(initParamValue) + ": " + cause);
+            super("Failed to set the " + _StringUtils.jQuote(initParamName) + 
" servlet init-param to "
+                    + _StringUtils.jQuote(initParamValue) + ": " + cause);
         }
 
     }
@@ -1346,8 +1346,8 @@ public class FreemarkerServlet extends HttpServlet {
 
         ConflictingInitParamsException(String recommendedName, String 
otherName) {
             super("Conflicting servlet init-params: "
-                    + _StringUtil.jQuote(recommendedName) + " and " + 
_StringUtil.jQuote(otherName)
-                    + ". Only use " + _StringUtil.jQuote(recommendedName) + 
".");
+                    + _StringUtils.jQuote(recommendedName) + " and " + 
_StringUtils.jQuote(otherName)
+                    + ". Only use " + _StringUtils.jQuote(recommendedName) + 
".");
         }
     }
 
@@ -1411,7 +1411,7 @@ public class FreemarkerServlet extends HttpServlet {
         }
 
         StringBuilder sb = new StringBuilder();
-        sb.append(_StringUtil.jQuote(initParamValue));
+        sb.append(_StringUtils.jQuote(initParamValue));
         sb.append(" is not a one of the enumeration values: ");
         boolean first = true;
         for (T value : enumValues) {
@@ -1420,7 +1420,7 @@ public class FreemarkerServlet extends HttpServlet {
             } else {
                 first = false;
             }
-            sb.append(_StringUtil.jQuote(value.getInitParamValue()));
+            sb.append(_StringUtils.jQuote(value.getInitParamValue()));
         }
         throw new IllegalArgumentException(sb.toString());
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/InitParamParser.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/InitParamParser.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/InitParamParser.java
index 323e15f..e74d475 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/InitParamParser.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/InitParamParser.java
@@ -33,7 +33,7 @@ import 
org.apache.freemarker.core.templateresolver.TemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl.ClassTemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl.FileTemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl.MultiTemplateLoader;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -127,7 +127,7 @@ final class InitParamParser {
 
     static List<String> parseCommaSeparatedList(String value) throws 
ParseException {
         List<String> valuesList = new ArrayList<>();
-        String[] values = _StringUtil.split(value, ',');
+        String[] values = _StringUtils.split(value, ',');
         for (int i = 0; i < values.length; i++) {
             final String s = values[i].trim();
             if (s.length() != 0) {
@@ -243,7 +243,7 @@ final class InitParamParser {
         
         if (!biName.equals(TEMPLATE_PATH_SETTINGS_BI_NAME)) {
             throw new TemplatePathParsingException(
-                    _StringUtil.jQuote(biName) + " is unexpected after the 
\"?\". "
+                    _StringUtils.jQuote(biName) + " is unexpected after the 
\"?\". "
                     + "Expected \"" + TEMPLATE_PATH_SETTINGS_BI_NAME + "\".");
         }
         

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/WebAppTemplateLoader.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/WebAppTemplateLoader.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/WebAppTemplateLoader.java
index adbc5e0..b72ce78 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/WebAppTemplateLoader.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/WebAppTemplateLoader.java
@@ -38,9 +38,9 @@ import 
org.apache.freemarker.core.templateresolver.TemplateLoadingResult;
 import org.apache.freemarker.core.templateresolver.TemplateLoadingSource;
 import org.apache.freemarker.core.templateresolver.impl.URLTemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl._TemplateLoaderUtils;
-import org.apache.freemarker.core.util._CollectionUtil;
+import org.apache.freemarker.core.util._CollectionUtils;
 import org.apache.freemarker.core.util._NullArgumentException;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -119,16 +119,16 @@ public class WebAppTemplateLoader implements 
TemplateLoader {
     @Override
     public String toString() {
         return _TemplateLoaderUtils.getClassNameForToString(this)
-                + "(subdirPath=" + _StringUtil.jQuote(subdirPath)
-                + ", servletContext={contextPath=" + 
_StringUtil.jQuote(getContextPath())
-                + ", displayName=" + 
_StringUtil.jQuote(servletContext.getServletContextName()) + "})";
+                + "(subdirPath=" + _StringUtils.jQuote(subdirPath)
+                + ", servletContext={contextPath=" + 
_StringUtils.jQuote(getContextPath())
+                + ", displayName=" + 
_StringUtils.jQuote(servletContext.getServletContextName()) + "})";
     }
 
     /** Gets the context path if we are on Servlet 2.5+, or else returns 
failure description string. */
     private String getContextPath() {
         try {
-            Method m = servletContext.getClass().getMethod("getContextPath", 
_CollectionUtil.EMPTY_CLASS_ARRAY);
-            return (String) m.invoke(servletContext, 
_CollectionUtil.EMPTY_OBJECT_ARRAY);
+            Method m = servletContext.getClass().getMethod("getContextPath", 
_CollectionUtils.EMPTY_CLASS_ARRAY);
+            return (String) m.invoke(servletContext, 
_CollectionUtils.EMPTY_OBJECT_ARRAY);
         } catch (Throwable e) {
             return "[can't query before Serlvet 2.5]";
         }
@@ -221,7 +221,7 @@ public class WebAppTemplateLoader implements TemplateLoader 
{
             url = servletContext.getResource(fullPath);
         } catch (MalformedURLException e) {
             if (LOG.isWarnEnabled()) {
-                LOG.warn("Could not retrieve resource " + 
_StringUtil.jQuoteNoXSS(fullPath), e);
+                LOG.warn("Could not retrieve resource " + 
_StringUtils.jQuoteNoXSS(fullPath), e);
             }
             return null;
         }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/FreeMarkerJspApplicationContext.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/FreeMarkerJspApplicationContext.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/FreeMarkerJspApplicationContext.java
index 12f0d3c..559c70f 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/FreeMarkerJspApplicationContext.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/FreeMarkerJspApplicationContext.java
@@ -40,7 +40,7 @@ import javax.servlet.jsp.JspApplicationContext;
 import javax.servlet.jsp.el.ImplicitObjectELResolver;
 import javax.servlet.jsp.el.ScopedAttributeELResolver;
 
-import org.apache.freemarker.core.util._ClassUtil;
+import org.apache.freemarker.core.util._ClassUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -85,7 +85,7 @@ class FreeMarkerJspApplicationContext implements 
JspApplicationContext {
     private static ExpressionFactory tryExpressionFactoryImplementation(String 
packagePrefix) {
         String className = packagePrefix + ".el.ExpressionFactoryImpl";
         try {
-            Class cl = _ClassUtil.forName(className);
+            Class cl = _ClassUtils.forName(className);
             if (ExpressionFactory.class.isAssignableFrom(cl)) {
                 LOG.info("Using {} as implementation of {}", className, 
ExpressionFactory.class.getName());
                 return (ExpressionFactory) cl.newInstance();

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspTagModelBase.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspTagModelBase.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspTagModelBase.java
index 01418ba..bf2a433 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspTagModelBase.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspTagModelBase.java
@@ -45,7 +45,7 @@ import org.apache.freemarker.core.model.TemplateHashModelEx2;
 import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateScalarModel;
 import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import 
org.apache.freemarker.servlet.jsp.SimpleTagDirectiveModel.TemplateExceptionWrapperJspException;
 
 class JspTagModelBase {
@@ -93,7 +93,7 @@ class JspTagModelBase {
                         }
                     } else {
                         throw new TemplateModelException("Unknown property "
-                                + _StringUtil.jQuote(paramName.toString())
+                                + _StringUtils.jQuote(paramName.toString())
                                 + " on instance of " + tagClass.getName());
                     }
                 } else {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspWriterAdapter.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspWriterAdapter.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspWriterAdapter.java
index 2136968..8f135c2 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspWriterAdapter.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/JspWriterAdapter.java
@@ -24,10 +24,10 @@ import java.io.Writer;
 
 import javax.servlet.jsp.JspWriter;
 
-import org.apache.freemarker.core.util._SecurityUtil;
+import org.apache.freemarker.core.util._SecurityUtils;
 
 class JspWriterAdapter extends JspWriter {
-    static final char[] NEWLINE = 
_SecurityUtil.getSystemProperty("line.separator", "\n").toCharArray();
+    static final char[] NEWLINE = 
_SecurityUtils.getSystemProperty("line.separator", "\n").toCharArray();
     
     private final Writer out;
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
index a1525af..6aaae12 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
@@ -72,9 +72,9 @@ import 
org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
 import org.apache.freemarker.core.util.BugException;
 import org.apache.freemarker.core.util.CommonBuilder;
-import org.apache.freemarker.core.util._ClassUtil;
+import org.apache.freemarker.core.util._ClassUtils;
 import org.apache.freemarker.core.util._NullArgumentException;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.apache.freemarker.servlet.FreemarkerServlet;
 import org.apache.freemarker.servlet.HttpRequestHashModel;
 import org.slf4j.Logger;
@@ -251,7 +251,7 @@ public class TaglibFactory implements TemplateHashModel {
 
             try {
                 if (LOG.isDebugEnabled()) {
-                    LOG.debug("Locating TLD for taglib URI " + 
_StringUtil.jQuoteNoXSS(taglibUri) + ".");
+                    LOG.debug("Locating TLD for taglib URI " + 
_StringUtils.jQuoteNoXSS(taglibUri) + ".");
                 }
 
                 TldLocation explicitlyMappedTldLocation = 
getExplicitlyMappedTldLocation(taglibUri);
@@ -267,7 +267,7 @@ public class TaglibFactory implements TemplateHashModel {
                     try {
                         urlType = getUriType(taglibUri);
                     } catch (MalformedURLException e) {
-                        throw new TaglibGettingException("Malformed taglib 
URI: " + _StringUtil.jQuote(taglibUri), e);
+                        throw new TaglibGettingException("Malformed taglib 
URI: " + _StringUtils.jQuote(taglibUri), e);
                     }
 
                     if (urlType == URL_TYPE_RELATIVE) {
@@ -279,7 +279,7 @@ public class TaglibFactory implements TemplateHashModel {
                         String failedTLDsList = getFailedTLDsList();
                         failedTldListAlreadyIncluded = true;
                         throw new TaglibGettingException("No TLD was found for 
the "
-                                + _StringUtil.jQuoteNoXSS(taglibUri) + " JSP 
taglib URI. (TLD-s are searched according "
+                                + _StringUtils.jQuoteNoXSS(taglibUri) + " JSP 
taglib URI. (TLD-s are searched according "
                                 + "the JSP 2.2 specification. In development- 
and embedded-servlet-container "
                                 + "setups you may also need the "
                                 + "\"" + 
FreemarkerServlet.INIT_PARAM_META_INF_TLD_LOCATIONS + "\" and "
@@ -310,7 +310,7 @@ public class TaglibFactory implements TemplateHashModel {
             } catch (Exception e) {
                 String failedTLDsList = failedTldListAlreadyIncluded ? null : 
getFailedTLDsList();
                 throw new TemplateModelException(
-                        "Error while looking for TLD file for " + 
_StringUtil.jQuoteNoXSS(taglibUri)
+                        "Error while looking for TLD file for " + 
_StringUtils.jQuoteNoXSS(taglibUri)
                         + "; see cause exception."
                         + (failedTLDsList == null
                                 ? ""
@@ -323,8 +323,8 @@ public class TaglibFactory implements TemplateHashModel {
                 return loadTaglib(tldLocation, normalizedTaglibUri);
             } catch (Exception e) {
                 throw new TemplateModelException("Error while loading tag 
library for URI "
-                        + _StringUtil.jQuoteNoXSS(normalizedTaglibUri) + " 
from TLD location "
-                        + _StringUtil.jQuoteNoXSS(tldLocation) + "; see cause 
exception.",
+                        + _StringUtils.jQuoteNoXSS(normalizedTaglibUri) + " 
from TLD location "
+                        + _StringUtils.jQuoteNoXSS(tldLocation) + "; see cause 
exception.",
                         e);
             }
         }
@@ -345,7 +345,7 @@ public class TaglibFactory implements TemplateHashModel {
                 if (i != 0) {
                     sb.append(", ");
                 }
-                sb.append(_StringUtil.jQuote(failedTldLocations.get(i)));
+                sb.append(_StringUtils.jQuote(failedTldLocations.get(i)));
             }
 
             return sb.toString();
@@ -575,7 +575,7 @@ public class TaglibFactory implements TemplateHashModel {
                 in = tldLocation.getInputStream();
             } catch (IOException e) {
                 if (LOG.isWarnEnabled()) {
-                    LOG.warn("Ignored classpath TLD location " + 
_StringUtil.jQuoteNoXSS(tldResourcePath)
+                    LOG.warn("Ignored classpath TLD location " + 
_StringUtils.jQuoteNoXSS(tldResourcePath)
                             + " because of error", e);
                 }
                 in = null;
@@ -755,7 +755,7 @@ public class TaglibFactory implements TemplateHashModel {
     private void addTldLocationsFromFileDirectory(final File dir) throws 
IOException, SAXException {
         if (dir.isDirectory()) {
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Scanning for *.tld-s in File directory: " + 
_StringUtil.jQuoteNoXSS(dir));
+                LOG.debug("Scanning for *.tld-s in File directory: " + 
_StringUtils.jQuoteNoXSS(dir));
             }
 
             File[] tldFiles = dir.listFiles(new FilenameFilter() {
@@ -773,7 +773,7 @@ public class TaglibFactory implements TemplateHashModel {
                 addTldLocationFromTld(new FileTldLocation(file));
             }
         } else {
-            LOG.warn("Skipped scanning for *.tld for non-existent directory: " 
+ _StringUtil.jQuoteNoXSS(dir));
+            LOG.warn("Skipped scanning for *.tld for non-existent directory: " 
+ _StringUtils.jQuoteNoXSS(dir));
         }
     }
 
@@ -822,15 +822,15 @@ public class TaglibFactory implements TemplateHashModel {
     private void addTldLocation(TldLocation tldLocation, String taglibUri) {
         if (tldLocations.containsKey(taglibUri)) {
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Ignored duplicate mapping of taglib URI " + 
_StringUtil.jQuoteNoXSS(taglibUri)
-                        + " to TLD location " + 
_StringUtil.jQuoteNoXSS(tldLocation));
+                LOG.debug("Ignored duplicate mapping of taglib URI " + 
_StringUtils.jQuoteNoXSS(taglibUri)
+                        + " to TLD location " + 
_StringUtils.jQuoteNoXSS(tldLocation));
             }
         } else {
             tldLocations.put(taglibUri, tldLocation);
 
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Mapped taglib URI " + 
_StringUtil.jQuoteNoXSS(taglibUri)
-                        + " to TLD location " + 
_StringUtil.jQuoteNoXSS(tldLocation));
+                LOG.debug("Mapped taglib URI " + 
_StringUtils.jQuoteNoXSS(taglibUri)
+                        + " to TLD location " + 
_StringUtils.jQuoteNoXSS(tldLocation));
             }
         }
     }
@@ -873,8 +873,8 @@ public class TaglibFactory implements TemplateHashModel {
      */
     private TemplateHashModel loadTaglib(TldLocation tldLocation, String 
taglibUri) throws IOException, SAXException {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("Loading taglib for URI " + 
_StringUtil.jQuoteNoXSS(taglibUri)
-                    + " from TLD location " + 
_StringUtil.jQuoteNoXSS(tldLocation));
+            LOG.debug("Loading taglib for URI " + 
_StringUtils.jQuoteNoXSS(taglibUri)
+                    + " from TLD location " + 
_StringUtils.jQuoteNoXSS(tldLocation));
         }
 
         final Taglib taglib = new Taglib(servletContext, tldLocation, 
objectWrapper);
@@ -1006,7 +1006,7 @@ public class TaglibFactory implements TemplateHashModel {
         }
 
         try {
-            return new URL(jarBaseEntryUrl, 
_StringUtil.URLPathEnc(relativeEntryPath, Charset.defaultCharset()));
+            return new URL(jarBaseEntryUrl, 
_StringUtils.URLPathEnc(relativeEntryPath, Charset.defaultCharset()));
         } catch (UnsupportedEncodingException e) {
             throw new BugException();
         }
@@ -1107,8 +1107,8 @@ public class TaglibFactory implements TemplateHashModel {
                             Charset.defaultCharset().name()));
         } catch (Exception e) {
             LOG.error("Couldn't get URL for serlvetContext resource "
-                        + _StringUtil.jQuoteNoXSS(servletContextJarFilePath)
-                        + " / jar entry " + _StringUtil.jQuoteNoXSS(entryPath),
+                        + _StringUtils.jQuoteNoXSS(servletContextJarFilePath)
+                        + " / jar entry " + 
_StringUtils.jQuoteNoXSS(entryPath),
                     e);
             return null;
         }
@@ -1404,7 +1404,7 @@ public class TaglibFactory implements TemplateHashModel {
                 while (true) {
                     final ZipEntry macthedJarEntry = zipIn.getNextEntry();
                     if (macthedJarEntry == null) {
-                        throw new IOException("Could not find JAR entry " + 
_StringUtil.jQuoteNoXSS(entryPath) + ".");
+                        throw new IOException("Could not find JAR entry " + 
_StringUtils.jQuoteNoXSS(entryPath) + ".");
                     }
                     if 
(entryPath.equals(normalizeJarEntryPath(macthedJarEntry.getName(), false))) {
                         returnedZipIn = true;
@@ -1781,7 +1781,7 @@ public class TaglibFactory implements TemplateHashModel {
                                     customTagModel, (TemplateFunctionModel) 
replacedTagOrFunction));
                         } else {
                             if (LOG.isWarnEnabled()) {
-                                LOG.warn("TLD contains multiple tags with name 
" + _StringUtil.jQuote(tagNameCData)
+                                LOG.warn("TLD contains multiple tags with name 
" + _StringUtils.jQuote(tagNameCData)
                                         + "; keeping only the last one.");
                             }
                         }
@@ -1799,13 +1799,13 @@ public class TaglibFactory implements TemplateHashModel 
{
 
                     final Method functionMethod;
                     try {
-                        functionMethod = 
TaglibMethodUtil.getMethodByFunctionSignature(
+                        functionMethod = 
TaglibMethodUtils.getMethodByFunctionSignature(
                                 functionClass, functionSignatureCData);
                     } catch (Exception e) {
                         throw new TldParsingSAXException(
-                                "Error while trying to resolve signature " + 
_StringUtil.jQuote(functionSignatureCData)
-                                        + " on class " + 
_StringUtil.jQuote(functionClass.getName())
-                                        + " for custom EL function " + 
_StringUtil.jQuote(functionNameCData) + ".",
+                                "Error while trying to resolve signature " + 
_StringUtils.jQuote(functionSignatureCData)
+                                        + " on class " + 
_StringUtils.jQuote(functionClass.getName())
+                                        + " for custom EL function " + 
_StringUtils.jQuote(functionNameCData) + ".",
                                 locator,
                                 e);
                     }
@@ -1835,7 +1835,7 @@ public class TaglibFactory implements TemplateHashModel {
                         } else {
                             if (LOG.isWarnEnabled()) {
                                 LOG.warn("TLD contains multiple functions with 
name "
-                                        + 
_StringUtil.jQuote(functionNameCData) + "; keeping only the last one.");
+                                        + 
_StringUtils.jQuote(functionNameCData) + "; keeping only the last one.");
                             }
                         }
                     }
@@ -1885,7 +1885,7 @@ public class TaglibFactory implements TemplateHashModel {
         private Class<?> resoveClassFromTLD(String className, String 
entryType, String entryName)
                 throws TldParsingSAXException {
             try {
-                return _ClassUtil.forName(className);
+                return _ClassUtils.forName(className);
             } catch (LinkageError e) {
                 throw newTLDEntryClassLoadingException(e, className, 
entryType, entryName);
             } catch (ClassNotFoundException e) {
@@ -1905,8 +1905,8 @@ public class TaglibFactory implements TemplateHashModel {
                             && Character.isUpperCase(className.charAt(dotIdx + 
1));
             return new TldParsingSAXException(
                     (e instanceof ClassNotFoundException ? "Not found class " 
: "Can't load class ")
-                            + _StringUtil.jQuote(className) + " for " + 
entryType
-                            + (entryName != null ? " " + 
_StringUtil.jQuote(entryName) : "") + "."
+                            + _StringUtils.jQuote(className) + " for " + 
entryType
+                            + (entryName != null ? " " + 
_StringUtils.jQuote(entryName) : "") + "."
                             + (looksLikeNestedClass
                                     ? " Hint: Before nested classes, use 
\"$\", not \".\"."
                                     : ""),

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtil.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtil.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtil.java
deleted file mode 100644
index a732cbb..0000000
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtil.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.freemarker.servlet.jsp;
-
-import java.lang.reflect.Method;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.freemarker.core.util._ClassUtil;
-import org.apache.freemarker.core.util._StringUtil;
-
-final class TaglibMethodUtil {
-
-    private TaglibMethodUtil() {
-        // Not meant to be instantiated
-    }
-
-    private static final Pattern FUNCTION_SIGNATURE_PATTERN = 
-            
Pattern.compile("^([\\w\\.]+(\\s*\\[\\s*\\])?)\\s+([\\w]+)\\s*\\((.*)\\)$");
-    private static final Pattern FUNCTION_PARAMETER_PATTERN = 
-            Pattern.compile("^([\\w\\.]+)(\\s*\\[\\s*\\])?$");
-
-    /**
-     * Finds method by function signature string which is compliant with
-     * Tag Library function signature in Java Server Page (TM) Specification.
-     * A function signature example is as follows: {@code java.lang.String 
nickName( java.lang.String, int)}
-     * 
-     * @param clazz Class having the method.
-     * @param signature Java Server Page (TM) Specification compliant function 
signature string.
-     * @return method if found.
-     */
-    public static Method getMethodByFunctionSignature(Class clazz, String 
signature)
-            throws SecurityException, NoSuchMethodException, 
ClassNotFoundException {
-        Matcher m1 = FUNCTION_SIGNATURE_PATTERN.matcher(signature);
-
-        if (!m1.matches()) {
-            throw new IllegalArgumentException("Invalid function signature.");
-        }
-
-            String methodName = m1.group(3);
-            String params = m1.group(4).trim();
-            Class [] paramTypes = null;
-
-            if ("".equals(params)) {
-                paramTypes = new Class[0];
-            } else {
-                String [] paramsArray = _StringUtil.split(params, ',');
-                paramTypes = new Class[paramsArray.length];
-                String token = null;
-                String paramType = null;
-                boolean isPrimitive = false;
-                boolean isArrayType = false;
-                Matcher m2 = null;
-
-                for (int i = 0; i < paramsArray.length; i++) {
-                    token = paramsArray[i].trim();
-                    m2 = FUNCTION_PARAMETER_PATTERN.matcher(token);
-
-                    if (!m2.matches()) {
-                        throw new IllegalArgumentException("Invalid argument 
signature: '" + token + "'.");
-                    }
-
-                    paramType = m2.group(1);
-                    isPrimitive = (paramType.indexOf('.') == -1);
-                    isArrayType = (m2.group(2) != null);
-
-                    if (isPrimitive) {
-                        if ("byte".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? byte[].class : 
byte.class);
-                        } else if ("short".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? short[].class : 
short.class);
-                        } else if ("int".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? int[].class : 
int.class);
-                        } else if ("long".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? long[].class : 
long.class);
-                        } else if ("float".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? float[].class : 
float.class);
-                        } else if ("double".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? double[].class : 
double.class);
-                        } else if ("boolean".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? boolean[].class : 
boolean.class);
-                        } else if ("char".equals(paramType)) {
-                            paramTypes[i] = (isArrayType ? char[].class : 
char.class);
-                        } else {
-                            throw new IllegalArgumentException("Invalid 
primitive type: '" + paramType + "'.");
-                        }
-                    } else {
-                        if (isArrayType) {
-                            paramTypes[i] = _ClassUtil.forName("[L" + 
paramType + ";");
-                        } else {
-                            paramTypes[i] = _ClassUtil.forName(paramType);
-                        }
-                    }
-                }
-            }
-
-            return clazz.getMethod(methodName, paramTypes);
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtils.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtils.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtils.java
new file mode 100644
index 0000000..8222f6e
--- /dev/null
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtils.java
@@ -0,0 +1,117 @@
+/*
+ * 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.
+ */
+
+package org.apache.freemarker.servlet.jsp;
+
+import java.lang.reflect.Method;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.freemarker.core.util._ClassUtils;
+import org.apache.freemarker.core.util._StringUtils;
+
+final class TaglibMethodUtils {
+
+    private TaglibMethodUtils() {
+        // Not meant to be instantiated
+    }
+
+    private static final Pattern FUNCTION_SIGNATURE_PATTERN = 
+            
Pattern.compile("^([\\w\\.]+(\\s*\\[\\s*\\])?)\\s+([\\w]+)\\s*\\((.*)\\)$");
+    private static final Pattern FUNCTION_PARAMETER_PATTERN = 
+            Pattern.compile("^([\\w\\.]+)(\\s*\\[\\s*\\])?$");
+
+    /**
+     * Finds method by function signature string which is compliant with
+     * Tag Library function signature in Java Server Page (TM) Specification.
+     * A function signature example is as follows: {@code java.lang.String 
nickName( java.lang.String, int)}
+     * 
+     * @param clazz Class having the method.
+     * @param signature Java Server Page (TM) Specification compliant function 
signature string.
+     * @return method if found.
+     */
+    public static Method getMethodByFunctionSignature(Class clazz, String 
signature)
+            throws SecurityException, NoSuchMethodException, 
ClassNotFoundException {
+        Matcher m1 = FUNCTION_SIGNATURE_PATTERN.matcher(signature);
+
+        if (!m1.matches()) {
+            throw new IllegalArgumentException("Invalid function signature.");
+        }
+
+            String methodName = m1.group(3);
+            String params = m1.group(4).trim();
+            Class [] paramTypes = null;
+
+            if ("".equals(params)) {
+                paramTypes = new Class[0];
+            } else {
+                String [] paramsArray = _StringUtils.split(params, ',');
+                paramTypes = new Class[paramsArray.length];
+                String token = null;
+                String paramType = null;
+                boolean isPrimitive = false;
+                boolean isArrayType = false;
+                Matcher m2 = null;
+
+                for (int i = 0; i < paramsArray.length; i++) {
+                    token = paramsArray[i].trim();
+                    m2 = FUNCTION_PARAMETER_PATTERN.matcher(token);
+
+                    if (!m2.matches()) {
+                        throw new IllegalArgumentException("Invalid argument 
signature: '" + token + "'.");
+                    }
+
+                    paramType = m2.group(1);
+                    isPrimitive = (paramType.indexOf('.') == -1);
+                    isArrayType = (m2.group(2) != null);
+
+                    if (isPrimitive) {
+                        if ("byte".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? byte[].class : 
byte.class);
+                        } else if ("short".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? short[].class : 
short.class);
+                        } else if ("int".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? int[].class : 
int.class);
+                        } else if ("long".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? long[].class : 
long.class);
+                        } else if ("float".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? float[].class : 
float.class);
+                        } else if ("double".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? double[].class : 
double.class);
+                        } else if ("boolean".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? boolean[].class : 
boolean.class);
+                        } else if ("char".equals(paramType)) {
+                            paramTypes[i] = (isArrayType ? char[].class : 
char.class);
+                        } else {
+                            throw new IllegalArgumentException("Invalid 
primitive type: '" + paramType + "'.");
+                        }
+                    } else {
+                        if (isArrayType) {
+                            paramTypes[i] = _ClassUtils.forName("[L" + 
paramType + ";");
+                        } else {
+                            paramTypes[i] = _ClassUtils.forName(paramType);
+                        }
+                    }
+                }
+            }
+
+            return clazz.getMethod(methodName, paramTypes);
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/_FreeMarkerPageContext21.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/_FreeMarkerPageContext21.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/_FreeMarkerPageContext21.java
index 2500665..be9d58a 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/_FreeMarkerPageContext21.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/_FreeMarkerPageContext21.java
@@ -32,7 +32,7 @@ import javax.servlet.jsp.el.ExpressionEvaluator;
 import javax.servlet.jsp.el.VariableResolver;
 
 import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.util._ClassUtil;
+import org.apache.freemarker.core.util._ClassUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -111,7 +111,7 @@ public class _FreeMarkerPageContext21 extends 
FreeMarkerPageContext {
             } else {
                 throw new UnsupportedOperationException(
                         "Can not invoke an ELContext using a foreign 
JspApplicationContext (of class "
-                        + _ClassUtil.getShortClassNameOfObject(jspctx) + 
").\n" +
+                        + _ClassUtils.getShortClassNameOfObject(jspctx) + 
").\n" +
                         "Hint: The cause of this is often that you are trying 
to use JSTL tags/functions in FTL. "
                         + "In that case, know that that's not really suppored, 
and you are supposed to use FTL "
                         + "constrcuts instead, like #list instead of JSTL's 
forEach, etc.");

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilTest.java
 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilTest.java
deleted file mode 100644
index 5733abc..0000000
--- 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.freemarker.servlet.jsp;
-
-import static org.junit.Assert.*;
-
-import java.lang.reflect.Method;
-
-import org.apache.freemarker.servlet.jsp.TaglibMethodUtil;
-import org.junit.Test;
-
-public class TaglibMethodUtilTest {
-
-    @Test
-    public void testGetMethodByFunctionSignature() throws Exception {
-        Method expected = Functions.class.getMethod("plus", int.class, 
int.class);
-        String signature = "int plus(int, int)";
-        Method method = 
TaglibMethodUtil.getMethodByFunctionSignature(Functions.class, signature);
-        assertEquals(expected, method);
-
-        expected = Functions.class.getMethod("plus", double.class, 
double.class);
-        signature = "double  plus ( double , double )";
-        method = 
TaglibMethodUtil.getMethodByFunctionSignature(Functions.class, signature);
-        assertEquals(expected, method);
-
-        expected = Functions.class.getMethod("plus", String.class, 
String.class);
-        signature = "java.lang.String plus ( java.lang.String  
,java.lang.String  )";
-        method = 
TaglibMethodUtil.getMethodByFunctionSignature(Functions.class, signature);
-        assertEquals(expected, method);
-
-        expected = Functions.class.getMethod("plus", double[].class, 
double[].class);
-        signature = "double[] plus ( double[]  ,double []  )";
-        method = 
TaglibMethodUtil.getMethodByFunctionSignature(Functions.class, signature);
-        assertEquals(expected, method);
-
-        expected = Functions.class.getMethod("plus", String[].class, 
String[].class);
-        signature = "java.lang.String [] plus ( java.lang.String[]  
,java.lang.String []  )";
-        method = 
TaglibMethodUtil.getMethodByFunctionSignature(Functions.class, signature);
-        assertEquals(expected, method);
-
-        expected = Functions.class.getMethod("sum", double[].class);
-        signature = "double sum ( double[]  )";
-        method = 
TaglibMethodUtil.getMethodByFunctionSignature(Functions.class, signature);
-        assertEquals(expected, method);
-    }
-
-    @SuppressWarnings("unused")
-    private static class Functions {
-
-        public static int plus(int a, int b) {
-            return a + b;
-        }
-
-        public static double plus(double a, double b) {
-            return a + b;
-        }
-
-        public static String plus(String a, String b) {
-            return a + b;
-        }
-
-        public static double [] plus(double [] a, double [] b) { 
-            double [] sum = new double[a.length];
-
-            for (int i = 0; i < a.length; i++) {
-                sum[i] = a[i] + b[i];
-            }
-
-            return sum;
-        }
-
-        public static String [] plus(String [] a, String [] b) { 
-            String [] joins = new String[a.length];
-
-            for (int i = 0; i < a.length; i++) {
-                joins[i] = a[i] + b[i];
-            }
-
-            return joins;
-        }
-
-        public static double sum(double [] a) { 
-            double sum = 0.0;
-            for (double i : a) {
-                sum += i;
-            }
-            return sum;
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilsTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilsTest.java
 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilsTest.java
new file mode 100644
index 0000000..fa341e5
--- /dev/null
+++ 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/TaglibMethodUtilsTest.java
@@ -0,0 +1,107 @@
+/*
+ * 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.
+ */
+
+package org.apache.freemarker.servlet.jsp;
+
+import static org.junit.Assert.*;
+
+import java.lang.reflect.Method;
+
+import org.junit.Test;
+
+public class TaglibMethodUtilsTest {
+
+    @Test
+    public void testGetMethodByFunctionSignature() throws Exception {
+        Method expected = Functions.class.getMethod("plus", int.class, 
int.class);
+        String signature = "int plus(int, int)";
+        Method method = 
TaglibMethodUtils.getMethodByFunctionSignature(Functions.class, signature);
+        assertEquals(expected, method);
+
+        expected = Functions.class.getMethod("plus", double.class, 
double.class);
+        signature = "double  plus ( double , double )";
+        method = 
TaglibMethodUtils.getMethodByFunctionSignature(Functions.class, signature);
+        assertEquals(expected, method);
+
+        expected = Functions.class.getMethod("plus", String.class, 
String.class);
+        signature = "java.lang.String plus ( java.lang.String  
,java.lang.String  )";
+        method = 
TaglibMethodUtils.getMethodByFunctionSignature(Functions.class, signature);
+        assertEquals(expected, method);
+
+        expected = Functions.class.getMethod("plus", double[].class, 
double[].class);
+        signature = "double[] plus ( double[]  ,double []  )";
+        method = 
TaglibMethodUtils.getMethodByFunctionSignature(Functions.class, signature);
+        assertEquals(expected, method);
+
+        expected = Functions.class.getMethod("plus", String[].class, 
String[].class);
+        signature = "java.lang.String [] plus ( java.lang.String[]  
,java.lang.String []  )";
+        method = 
TaglibMethodUtils.getMethodByFunctionSignature(Functions.class, signature);
+        assertEquals(expected, method);
+
+        expected = Functions.class.getMethod("sum", double[].class);
+        signature = "double sum ( double[]  )";
+        method = 
TaglibMethodUtils.getMethodByFunctionSignature(Functions.class, signature);
+        assertEquals(expected, method);
+    }
+
+    @SuppressWarnings("unused")
+    private static class Functions {
+
+        public static int plus(int a, int b) {
+            return a + b;
+        }
+
+        public static double plus(double a, double b) {
+            return a + b;
+        }
+
+        public static String plus(String a, String b) {
+            return a + b;
+        }
+
+        public static double [] plus(double [] a, double [] b) { 
+            double [] sum = new double[a.length];
+
+            for (int i = 0; i < a.length; i++) {
+                sum[i] = a[i] + b[i];
+            }
+
+            return sum;
+        }
+
+        public static String [] plus(String [] a, String [] b) { 
+            String [] joins = new String[a.length];
+
+            for (int i = 0; i < a.length; i++) {
+                joins[i] = a[i] + b[i];
+            }
+
+            return joins;
+        }
+
+        public static double sum(double [] a) { 
+            double sum = 0.0;
+            for (double i : a) {
+                sum += i;
+            }
+            return sum;
+        }
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeAccessorTag.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeAccessorTag.java
 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeAccessorTag.java
index d068204..49e071b 100644
--- 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeAccessorTag.java
+++ 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeAccessorTag.java
@@ -22,7 +22,7 @@ package org.apache.freemarker.servlet.jsp.taglibmembers;
 import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.SimpleTagSupport;
 
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 
 public abstract class AttributeAccessorTag extends SimpleTagSupport {
 
@@ -62,7 +62,7 @@ public abstract class AttributeAccessorTag extends 
SimpleTagSupport {
         if (scope.equals("application")) {
             return PageContext.APPLICATION_SCOPE;
         }
-        throw new IllegalArgumentException("Invalid scope name: " + 
_StringUtil.jQuote(scope));
+        throw new IllegalArgumentException("Invalid scope name: " + 
_StringUtils.jQuote(scope));
     }
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeInfoTag.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeInfoTag.java
 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeInfoTag.java
index 2d306a0..e8b6eea 100644
--- 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeInfoTag.java
+++ 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/taglibmembers/AttributeInfoTag.java
@@ -26,8 +26,8 @@ import javax.servlet.jsp.JspContext;
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.JspWriter;
 
-import org.apache.freemarker.core.util._DateUtil;
-import 
org.apache.freemarker.core.util._DateUtil.TrivialDateToISO8601CalendarFactory;
+import org.apache.freemarker.core.util._DateUtils;
+import 
org.apache.freemarker.core.util._DateUtils.TrivialDateToISO8601CalendarFactory;
 
 public class AttributeInfoTag extends AttributeAccessorTag {
 
@@ -41,8 +41,8 @@ public class AttributeInfoTag extends AttributeAccessorTag {
         
         final String formattedVal;
         if (attrVal instanceof Date) {
-            formattedVal = _DateUtil.dateToISO8601String((Date) attrVal, true, 
true, true, _DateUtil.ACCURACY_SECONDS,
-                    _DateUtil.UTC,
+            formattedVal = _DateUtils.dateToISO8601String((Date) attrVal, 
true, true, true, _DateUtils.ACCURACY_SECONDS,
+                    _DateUtils.UTC,
                     new TrivialDateToISO8601CalendarFactory());
         } else {
             formattedVal = String.valueOf(attrVal);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/Model2TesterServlet.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/Model2TesterServlet.java
 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/Model2TesterServlet.java
index 52cdf4b..c0e9739 100644
--- 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/Model2TesterServlet.java
+++ 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/Model2TesterServlet.java
@@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.apache.freemarker.servlet.FreemarkerServlet;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -109,7 +109,7 @@ public class Model2TesterServlet extends HttpServlet {
             final RequestDispatcher requestDispatcher = 
getServletContext().getNamedDispatcher(paramViewServlet);
             if (requestDispatcher == null) {
                 throw new ServletException("Can't find request dispatched for 
servlet name "
-                        + _StringUtil.jQuote(paramViewServlet) + ".");
+                        + _StringUtils.jQuote(paramViewServlet) + ".");
             }
             
             final HttpServletRequestWrapper viewReq = new 
HttpServletRequestWrapper(req) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/WebAppTestCase.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/WebAppTestCase.java
 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/WebAppTestCase.java
index 05138fd..01e6072 100644
--- 
a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/WebAppTestCase.java
+++ 
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/test/WebAppTestCase.java
@@ -36,7 +36,7 @@ import java.util.regex.Pattern;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.freemarker.test.ResourcesExtractor;
-import org.apache.freemarker.test.TestUtil;
+import org.apache.freemarker.test.TestUtils;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
 import org.eclipse.jetty.webapp.WebAppContext;
@@ -192,7 +192,7 @@ public class WebAppTestCase {
                 throw new IOException("Test resource not found: " + 
expectedResource);
             }
             try {
-                expected = TestUtil.removeTxtCopyrightComment(normalizeWS(
+                expected = TestUtils.removeTxtCopyrightComment(normalizeWS(
                         IOUtils.toString(in, StandardCharsets.UTF_8.name()),
                         compressWS));
             } finally {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-test-utils/src/main/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
----------------------------------------------------------------------
diff --git 
a/freemarker-test-utils/src/main/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
 
b/freemarker-test-utils/src/main/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
index 3b6ea39..3c03a87 100644
--- 
a/freemarker-test-utils/src/main/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
+++ 
b/freemarker-test-utils/src/main/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
@@ -81,7 +81,7 @@ public class CopyrightCommentRemoverTemplateLoader implements 
TemplateLoader {
         }
         try {
             String content = IOUtils.toString(reader);
-            return new 
StringReader(TestUtil.removeFTLCopyrightComment(content));
+            return new 
StringReader(TestUtils.removeFTLCopyrightComment(content));
         } finally {
             reader.close();
         }
@@ -95,7 +95,7 @@ public class CopyrightCommentRemoverTemplateLoader implements 
TemplateLoader {
             // Encoding then decosing in ISO-8859-1 is binary loseless
             String content = IOUtils.toString(in, 
StandardCharsets.ISO_8859_1.name());
             return new ReaderInputStream(
-                    new 
StringReader(TestUtil.removeFTLCopyrightComment(content)),
+                    new 
StringReader(TestUtils.removeFTLCopyrightComment(content)),
                     StandardCharsets.ISO_8859_1);
         } finally {
             in.close();

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ebb39b84/freemarker-test-utils/src/main/java/org/apache/freemarker/test/FileTestCase.java
----------------------------------------------------------------------
diff --git 
a/freemarker-test-utils/src/main/java/org/apache/freemarker/test/FileTestCase.java
 
b/freemarker-test-utils/src/main/java/org/apache/freemarker/test/FileTestCase.java
index 1d70d8c..c0adb72 100644
--- 
a/freemarker-test-utils/src/main/java/org/apache/freemarker/test/FileTestCase.java
+++ 
b/freemarker-test-utils/src/main/java/org/apache/freemarker/test/FileTestCase.java
@@ -29,7 +29,7 @@ import java.nio.charset.StandardCharsets;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.freemarker.core.util._NullArgumentException;
-import org.apache.freemarker.core.util._StringUtil;
+import org.apache.freemarker.core.util._StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,8 +68,8 @@ public abstract class FileTestCase extends TestCase {
     }
 
     private void multilineAssertEquals(String expected, String actual) {
-        String normExpected = _StringUtil.normalizeEOLs(expected);
-        final String normActual = _StringUtil.normalizeEOLs(actual);
+        String normExpected = _StringUtils.normalizeEOLs(expected);
+        final String normActual = _StringUtils.normalizeEOLs(actual);
         
         // Ignore final line-break difference:
         if (normActual.endsWith("\n") && !normExpected.endsWith("\n")) {
@@ -117,7 +117,7 @@ public abstract class FileTestCase extends TestCase {
         if (resource == null) {
             throw new FileNotFoundException("Class-loader resource not found 
for: "
                     + "baseClass: " + baseClass.getName() + "; "
-                    + "resourcePath (shown quoted): " + 
_StringUtil.jQuote(resourcePath));
+                    + "resourcePath (shown quoted): " + 
_StringUtils.jQuote(resourcePath));
         }
         return resource;
     }
@@ -205,7 +205,7 @@ public abstract class FileTestCase extends TestCase {
     }
     
     protected String loadTestTextResource(URL resource, Charset charset) 
throws IOException {
-        return TestUtil.removeTxtCopyrightComment(
+        return TestUtils.removeTxtCopyrightComment(
                 IOUtils.toString(resource, charset.name()));
     }
     

Reply via email to