diff --git a/org.springframework.aop/src/test/java/org/springframework/aop/framework/ProxyFactoryTests.java b/org.springframework.aop/src/test/java/org/springframework/aop/framework/ProxyFactoryTests.java index dd4c9ef091..74d00a7551 100644 --- a/org.springframework.aop/src/test/java/org/springframework/aop/framework/ProxyFactoryTests.java +++ b/org.springframework.aop/src/test/java/org/springframework/aop/framework/ProxyFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 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. @@ -16,12 +16,14 @@ package org.springframework.aop.framework; - import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.*; import java.lang.reflect.Method; +import javax.swing.*; +import javax.accessibility.Accessible; + import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.junit.Test; @@ -310,6 +312,15 @@ public final class ProxyFactoryTests { assertTrue(proxy instanceof TestBean); } + @Test + public void testExclusionOfNonPublicInterfaces() { + JFrame frame = new JFrame(); + ProxyFactory proxyFactory = new ProxyFactory(frame); + Object proxy = proxyFactory.getProxy(); + assertTrue(proxy instanceof RootPaneContainer); + assertTrue(proxy instanceof Accessible); + } + public static class Concrete { @@ -317,43 +328,36 @@ public final class ProxyFactoryTests { } } -} + @SuppressWarnings("serial") + private static class CountingBeforeAdvice extends MethodCounter implements MethodBeforeAdvice { -/** - * Simple before advice example that we can use for counting checks. - * - * @author Rod Johnson - */ -@SuppressWarnings("serial") -class CountingBeforeAdvice extends MethodCounter implements MethodBeforeAdvice { - - public void before(Method m, Object[] args, Object target) throws Throwable { - count(m); + public void before(Method m, Object[] args, Object target) throws Throwable { + count(m); + } } -} + @SuppressWarnings("serial") + private static class TimestampIntroductionInterceptor extends DelegatingIntroductionInterceptor + implements TimeStamped { -@SuppressWarnings("serial") -class TimestampIntroductionInterceptor extends DelegatingIntroductionInterceptor - implements TimeStamped { + private long ts; - private long ts; + public TimestampIntroductionInterceptor() { + } - public TimestampIntroductionInterceptor() { - } + public TimestampIntroductionInterceptor(long ts) { + this.ts = ts; + } - public TimestampIntroductionInterceptor(long ts) { - this.ts = ts; - } - - public void setTime(long ts) { - this.ts = ts; - } + public void setTime(long ts) { + this.ts = ts; + } - public long getTimeStamp() { - return ts; + public long getTimeStamp() { + return ts; + } } } diff --git a/org.springframework.core/src/main/java/org/springframework/util/ClassUtils.java b/org.springframework.core/src/main/java/org/springframework/util/ClassUtils.java index 349a13a283..269d86b90b 100644 --- a/org.springframework.core/src/main/java/org/springframework/util/ClassUtils.java +++ b/org.springframework.core/src/main/java/org/springframework/util/ClassUtils.java @@ -948,7 +948,8 @@ public abstract class ClassUtils { while (clazz != null) { Class[] ifcs = clazz.getInterfaces(); for (Class ifc : ifcs) { - if (!interfaces.contains(ifc) && (classLoader == null || isVisible(ifc, classLoader))) { + if (!interfaces.contains(ifc) && Modifier.isPublic(ifc.getModifiers()) && + (classLoader == null || isVisible(ifc, classLoader))) { interfaces.add(ifc); } }