From 37ab0a5d8fdd1c40cb2374bceb84803bff4f9ded Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 14 Jun 2018 11:50:58 +0200 Subject: [PATCH] DATACMNS-1341 - ProxyUtils now detects JDK proxy target classes. --- .../org/springframework/data/util/ProxyUtils.java | 3 ++- .../data/util/ProxyUtilsUnitTests.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/util/ProxyUtils.java b/src/main/java/org/springframework/data/util/ProxyUtils.java index 2cbaeb754..c5f13c5cd 100644 --- a/src/main/java/org/springframework/data/util/ProxyUtils.java +++ b/src/main/java/org/springframework/data/util/ProxyUtils.java @@ -20,6 +20,7 @@ import lombok.experimental.UtilityClass; import java.util.List; import java.util.Map; +import org.springframework.aop.support.AopUtils; import org.springframework.core.io.support.SpringFactoriesLoader; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -75,7 +76,7 @@ public class ProxyUtils { Assert.notNull(source, "Source object must not be null!"); - return getUserClass(source.getClass()); + return getUserClass(AopUtils.getTargetClass(source)); } /** diff --git a/src/test/java/org/springframework/data/util/ProxyUtilsUnitTests.java b/src/test/java/org/springframework/data/util/ProxyUtilsUnitTests.java index 28bc06ba8..cb1d0cd0c 100644 --- a/src/test/java/org/springframework/data/util/ProxyUtilsUnitTests.java +++ b/src/test/java/org/springframework/data/util/ProxyUtilsUnitTests.java @@ -17,6 +17,8 @@ package org.springframework.data.util; import static org.assertj.core.api.Assertions.*; +import java.io.Serializable; + import org.junit.Test; import org.springframework.aop.framework.ProxyFactory; import org.springframework.data.util.ProxyUtils.ProxyDetector; @@ -50,6 +52,17 @@ public class ProxyUtilsUnitTests { assertThat(ProxyUtils.getUserClass(proxy)).isEqualTo(UserType.class); } + @Test // DATACMNS-1341 + public void detectsTargetTypeOfJdkProxy() { + + ProxyFactory factory = new ProxyFactory(); + factory.setTarget(new SomeTypeWithInterface()); + factory.setInterfaces(Serializable.class); + Object proxy = factory.getProxy(); + + assertThat(ProxyUtils.getUserClass(proxy)).isEqualTo(SomeTypeWithInterface.class); + } + static class SampleProxyDetector implements ProxyDetector { /* @@ -67,4 +80,6 @@ public class ProxyUtilsUnitTests { static class UserType {} static class AnotherSample {} + + static class SomeTypeWithInterface implements Serializable {} }