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 2018/02/09 14:04:42 UTC
svn commit: r1823658 - in /tomcat/trunk: java/org/apache/catalina/
java/org/apache/catalina/core/ java/org/apache/catalina/mbeans/
java/org/apache/catalina/startup/ java/org/apache/catalina/util/
test/org/apache/tomcat/unittest/
Author: markt
Date: Fri Feb 9 14:04:42 2018
New Revision: 1823658
URL: http://svn.apache.org/viewvc?rev=1823658&view=rev
Log:
Refactor the code that searches for a matching error page by working up the class hierarchy of an exception type to ErrorPageSupport to enable re-use.
Modified:
tomcat/trunk/java/org/apache/catalina/Context.java
tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java
tomcat/trunk/java/org/apache/catalina/mbeans/ContextMBean.java
tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java
tomcat/trunk/java/org/apache/catalina/util/ErrorPageSupport.java
tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java
Modified: tomcat/trunk/java/org/apache/catalina/Context.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Context.java?rev=1823658&r1=1823657&r2=1823658&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Context.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Context.java Fri Feb 9 14:04:42 2018
@@ -969,14 +969,31 @@ public interface Context extends Contain
/**
+ * @param exceptionType Exception type to look up
+ *
* @return the error page entry for the specified Java exception type,
- * if any; otherwise return <code>null</code>.
+ * if any; otherwise return {@code null}.
*
- * @param exceptionType Exception type to look up
+ * @deprecated Unused. Will be removed in Tomcat 10.
+ * Use {@link #findErrorPage(Throwable)} instead.
*/
+ @Deprecated
public ErrorPage findErrorPage(String exceptionType);
+ /**
+ * Find and return the ErrorPage instance for the specified exception's
+ * class, or an ErrorPage instance for the closest superclass for which
+ * there is such a definition. If no associated ErrorPage instance is
+ * found, return <code>null</code>.
+ *
+ * @param throwable The exception type for which to find an ErrorPage
+ *
+ * @return the error page entry for the specified Java exception type,
+ * if any; otherwise return {@code null}.
+ */
+ public ErrorPage findErrorPage(Throwable throwable);
+
/**
* @return the set of defined error pages for all specified error codes
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1823658&r1=1823657&r2=1823658&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Fri Feb 9 14:04:42 2018
@@ -3278,17 +3278,18 @@ public class StandardContext extends Con
}
- /**
- * Return the error page entry for the specified Java exception type,
- * if any; otherwise return <code>null</code>.
- *
- * @param exceptionType Exception type to look up
- */
@Override
+ @Deprecated
public ErrorPage findErrorPage(String exceptionType) {
return errorPageSupport.find(exceptionType);
}
+
+ @Override
+ public ErrorPage findErrorPage(Throwable exceptionType) {
+ return errorPageSupport.find(exceptionType);
+ }
+
/**
* Return the set of defined error pages for all specified error codes
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java?rev=1823658&r1=1823657&r2=1823658&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java Fri Feb 9 14:04:42 2018
@@ -293,9 +293,9 @@ final class StandardHostValve extends Va
return;
}
- ErrorPage errorPage = findErrorPage(context, throwable);
+ ErrorPage errorPage = context.findErrorPage(throwable);
if ((errorPage == null) && (realError != throwable)) {
- errorPage = findErrorPage(context, realError);
+ errorPage = context.findErrorPage(realError);
}
if (errorPage != null) {
@@ -397,40 +397,6 @@ final class StandardHostValve extends Va
// Report our failure to process this custom page
container.getLogger().error("Exception Processing " + errorPage, t);
return false;
-
}
}
-
-
- /**
- * Find and return the ErrorPage instance for the specified exception's
- * class, or an ErrorPage instance for the closest superclass for which
- * there is such a definition. If no associated ErrorPage instance is
- * found, return <code>null</code>.
- *
- * @param context The Context in which to search
- * @param exception The exception for which to find an ErrorPage
- */
- private static ErrorPage findErrorPage
- (Context context, Throwable exception) {
-
- if (exception == null) {
- return null;
- }
- Class<?> clazz = exception.getClass();
- String name = clazz.getName();
- while (!Object.class.equals(clazz)) {
- ErrorPage errorPage = context.findErrorPage(name);
- if (errorPage != null) {
- return errorPage;
- }
- clazz = clazz.getSuperclass();
- if (clazz == null) {
- break;
- }
- name = clazz.getName();
- }
- return null;
-
- }
}
Modified: tomcat/trunk/java/org/apache/catalina/mbeans/ContextMBean.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/ContextMBean.java?rev=1823658&r1=1823657&r2=1823658&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mbeans/ContextMBean.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mbeans/ContextMBean.java Fri Feb 9 14:04:42 2018
@@ -88,11 +88,28 @@ public class ContextMBean extends BaseCa
* @param exceptionType Exception type to look up
* @return a string representation of the error page
* @throws MBeanException propagated from the managed resource access
+ * @deprecated Unused. Will be removed in Tomcat 10.
+ * Use {@link #findErrorPage(Throwable)} instead.
*/
+ @Deprecated
public String findErrorPage(String exceptionType) throws MBeanException {
Context context = doGetManagedResource();
return context.findErrorPage(exceptionType).toString();
}
+
+
+ /**
+ * Return the error page entry for the specified Java exception type,
+ * if any; otherwise return <code>null</code>.
+ *
+ * @param exceptionType Exception type to look up
+ * @return a string representation of the error page
+ * @throws MBeanException propagated from the managed resource access
+ */
+ public String findErrorPage(Throwable exceptionType) throws MBeanException {
+ Context context = doGetManagedResource();
+ return context.findErrorPage(exceptionType).toString();
+ }
/**
Modified: tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java?rev=1823658&r1=1823657&r2=1823658&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/FailedContext.java Fri Feb 9 14:04:42 2018
@@ -510,6 +510,8 @@ public class FailedContext extends Lifec
@Override
public ErrorPage findErrorPage(String exceptionType) { return null; }
@Override
+ public ErrorPage findErrorPage(Throwable throwable) { return null; }
+ @Override
public ErrorPage[] findErrorPages() { return null; }
@Override
public void removeErrorPage(ErrorPage errorPage) { /* NO-OP */ }
Modified: tomcat/trunk/java/org/apache/catalina/util/ErrorPageSupport.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/ErrorPageSupport.java?rev=1823658&r1=1823657&r2=1823658&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/ErrorPageSupport.java (original)
+++ tomcat/trunk/java/org/apache/catalina/util/ErrorPageSupport.java Fri Feb 9 14:04:42 2018
@@ -61,11 +61,44 @@ public class ErrorPageSupport {
}
+ /**
+ * Find the ErrorPage, if any, for the named exception type.
+ *
+ * @param exceptionType The fully qualified class name of the exception type
+ *
+ * @return The ErrorPage for the named exception type, or {@code null} if
+ * none is configured
+ *
+ * @deprecated Unused. Will be removed in Tomcat 10.
+ * Use {@link #find(Throwable)} instead.
+ */
+ @Deprecated
public ErrorPage find(String exceptionType) {
return exceptionPages.get(exceptionType);
}
+ public ErrorPage find(Throwable exceptionType) {
+ if (exceptionType == null) {
+ return null;
+ }
+ Class<?> clazz = exceptionType.getClass();
+ String name = clazz.getName();
+ while (!Object.class.equals(clazz)) {
+ ErrorPage errorPage = exceptionPages.get(name);
+ if (errorPage != null) {
+ return errorPage;
+ }
+ clazz = clazz.getSuperclass();
+ if (clazz == null) {
+ break;
+ }
+ name = clazz.getName();
+ }
+ return null;
+ }
+
+
public ErrorPage[] findAll() {
Set<ErrorPage> errorPages = new HashSet<>();
errorPages.addAll(exceptionPages.values());
Modified: tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java?rev=1823658&r1=1823657&r2=1823658&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/unittest/TesterContext.java Fri Feb 9 14:04:42 2018
@@ -811,6 +811,11 @@ public class TesterContext implements Co
}
@Override
+ public ErrorPage findErrorPage(Throwable exceptionType) {
+ return null;
+ }
+
+ @Override
public ErrorPage[] findErrorPages() {
return null;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org