You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jc...@apache.org on 2008/02/27 19:54:04 UTC
svn commit: r631675 - in /commons/proper/proxy/trunk/src:
main/java/org/apache/commons/proxy/
main/java/org/apache/commons/proxy/factory/util/
main/java/org/apache/commons/proxy/interceptor/
test/java/org/apache/commons/proxy/interceptor/ test/java/org...
Author: jcarman
Date: Wed Feb 27 10:54:01 2008
New Revision: 631675
URL: http://svn.apache.org/viewvc?rev=631675&view=rev
Log:
PROXY-8: Improve Proxy Serialization
Modified:
commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/Interceptor.java
commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java
commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/MethodFilter.java
commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestExecutorInterceptor.java
commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestFilteredInterceptor.java
commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestInterceptorChain.java
commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestMethodInterceptorAdapter.java
commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestDuckTypingInvoker.java
commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestInvocationHandlerAdapter.java
Modified: commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/Interceptor.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/Interceptor.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/Interceptor.java (original)
+++ commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/Interceptor.java Wed Feb 27 10:54:01 2008
@@ -17,13 +17,15 @@
package org.apache.commons.proxy;
+import java.io.Serializable;
+
/**
* "Intercepts" a method invocation.
*
* @author James Carman
* @since 1.0
*/
-public interface Interceptor
+public interface Interceptor extends Serializable
{
//**********************************************************************************************************************
// Other Methods
Modified: commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java (original)
+++ commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/factory/util/AbstractSubclassingProxyFactory.java Wed Feb 27 10:54:01 2008
@@ -101,28 +101,6 @@
}
/**
- * Helper method for instantiating a proxy object from its proxy class. Uses the default constructor.
- *
- * @param proxyClass the proxy class
- * @return a proxy object
- */
- protected static Object instantiate( Class proxyClass )
- {
- try
- {
- return proxyClass.newInstance();
- }
- catch( InstantiationException e )
- {
- throw new ProxyFactoryException("Unable to instantiate proxy object from proxy class.", e);
- }
- catch( IllegalAccessException e )
- {
- throw new ProxyFactoryException("Unable to instantiate proxy object from proxy class.", e);
- }
- }
-
- /**
* Returns the <code>proxyClasses</code> transformed into an array of only the interface classes.
* <p/>
* <b>Note</b>: This class will append {@link Serializable} to the end of the list if it's
Modified: commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/MethodFilter.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/MethodFilter.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/MethodFilter.java (original)
+++ commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/MethodFilter.java Wed Feb 27 10:54:01 2008
@@ -18,6 +18,7 @@
package org.apache.commons.proxy.interceptor;
import java.lang.reflect.Method;
+import java.io.Serializable;
/**
* A <code>MethodFilter</code> determines whether or not a method is accepted.
@@ -25,7 +26,7 @@
* @author James Carman
* @since 1.0
*/
-public interface MethodFilter
+public interface MethodFilter extends Serializable
{
//**********************************************************************************************************************
// Other Methods
Modified: commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestExecutorInterceptor.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestExecutorInterceptor.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestExecutorInterceptor.java (original)
+++ commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestExecutorInterceptor.java Wed Feb 27 10:54:01 2008
@@ -30,6 +30,15 @@
// Other Methods
//**********************************************************************************************************************
+ public void testMethodThrowsException()
+ {
+ final ExceptionEcho impl = new ExceptionEcho();
+ final OneShotExecutor executor = new OneShotExecutor();
+ final Echo proxy = ( Echo ) new CglibProxyFactory()
+ .createInterceptorProxy(impl, new ExecutorInterceptor(executor), new Class[] {Echo.class});
+ proxy.echo();
+ }
+
public void testNonVoidMethod() throws Exception
{
final ExecutedEcho impl = new ExecutedEcho();
@@ -60,6 +69,17 @@
//**********************************************************************************************************************
// Inner Classes
//**********************************************************************************************************************
+
+//
+// Inner Classes
+//
+ public static class ExceptionEcho extends EchoImpl
+ {
+ public void echo()
+ {
+ throw new RuntimeException("Oops!");
+ }
+ }
public static class ExecutedEcho extends EchoImpl
{
Modified: commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestFilteredInterceptor.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestFilteredInterceptor.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestFilteredInterceptor.java (original)
+++ commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestFilteredInterceptor.java Wed Feb 27 10:54:01 2008
@@ -17,10 +17,10 @@
package org.apache.commons.proxy.interceptor;
-import junit.framework.TestCase;
import org.apache.commons.proxy.Interceptor;
import org.apache.commons.proxy.factory.cglib.CglibProxyFactory;
import org.apache.commons.proxy.interceptor.filter.SimpleFilter;
+import org.apache.commons.proxy.util.AbstractTestCase;
import org.apache.commons.proxy.util.Echo;
import org.apache.commons.proxy.util.EchoImpl;
import org.apache.commons.proxy.util.SuffixInterceptor;
@@ -29,12 +29,17 @@
* @author James Carman
* @since 1.0
*/
-public class TestFilteredInterceptor extends TestCase
+public class TestFilteredInterceptor extends AbstractTestCase
{
//**********************************************************************************************************************
// Other Methods
//**********************************************************************************************************************
+ public void testSerialization()
+ {
+ assertSerializable(new FilteredInterceptor(new SuffixInterceptor("a"), new SimpleFilter(new String[] {"echoBack"})));
+ }
+
public void testFilterAccepts()
{
Echo echo = ( Echo ) new InterceptorChain(new Interceptor[] {new FilteredInterceptor(new SuffixInterceptor("a"), new SimpleFilter(new String[] {"echoBack"}))}).createProxyProvider(new CglibProxyFactory(), new EchoImpl()).getObject();
Modified: commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestInterceptorChain.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestInterceptorChain.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestInterceptorChain.java (original)
+++ commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestInterceptorChain.java Wed Feb 27 10:54:01 2008
@@ -17,23 +17,29 @@
package org.apache.commons.proxy.interceptor;
-import junit.framework.TestCase;
import org.apache.commons.proxy.Interceptor;
import org.apache.commons.proxy.factory.cglib.CglibProxyFactory;
import org.apache.commons.proxy.util.Echo;
import org.apache.commons.proxy.util.EchoImpl;
import org.apache.commons.proxy.util.SuffixInterceptor;
+import org.apache.commons.proxy.util.AbstractTestCase;
/**
* @author James Carman
* @since 1.0
*/
-public class TestInterceptorChain extends TestCase
+public class TestInterceptorChain extends AbstractTestCase
{
//**********************************************************************************************************************
// Other Methods
//**********************************************************************************************************************
+ public void testSerializable()
+ {
+ Echo echo = ( Echo ) new InterceptorChain(new Interceptor[] {new SuffixInterceptor("a"), new SuffixInterceptor("b")}).createProxyProvider(new CglibProxyFactory(), new EchoImpl(), new Class[] {Echo.class}).getObject();
+ assertSerializable(echo);
+ }
+
public void testWithMultipleInterceptors()
{
Echo echo = ( Echo ) new InterceptorChain(new Interceptor[] {new SuffixInterceptor("a"), new SuffixInterceptor("b")}).createProxyProvider(new CglibProxyFactory(), new EchoImpl(), new Class[] {Echo.class}).getObject();
Modified: commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestMethodInterceptorAdapter.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestMethodInterceptorAdapter.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestMethodInterceptorAdapter.java (original)
+++ commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestMethodInterceptorAdapter.java Wed Feb 27 10:54:01 2008
@@ -17,19 +17,30 @@
package org.apache.commons.proxy.interceptor;
-import junit.framework.TestCase;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.proxy.factory.javassist.JavassistProxyFactory;
+import org.apache.commons.proxy.util.AbstractTestCase;
import org.apache.commons.proxy.util.Echo;
import org.apache.commons.proxy.util.EchoImpl;
-public class TestMethodInterceptorAdapter extends TestCase
+import java.io.Serializable;
+
+public class TestMethodInterceptorAdapter extends AbstractTestCase
{
//**********************************************************************************************************************
// Other Methods
//**********************************************************************************************************************
+ public void testSerialization()
+ {
+ final Echo proxy = ( Echo ) new JavassistProxyFactory().createInterceptorProxy(new EchoImpl(),
+ new MethodInterceptorAdapter(new SuffixMethodInterceptor(
+ " suffix")),
+ new Class[] {Echo.class});
+ assertSerializable(proxy);
+ }
+
public void testMethodInterception()
{
final Echo proxy = ( Echo ) new JavassistProxyFactory().createInterceptorProxy(new EchoImpl(),
@@ -80,7 +91,7 @@
}
}
- private class SuffixMethodInterceptor implements MethodInterceptor
+ private static class SuffixMethodInterceptor implements MethodInterceptor, Serializable
{
private final String suffix;
Modified: commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestDuckTypingInvoker.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestDuckTypingInvoker.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestDuckTypingInvoker.java (original)
+++ commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestDuckTypingInvoker.java Wed Feb 27 10:54:01 2008
@@ -17,17 +17,17 @@
package org.apache.commons.proxy.invoker;
-import junit.framework.TestCase;
import org.apache.commons.proxy.ObjectProvider;
import org.apache.commons.proxy.ProxyFactory;
import org.apache.commons.proxy.provider.ConstantProvider;
+import org.apache.commons.proxy.util.AbstractTestCase;
import java.io.Serializable;
/**
*
*/
-public class TestDuckTypingInvoker extends TestCase
+public class TestDuckTypingInvoker extends AbstractTestCase
{
//**********************************************************************************************************************
// Other Methods
@@ -91,6 +91,13 @@
}
}
+ public void testSerialization()
+ {
+ final ObjectProvider targetProvider = new ConstantProvider(new LegacyDuck());
+ final DuckTypingInvoker invoker = new DuckTypingInvoker(targetProvider);
+ assertSerializable(invoker);
+ }
+
public void testTargetHasCompatibleReturnType()
{
final ObjectProvider targetProvider = new ConstantProvider(new LegacyDuck());
@@ -114,7 +121,7 @@
public void sayHonk();
}
- public static class LegacyDuck
+ public static class LegacyDuck implements Serializable
{
public String sayQuack()
{
Modified: commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestInvocationHandlerAdapter.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestInvocationHandlerAdapter.java?rev=631675&r1=631674&r2=631675&view=diff
==============================================================================
--- commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestInvocationHandlerAdapter.java (original)
+++ commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/invoker/TestInvocationHandlerAdapter.java Wed Feb 27 10:54:01 2008
@@ -17,19 +17,25 @@
package org.apache.commons.proxy.invoker;
-import junit.framework.TestCase;
import org.apache.commons.proxy.factory.javassist.JavassistProxyFactory;
+import org.apache.commons.proxy.util.AbstractTestCase;
import org.apache.commons.proxy.util.Echo;
+import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
-public class TestInvocationHandlerAdapter extends TestCase
+public class TestInvocationHandlerAdapter extends AbstractTestCase
{
//**********************************************************************************************************************
// Other Methods
//**********************************************************************************************************************
+ public void testSerialization()
+ {
+ assertSerializable( new InvocationHandlerAdapter( new InvocationHandlerTester() ) );
+ }
+
public void testMethodInvocation() throws Exception
{
InvocationHandlerTester tester = new InvocationHandlerTester();
@@ -46,7 +52,7 @@
// Inner Classes
//**********************************************************************************************************************
- private class InvocationHandlerTester implements InvocationHandler
+ private static class InvocationHandlerTester implements InvocationHandler, Serializable
{
private Object proxy;
private Method method;