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 2007/10/23 14:27:05 UTC

svn commit: r587475 - in /commons/proper/proxy/trunk/src: main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java

Author: jcarman
Date: Tue Oct 23 05:27:05 2007
New Revision: 587475

URL: http://svn.apache.org/viewvc?rev=587475&view=rev
Log:
PROXY-4: SerializingInterceptor

Added:
    commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java
    commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java

Added: commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java?rev=587475&view=auto
==============================================================================
--- commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java (added)
+++ commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java Tue Oct 23 05:27:05 2007
@@ -0,0 +1,55 @@
+package org.apache.commons.proxy.interceptor;
+
+import org.apache.commons.proxy.Interceptor;
+import org.apache.commons.proxy.Invocation;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * An interceptor which makes a serialized copy of all parameters and return values.  This
+ * is useful when testing remote services to ensure that all parameter/return types
+ * are in fact serializable/deserializable.
+ * @since 1.0
+ */
+public class SerializingInterceptor implements Interceptor
+{
+    public Object intercept(Invocation invocation) throws Throwable
+    {
+        Object[] arguments = invocation.getArguments();
+        for (int i = 0; i < arguments.length; i++)
+        {
+            arguments[i] = serializedCopy(arguments[i]);
+        }
+        return serializedCopy(invocation.proceed());
+    }
+
+    private Object serializedCopy(Object original)
+    {
+        try
+        {
+            final ByteArrayOutputStream bout = new ByteArrayOutputStream();
+            final ObjectOutputStream oout = new ObjectOutputStream(bout);
+            oout.writeObject(original);
+            oout.close();
+            bout.close();
+            final ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
+            final ObjectInputStream oin = new ObjectInputStream(bin);
+            final Object copy = oin.readObject();
+            oin.close();
+            bin.close();
+            return copy;
+        }
+        catch (IOException e)
+        {
+            throw new RuntimeException( "Unable to make serialized copy of " + original.getClass().getName() + " object.", e );
+        }
+        catch (ClassNotFoundException e)
+        {
+            throw new RuntimeException( "Unable to make serialized copy of " + original.getClass().getName() + " object.", e );
+        }
+    }
+}

Added: commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java?rev=587475&view=auto
==============================================================================
--- commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java (added)
+++ commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java Tue Oct 23 05:27:05 2007
@@ -0,0 +1,59 @@
+package org.apache.commons.proxy.interceptor;
+
+import junit.framework.TestCase;
+import org.apache.commons.proxy.ProxyFactory;
+
+import java.io.ByteArrayOutputStream;
+
+public class TestSerializingInterceptor extends TestCase
+{
+    public void testWithSerializableParametersAndReturn()
+    {
+        final ObjectEchoImpl target = new ObjectEchoImpl();
+        ObjectEcho echo =
+                (ObjectEcho) new ProxyFactory().createInterceptorProxy(target,
+                        new SerializingInterceptor(),
+                        new Class[]{ObjectEcho.class});
+        final Object originalParameter = "Hello, World!";
+        final Object returnValue = echo.echoBack(originalParameter);
+        assertNotSame(originalParameter, target.parameter);
+        assertNotSame(originalParameter, returnValue);
+        assertNotSame(returnValue, target.parameter);
+    }
+
+    public void testWithInvalidParameterType()
+    {
+        try
+        {
+            final ObjectEchoImpl target = new ObjectEchoImpl();
+            ObjectEcho echo =
+                    (ObjectEcho) new ProxyFactory().createInterceptorProxy(target,
+                            new SerializingInterceptor(),
+                            new Class[]{ObjectEcho.class});
+            final Object originalParameter = new ByteArrayOutputStream();
+            echo.echoBack(originalParameter);
+            fail("Should not be able to call method with non-serializable parameter type.");
+        }
+        catch (RuntimeException e)
+        {
+
+        }
+
+    }
+
+    public static interface ObjectEcho
+    {
+        public Object echoBack(Object object);
+    }
+
+    public static class ObjectEchoImpl implements ObjectEcho
+    {
+        private Object parameter;
+
+        public Object echoBack(Object object)
+        {
+            this.parameter = object;
+            return object;
+        }
+    }
+}



Re: [proxy] svn commit: r587475 - in /commons/proper/proxy/trunk/src: main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java

Posted by Rahul Akolkar <ra...@gmail.com>.
On 10/24/07, James Carman <ja...@carmanconsulting.com> wrote:
> Rahul,
>
> Does that look better?  I copied the svn props from another file.
>
<snip/>

Yes, thank you.

The one we really care about is svn:eol-style. I have "Date Author Id
Revision HeadURL" for svn:keywords, FWIW.

-Rahul


> On 10/23/07, James Carman <ja...@carmanconsulting.com> wrote:
> > Darn it, I upgraded IDEA to 7.0 when it came out and forgot to set up
> > the Copyright plugin.  I'm on it...
> >
> >
> > On 10/23/07, Rahul Akolkar <ra...@gmail.com> wrote:
> > > On 10/23/07, jcarman@apache.org <jc...@apache.org> wrote:
> > > > Author: jcarman
> > > > Date: Tue Oct 23 05:27:05 2007
> > > > New Revision: 587475
> > > >
> > > > URL: http://svn.apache.org/viewvc?rev=587475&view=rev
> > > > Log:
> > > > PROXY-4: SerializingInterceptor
> > > >
> > > > Added:
> > > >     commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java
> > > >     commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java
> > > >
> > > <snip/>
> > >
> > > Missing {ASLv2, svn props}.
> > >
> > > -Rahul
> > >

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: [proxy] svn commit: r587475 - in /commons/proper/proxy/trunk/src: main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java

Posted by James Carman <ja...@carmanconsulting.com>.
Rahul,

Does that look better?  I copied the svn props from another file.

On 10/23/07, James Carman <ja...@carmanconsulting.com> wrote:
> Darn it, I upgraded IDEA to 7.0 when it came out and forgot to set up
> the Copyright plugin.  I'm on it...
>
>
> On 10/23/07, Rahul Akolkar <ra...@gmail.com> wrote:
> > On 10/23/07, jcarman@apache.org <jc...@apache.org> wrote:
> > > Author: jcarman
> > > Date: Tue Oct 23 05:27:05 2007
> > > New Revision: 587475
> > >
> > > URL: http://svn.apache.org/viewvc?rev=587475&view=rev
> > > Log:
> > > PROXY-4: SerializingInterceptor
> > >
> > > Added:
> > >     commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java
> > >     commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java
> > >
> > <snip/>
> >
> > Missing {ASLv2, svn props}.
> >
> > -Rahul
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
> >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: [proxy] svn commit: r587475 - in /commons/proper/proxy/trunk/src: main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java

Posted by James Carman <ja...@carmanconsulting.com>.
Darn it, I upgraded IDEA to 7.0 when it came out and forgot to set up
the Copyright plugin.  I'm on it...


On 10/23/07, Rahul Akolkar <ra...@gmail.com> wrote:
> On 10/23/07, jcarman@apache.org <jc...@apache.org> wrote:
> > Author: jcarman
> > Date: Tue Oct 23 05:27:05 2007
> > New Revision: 587475
> >
> > URL: http://svn.apache.org/viewvc?rev=587475&view=rev
> > Log:
> > PROXY-4: SerializingInterceptor
> >
> > Added:
> >     commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java
> >     commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java
> >
> <snip/>
>
> Missing {ASLv2, svn props}.
>
> -Rahul
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: [proxy] svn commit: r587475 - in /commons/proper/proxy/trunk/src: main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java

Posted by Rahul Akolkar <ra...@gmail.com>.
On 10/23/07, jcarman@apache.org <jc...@apache.org> wrote:
> Author: jcarman
> Date: Tue Oct 23 05:27:05 2007
> New Revision: 587475
>
> URL: http://svn.apache.org/viewvc?rev=587475&view=rev
> Log:
> PROXY-4: SerializingInterceptor
>
> Added:
>     commons/proper/proxy/trunk/src/main/java/org/apache/commons/proxy/interceptor/SerializingInterceptor.java
>     commons/proper/proxy/trunk/src/test/java/org/apache/commons/proxy/interceptor/TestSerializingInterceptor.java
>
<snip/>

Missing {ASLv2, svn props}.

-Rahul

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org