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 2013/08/15 23:11:59 UTC

svn commit: r1514496 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/catalina/manager/ java/org/apache/catalina/manager/host/ java/org/apache/catalina/valves/ java/org/apache/coyote/ajp/ java/org/apache/coyote/http11/ java/org/apache/tomcat/util/http/ j...

Author: markt
Date: Thu Aug 15 21:11:58 2013
New Revision: 1514496

URL: http://svn.apache.org/r1514496
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55399
Have the message in the response line use the locale set for the response.

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java
    tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
    tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
    tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
    tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1514291,1514305,1514485-1514486

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -116,7 +116,8 @@ public final class HTMLManagerServlet ex
                       HttpServletResponse response)
         throws IOException, ServletException {
 
-        StringManager smClient = getStringManager(request);
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
         
         // Identify the request parameters that we need
         // By obtaining the command from the pathInfo, per-command security can
@@ -175,7 +176,8 @@ public final class HTMLManagerServlet ex
                       HttpServletResponse response)
         throws IOException, ServletException {
 
-        StringManager smClient = getStringManager(request);
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
 
         // Identify the request parameters that we need
         // By obtaining the command from the pathInfo, per-command security can

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -319,7 +319,8 @@ public class ManagerServlet extends Http
                       HttpServletResponse response)
         throws IOException, ServletException {
 
-        StringManager smClient = getStringManager(request);
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
 
         // Identify the request parameters that we need
         String command = request.getPathInfo();
@@ -406,7 +407,8 @@ public class ManagerServlet extends Http
                       HttpServletResponse response)
         throws IOException, ServletException {
 
-        StringManager smClient = getStringManager(request);
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
 
         // Identify the request parameters that we need
         String command = request.getPathInfo();
@@ -1575,6 +1577,11 @@ public class ManagerServlet extends Http
     }
 
 
+    /**
+     * @deprecated Use {@link StringManager#getManager(String, Enumeration)}.
+     *             This method will be removed in Tomcat 8.
+     */
+    @Deprecated
     protected StringManager getStringManager(HttpServletRequest req) {
         Enumeration<Locale> requestedLocales = req.getLocales();
         while (requestedLocales.hasMoreElements()) {

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -80,7 +80,8 @@ public final class HTMLHostManagerServle
                       HttpServletResponse response)
         throws IOException, ServletException {
 
-        StringManager smClient = getStringManager(request);
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
 
         // Identify the request parameters that we need
         String command = request.getPathInfo();
@@ -120,7 +121,8 @@ public final class HTMLHostManagerServle
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
 
-        StringManager smClient = getStringManager(request);
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
 
         // Identify the request parameters that we need
         String command = request.getPathInfo();

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -212,7 +212,8 @@ public class HostManagerServlet
                       HttpServletResponse response)
         throws IOException, ServletException {
 
-        StringManager smClient = getStringManager(request);
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
 
         // Identify the request parameters that we need
         String command = request.getPathInfo();
@@ -709,6 +710,11 @@ public class HostManagerServlet
     }
 
 
+    /**
+     * @deprecated Use {@link StringManager#getManager(String, Enumeration)}.
+     *             This method will be removed in Tomcat 8.
+     */
+    @Deprecated
     protected StringManager getStringManager(HttpServletRequest req) {
         Enumeration<Locale> requestedLocales = req.getLocales();
         while (requestedLocales.hasMoreElements()) {

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java Thu Aug 15 21:11:58 2013
@@ -30,6 +30,7 @@ import org.apache.catalina.connector.Res
 import org.apache.catalina.util.RequestUtil;
 import org.apache.catalina.util.ServerInfo;
 import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.tomcat.util.res.StringManager;
 
 /**
  * <p>Implementation of a Valve that outputs HTML error pages.</p>
@@ -182,8 +183,11 @@ public class ErrorReportValve extends Va
         // Do nothing if there is no report for the specified status code and
         // no error message provided
         String report = null;
+        StringManager smClient = StringManager.getManager(
+                Constants.Package, request.getLocales());
+        response.setLocale(smClient.getLocale());
         try {
-            report = sm.getString("http." + statusCode);
+            report = smClient.getString("http." + statusCode);
         } catch (Throwable t) {
             ExceptionUtils.handleThrowable(t);
         }
@@ -191,7 +195,7 @@ public class ErrorReportValve extends Va
             if (message.length() == 0) {
                 return;
             } else {
-                report = sm.getString("errorReportValve.noDescription");
+                report = smClient.getString("errorReportValve.noDescription");
             }
         }
 
@@ -199,29 +203,29 @@ public class ErrorReportValve extends Va
 
         sb.append("<html><head><title>");
         sb.append(ServerInfo.getServerInfo()).append(" - ");
-        sb.append(sm.getString("errorReportValve.errorReport"));
+        sb.append(smClient.getString("errorReportValve.errorReport"));
         sb.append("</title>");
         sb.append("<style><!--");
         sb.append(org.apache.catalina.util.TomcatCSS.TOMCAT_CSS);
         sb.append("--></style> ");
         sb.append("</head><body>");
         sb.append("<h1>");
-        sb.append(sm.getString("errorReportValve.statusHeader",
+        sb.append(smClient.getString("errorReportValve.statusHeader",
                                "" + statusCode, message)).append("</h1>");
         sb.append("<HR size=\"1\" noshade=\"noshade\">");
         sb.append("<p><b>type</b> ");
         if (throwable != null) {
-            sb.append(sm.getString("errorReportValve.exceptionReport"));
+            sb.append(smClient.getString("errorReportValve.exceptionReport"));
         } else {
-            sb.append(sm.getString("errorReportValve.statusReport"));
+            sb.append(smClient.getString("errorReportValve.statusReport"));
         }
         sb.append("</p>");
         sb.append("<p><b>");
-        sb.append(sm.getString("errorReportValve.message"));
+        sb.append(smClient.getString("errorReportValve.message"));
         sb.append("</b> <u>");
         sb.append(message).append("</u></p>");
         sb.append("<p><b>");
-        sb.append(sm.getString("errorReportValve.description"));
+        sb.append(smClient.getString("errorReportValve.description"));
         sb.append("</b> <u>");
         sb.append(report);
         sb.append("</u></p>");
@@ -230,7 +234,7 @@ public class ErrorReportValve extends Va
 
             String stackTrace = getPartialServletStackTrace(throwable);
             sb.append("<p><b>");
-            sb.append(sm.getString("errorReportValve.exception"));
+            sb.append(smClient.getString("errorReportValve.exception"));
             sb.append("</b> <pre>");
             sb.append(RequestUtil.filter(stackTrace));
             sb.append("</pre></p>");
@@ -240,7 +244,7 @@ public class ErrorReportValve extends Va
             while (rootCause != null && (loops < 10)) {
                 stackTrace = getPartialServletStackTrace(rootCause);
                 sb.append("<p><b>");
-                sb.append(sm.getString("errorReportValve.rootCause"));
+                sb.append(smClient.getString("errorReportValve.rootCause"));
                 sb.append("</b> <pre>");
                 sb.append(RequestUtil.filter(stackTrace));
                 sb.append("</pre></p>");
@@ -250,9 +254,9 @@ public class ErrorReportValve extends Va
             }
 
             sb.append("<p><b>");
-            sb.append(sm.getString("errorReportValve.note"));
+            sb.append(smClient.getString("errorReportValve.note"));
             sb.append("</b> <u>");
-            sb.append(sm.getString("errorReportValve.rootCauseInLogs",
+            sb.append(smClient.getString("errorReportValve.rootCauseInLogs",
                                    ServerInfo.getServerInfo()));
             sb.append("</u></p>");
 

Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Thu Aug 15 21:11:58 2013
@@ -949,7 +949,8 @@ public abstract class AbstractAjpProcess
             message = response.getMessage();
         }
         if (message == null){
-            message = HttpMessages.getMessage(response.getStatus());
+            message = HttpMessages.getInstance(
+                    response.getLocale()).getMessage(response.getStatus());
         }
         if (message == null) {
             // mod_jk + httpd 2.x fails with a null status message - bug 45026

Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java Thu Aug 15 21:11:58 2013
@@ -354,7 +354,8 @@ public abstract class AbstractOutputBuff
             message = response.getMessage();
         }
         if (message == null) {
-            write(HttpMessages.getMessage(status)); 
+            write(HttpMessages.getInstance(
+                    response.getLocale()).getMessage(status));
         } else {
             write(message);
         }

Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java Thu Aug 15 21:11:58 2013
@@ -63,7 +63,7 @@ public class InternalAprOutputBuffer ext
         finished = false;
 
         // Cause loading of HttpMessages
-        HttpMessages.getMessage(200);
+        HttpMessages.getInstance(response.getLocale()).getMessage(200);
 
     }
 

Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java Thu Aug 15 21:11:58 2013
@@ -61,7 +61,7 @@ public class InternalNioOutputBuffer ext
         finished = false;
         
         // Cause loading of HttpMessages
-        HttpMessages.getMessage(200);
+        HttpMessages.getInstance(response.getLocale()).getMessage(200);
 
     }
 

Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java Thu Aug 15 21:11:58 2013
@@ -16,6 +16,10 @@
  */
 package org.apache.tomcat.util.http;
 
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 import org.apache.tomcat.util.res.StringManager;
 
 /**
@@ -28,14 +32,24 @@ import org.apache.tomcat.util.res.String
  * @author costin@eng.sun.com
  */
 public class HttpMessages {
+
+    private static final Map<Locale,HttpMessages> instances =
+            new ConcurrentHashMap<Locale, HttpMessages>();
+
+    private static final HttpMessages DEFAULT = getInstance(Locale.getDefault());
+
     // XXX move message resources in this package
-    protected static final StringManager sm =
-        StringManager.getManager("org.apache.tomcat.util.http.res");
+    private final StringManager sm;
+
+    private String st_200 = null;
+    private String st_302 = null;
+    private String st_400 = null;
+    private String st_404 = null;
+
+    private HttpMessages(StringManager sm) {
+        this.sm = sm;
+    }
 
-    static String st_200=null;
-    static String st_302=null;
-    static String st_400=null;
-    static String st_404=null;
 
     /** Get the status string associated with a status code.
      *  No I18N - return the messages defined in the HTTP spec.
@@ -45,36 +59,53 @@ public class HttpMessages {
      *  Common messages are cached.
      *
      */
-    public static String getMessage( int status ) {
+    public String getMessage(int status) {
         // method from Response.
 
         // Does HTTP requires/allow international messages or
         // are pre-defined? The user doesn't see them most of the time
         switch( status ) {
         case 200:
-            if( st_200==null ) {
-                st_200=sm.getString( "sc.200");
+            if(st_200 == null ) {
+                st_200 = sm.getString("sc.200");
             }
             return st_200;
         case 302:
-            if( st_302==null ) {
-                st_302=sm.getString( "sc.302");
+            if(st_302 == null ) {
+                st_302 = sm.getString("sc.302");
             }
             return st_302;
         case 400:
-            if( st_400==null ) {
-                st_400=sm.getString( "sc.400");
+            if(st_400 == null ) {
+                st_400 = sm.getString("sc.400");
             }
             return st_400;
         case 404:
-            if( st_404==null ) {
-                st_404=sm.getString( "sc.404");
+            if(st_404 == null ) {
+                st_404 = sm.getString("sc.404");
             }
             return st_404;
         }
         return sm.getString("sc."+ status);
     }
 
+
+    public static HttpMessages getInstance(Locale locale) {
+        HttpMessages result = instances.get(locale);
+        if (result == null) {
+            StringManager sm = StringManager.getManager(
+                    "org.apache.tomcat.util.http.res", locale);
+            if (Locale.getDefault().equals(sm.getLocale())) {
+                result = DEFAULT;
+            } else {
+                result = new HttpMessages(sm);
+            }
+            instances.put(locale, result);
+        }
+        return result;
+    }
+
+
     /**
      * Filter the specified message string for characters that are sensitive
      * in HTML.  This avoids potential attacks caused by including JavaScript

Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java Thu Aug 15 21:11:58 2013
@@ -18,6 +18,7 @@
 package org.apache.tomcat.util.res;
 
 import java.text.MessageFormat;
+import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Locale;
 import java.util.Map;
@@ -208,4 +209,27 @@ public class StringManager {
         }
         return mgr;
     }
+
+    /**
+     * Retrieve the StringManager for a list of Locales. The first StringManager
+     * found will be returned.
+     *
+     * @param requestedLocales the list of Locales
+     *
+     * @return the found StringManager or the default StringManager
+     */
+    public static StringManager getManager(String packageName,
+            Enumeration<Locale> requestedLocales) {
+        while (requestedLocales.hasMoreElements()) {
+            Locale locale = requestedLocales.nextElement();
+            StringManager result = getManager(packageName, locale);
+            if (result.getLocale().equals(locale)) {
+                return result;
+            }
+        }
+        // Return the default
+        return getManager(packageName);
+    }
+
+
 }

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Aug 15 21:11:58 2013
@@ -137,6 +137,10 @@
         Ensure that <code>java.lang.VirtualMachineError</code>s are not
         swallowed when using the HTTP or AJP NIO connectors. (markt)
       </fix>
+      <fix>
+        <bug>55399</bug>: Use the response locale to select the language to use
+        for the status message in the HTTP response. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">



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