You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by th...@apache.org on 2023/01/19 03:19:16 UTC
[tapestry-5] 02/03: TAP5-2744: better exception message parsing in RequestErrorFilter
This is an automated email from the ASF dual-hosted git repository.
thiagohp pushed a commit to branch better-page-invalidation
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
commit c0f43d6201a550080bec0df3e0ac358809e7d1df
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
AuthorDate: Wed Jan 18 22:10:04 2023 -0300
TAP5-2744: better exception message parsing in RequestErrorFilter
---
.../internal/services/RequestErrorFilter.java | 28 ++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
index 63962a74d..d5c344512 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/RequestErrorFilter.java
@@ -2,12 +2,14 @@ package org.apache.tapestry5.internal.services;
import java.io.IOException;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.tapestry5.commons.services.InvalidationEventHub;
import org.apache.tapestry5.commons.util.DifferentClassVersionsException;
+import org.apache.tapestry5.corelib.pages.ExceptionReport;
import org.apache.tapestry5.http.Link;
import org.apache.tapestry5.http.services.Request;
import org.apache.tapestry5.http.services.RequestFilter;
@@ -31,7 +33,7 @@ public class RequestErrorFilter implements RequestFilter
private final ComponentEventLinkEncoder componentEventLinkEncoder;
private final ComponentInstantiatorSource componentInstantiatorSource;
private final static String QUERY_PARAMETER = "RequestErrorFilterRedirected";
- private final static Pattern CCE_PATTERN = Pattern.compile("((.*)\\scannot be cast to\\s(.*))");
+ private final static Pattern CCE_PATTERN = Pattern.compile("((.*)\\scannot be cast to (.*))(.*)");
public RequestErrorFilter(InternalRequestGlobals internalRequestGlobals, RequestExceptionHandler exceptionHandler,
@ComponentClasses InvalidationEventHub classesInvalidationHub, ComponentEventLinkEncoder componentEventLinkEncoder,
@@ -67,7 +69,8 @@ public class RequestErrorFilter implements RequestFilter
if (classToInvalidate != null)
{
- final List<String> classesToInvalidate = Arrays.asList(classToInvalidate);
+ final List<String> classesToInvalidate =
+ Arrays.asList(classToInvalidate, ExceptionReport.class.getName());
componentInstantiatorSource.invalidate(classesToInvalidate);
classesInvalidationHub.fireInvalidationEvent(classesToInvalidate);
@@ -103,7 +106,15 @@ public class RequestErrorFilter implements RequestFilter
Throwable exceptionToReport = attachNewCause(ex, internalRequestGlobals.getClassLoaderException());
- exceptionHandler.handleRequestException(exceptionToReport);
+ try
+ {
+ exceptionHandler.handleRequestException(exceptionToReport);
+ }
+ catch (Exception e)
+ {
+ classesInvalidationHub.fireInvalidationEvent(Collections.emptyList());
+ exceptionHandler.handleRequestException(exceptionToReport);
+ }
// We assume a reponse has been sent and there's no need to handle the request
// further.
@@ -125,9 +136,18 @@ public class RequestErrorFilter implements RequestFilter
}
else if (rootCause instanceof ClassCastException)
{
- final String message = rootCause.getMessage();
+ String message = rootCause.getMessage();
if (message != null)
{
+
+ // Handling both Java 8 and Java 11 messages
+ message = message.replace("class ", "");
+ final int index = message.indexOf(" (");
+ if (index > 0)
+ {
+ message = message.substring(0, index);
+ }
+
final Matcher matcher = CCE_PATTERN.matcher(message);
if (matcher.matches() && matcher.groupCount() >= 3)
{