You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2021/07/27 22:37:45 UTC

[wicket] branch wicket-9.x updated (5256d3c -> 6c88207)

This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a change to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git.


    from 5256d3c  Fix javadoc errors
     new b1c2d67  WICKET-6908 wrap exceptions for log data
     new 6c88207  WICKET-6908 detach all handlers

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../request/handler/logger/ListenerLogData.java    | 79 +++++--------------
 .../core/request/handler/logger/PageLogData.java   | 27 ++++---
 .../handler/logger/ListenerLogDataTest.java        | 92 ++++++++++++++++++++++
 .../wicket/request/RequestHandlerExecutor.java     | 16 ++--
 4 files changed, 136 insertions(+), 78 deletions(-)
 create mode 100644 wicket-core/src/test/java/org/apache/wicket/core/request/handler/logger/ListenerLogDataTest.java

[wicket] 01/02: WICKET-6908 wrap exceptions for log data

Posted by sv...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit b1c2d67d656970111407d384feabda87050b8ecd
Author: Sven Meier <sv...@apache.org>
AuthorDate: Mon Jul 26 21:37:01 2021 +0200

    WICKET-6908 wrap exceptions for log data
---
 .../request/handler/logger/ListenerLogData.java    | 79 +++++--------------
 .../core/request/handler/logger/PageLogData.java   | 27 ++++---
 .../handler/logger/ListenerLogDataTest.java        | 92 ++++++++++++++++++++++
 3 files changed, 125 insertions(+), 73 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ListenerLogData.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ListenerLogData.java
index c0f4165..da4887b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ListenerLogData.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/ListenerLogData.java
@@ -35,9 +35,9 @@ public class ListenerLogData extends PageLogData
 	private final Class<? extends IRequestableComponent> componentClass;
 	private final String componentPath;
 	private final Integer behaviorIndex;
-	private Class<? extends Behavior> behaviorClass;
-	private Class<? extends IRequestableComponent> submittingComponentClass;
-	private String submittingComponentPath;
+	private final Class<? extends Behavior> behaviorClass;
+	private final Class<? extends IRequestableComponent> submittingComponentClass;
+	private final String submittingComponentPath;
 
 	/**
 	 * Construct.
@@ -48,68 +48,24 @@ public class ListenerLogData extends PageLogData
 	public ListenerLogData(IPageAndComponentProvider pageAndComponentProvider, Integer behaviorIndex)
 	{
 		super(pageAndComponentProvider);
-		componentClass = tryToGetComponentClass(pageAndComponentProvider);
-		componentPath = tryToGetComponentPath(pageAndComponentProvider);
+
 		this.behaviorIndex = behaviorIndex;
-		if (behaviorIndex != null && componentClass != null)
+
+		componentClass = optional(() -> pageAndComponentProvider.getComponent().getClass());
+		componentPath = optional(() -> pageAndComponentProvider.getComponentPath());
+
+		if (behaviorIndex != null)
 		{
-			try
-			{
-				behaviorClass = pageAndComponentProvider.getComponent()
+			behaviorClass = optional(() -> pageAndComponentProvider.getComponent()
 					.getBehaviorById(behaviorIndex)
-					.getClass();
-			}
-			catch (Exception ignore)
-			{
-				behaviorClass = null;
-			}
+					.getClass());
 		}
 		else
 		{
 			behaviorClass = null;
 		}
 		
-		final Component formSubmitter = tryToGetFormSubmittingComponent(pageAndComponentProvider);
-		if (formSubmitter != null)
-		{
-			submittingComponentClass = formSubmitter.getClass();
-			submittingComponentPath = formSubmitter.getPageRelativePath();
-		}
-	}
-
-	private static Class<? extends IRequestableComponent> tryToGetComponentClass(
-		IPageAndComponentProvider pageAndComponentProvider)
-	{
-		try
-		{
-			return pageAndComponentProvider.getComponent().getClass();
-		}
-		catch (Exception e)
-		{
-			// getComponent might fail if the page does not exist (ie session timeout)
-			return null;
-		}
-	}
-
-
-	private static String tryToGetComponentPath(IPageAndComponentProvider pageAndComponentProvider)
-	{
-		try
-		{
-			return pageAndComponentProvider.getComponentPath();
-		}
-		catch (Exception e)
-		{
-			// getComponentPath might fail if the page does not exist (ie session timeout)
-			return null;
-		}
-	}
-
-	private static Component tryToGetFormSubmittingComponent(
-		IPageAndComponentProvider pageAndComponentProvider)
-	{
-		try
-		{
+		final Component formSubmitter = optional(() -> {
 			final IRequestableComponent component = pageAndComponentProvider.getComponent();
 			if (component instanceof Form)
 			{
@@ -117,11 +73,14 @@ public class ListenerLogData extends PageLogData
 				return submitter instanceof Component ? (Component)submitter : null;
 			}
 			return null;
-		}
-		catch (Exception e)
+		});
+		if (formSubmitter != null)
 		{
-			// getComponent might fail if the page does not exist (ie session timeout)
-			return null;
+			submittingComponentClass = formSubmitter.getClass();
+			submittingComponentPath = formSubmitter.getPageRelativePath();
+		} else {
+			submittingComponentClass = null;
+			submittingComponentPath = null;
 		}
 	}
 
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java
index fd3b53f..e27d1da 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/PageLogData.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.core.request.handler.logger;
 
+import java.util.function.Supplier;
+
 import org.apache.wicket.Page;
 import org.apache.wicket.core.request.handler.IPageClassRequestHandler;
 import org.apache.wicket.core.request.handler.IPageProvider;
@@ -46,21 +48,20 @@ public class PageLogData implements ILogData
 	 */
 	public PageLogData(IPageProvider pageProvider)
 	{
-		pageClass = tryToGetPageClass(pageProvider);
-		pageId = pageProvider.getPageId();
-		pageParameters = pageProvider.getPageParameters();
-		renderCount = pageProvider.getRenderCount();
+		pageId = optional(pageProvider::getPageId);
+		renderCount = optional(pageProvider::getRenderCount);
+		pageClass = optional(pageProvider::getPageClass);
+		pageParameters = optional(pageProvider::getPageParameters);
 	}
 
-	private static Class<? extends IRequestablePage> tryToGetPageClass(IPageProvider pageProvider)
-	{
-		try
-		{
-			return pageProvider.getPageClass();
-		}
-		catch (Exception e)
-		{
-			// getPageClass might fail if the page does not exist (ie session timeout)
+	/**
+	 * Wrapper for optional values that might fail if the page does not exist
+	 * (i.e. session timeout).
+	 */
+	protected <T> T optional(Supplier<T> function) {
+		try {
+			return function.get();
+		} catch (Exception ex) {
 			return null;
 		}
 	}
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/handler/logger/ListenerLogDataTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/logger/ListenerLogDataTest.java
new file mode 100644
index 0000000..88c4976
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/logger/ListenerLogDataTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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.wicket.core.request.handler.logger;
+
+import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
+import org.apache.wicket.protocol.http.PageExpiredException;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.junit.jupiter.api.Test;
+
+class ListenerLogDataTest {
+
+	/**
+	 * Test for WICKET-6908.
+	 */
+	@Test
+	void neverFails() {
+		IPageAndComponentProvider provider = new IPageAndComponentProvider() {
+			
+			@Override
+			public boolean wasExpired() {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public boolean hasPageInstance() {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public Integer getRenderCount() {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public PageParameters getPageParameters() throws PageExpiredException {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public IRequestablePage getPageInstance() throws PageExpiredException {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public Integer getPageId() {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public Class<? extends IRequestablePage> getPageClass() throws PageExpiredException {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public boolean doesProvideNewPage() {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public void detach() {
+			}
+			
+			@Override
+			public String getComponentPath() {
+				throw new IllegalStateException();
+			}
+			
+			@Override
+			public IRequestableComponent getComponent() {
+				throw new IllegalStateException();
+			}
+		};
+		
+		new ListenerLogData(provider, 1);
+	}
+}

[wicket] 02/02: WICKET-6908 detach all handlers

Posted by sv...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 6c88207455fb7e523b598c5fed760917ca6f00b5
Author: Sven Meier <sv...@apache.org>
AuthorDate: Mon Jul 26 22:03:05 2021 +0200

    WICKET-6908 detach all handlers
    
    even if one throws a RuntimeException
---
 .../apache/wicket/request/RequestHandlerExecutor.java    | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerExecutor.java b/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerExecutor.java
index f60b27a..47df808 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerExecutor.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerExecutor.java
@@ -132,21 +132,27 @@ public abstract class RequestHandlerExecutor
 			active = null;
 		}
 
+		RuntimeException rethrow = null;;
 		for (IRequestHandler handler : inactiveRequestHandlers)
 		{
 			try
 			{
 				detach(handler);
 			}
-			catch (RuntimeException exception)
-			{
-				throw exception;
-			}
 			catch (Exception exception)
 			{
-				log.error("Error detaching RequestHandler", exception);
+				if (rethrow == null && exception instanceof RuntimeException) {
+					rethrow = (RuntimeException) exception;
+				} else {
+					log.error("Error detaching RequestHandler", exception);
+				}
 			}
 		}
+		if (rethrow != null) {
+			// WICKET-6001 runtime exceptions are rethrown
+			// TODO obsolete should component-queueing be removed
+			throw rethrow;
+		}
 	}
 
 	/**