From 5d3f0b1f2c0a86d254190c5238b1d80a30f8ea9a Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 22 May 2020 16:12:49 +0200 Subject: [PATCH] Avoid ClassCastException on IllegalArgumentException from sync invocation Closes gh-25110 --- .../cache/interceptor/CacheAspectSupport.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java index 5a0f2fbe9cf7..e4cd5bac1383 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,6 +52,7 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; +import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; import org.springframework.util.function.SingletonSupplier; import org.springframework.util.function.SupplierUtils; @@ -381,9 +382,9 @@ private Object execute(final CacheOperationInvoker invoker, Method method, Cache return wrapCacheValue(method, cache.get(key, () -> unwrapReturnValue(invokeOperation(invoker)))); } catch (Cache.ValueRetrievalException ex) { - // The invoker wraps any Throwable in a ThrowableWrapper instance so we - // can just make sure that one bubbles up the stack. - throw (CacheOperationInvoker.ThrowableWrapper) ex.getCause(); + // Directly propagate ThrowableWrapper from the invoker, + // or potentially also an IllegalArgumentException etc. + ReflectionUtils.rethrowRuntimeException(ex.getCause()); } } else {