You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by John McNally <jm...@collab.net> on 2002/03/10 00:03:26 UTC

add serialize method to lang.Objects

Here is a patch to add a serialize method to Objects to complement the
deserialize method.  Also included are unit tests for Objects.

john mcnally

Re: add serialize method to lang.Objects

Posted by Daniel Rall <dl...@finemaltcoding.com>.
Done, thanks John.

- Dan

John McNally <jm...@collab.net> writes:

> Here is a patch to add a serialize method to Objects to complement the
> deserialize method.  Also included are unit tests for Objects.
>
> john mcnallyIndex: Objects.java
> ===================================================================
> RCS file: /home/cvspublic/jakarta-commons-sandbox/lang/src/java/org/apache/commons/lang/Objects.java,v
> retrieving revision 1.1
> diff -u -u -r1.1 Objects.java
> --- Objects.java	22 Feb 2002 05:57:15 -0000	1.1
> +++ Objects.java	9 Mar 2002 22:56:58 -0000
> @@ -54,11 +54,14 @@
>   * <http://www.apache.org/>.
>   */
>  
> -import java.io.BufferedInputStream;
>  import java.io.ByteArrayInputStream;
>  import java.io.IOException;
>  import java.io.InputStream;
>  import java.io.ObjectInputStream;
> +import java.io.Serializable;
> +import java.io.ByteArrayOutputStream;
> +import java.io.ObjectOutputStream;
> +import java.io.IOException;
>  
>  /**
>   * Common <code>Object</code> manipulation routines.
> @@ -121,6 +124,39 @@
>              }
>          }
>          return object;
> +    }
> +
> +
> +    /**
> +     * Converts a object to a byte array for storage/serialization.
> +     *
> +     * @param obj The Serializable to convert.
> +     * @return A byte[] with the converted Serializable.
> +     * @exception IOException, if conversion to a byte[] fails.
> +     */
> +    public static byte[] serialize(Serializable obj)
> +        throws IOException
> +    {
> +        byte[] byteArray = null;
> +        ByteArrayOutputStream baos = null;
> +        ObjectOutputStream out = null;
> +        try
> +        {
> +            // These objects are closed in the finally.
> +            baos = new ByteArrayOutputStream();
> +            out = new ObjectOutputStream(baos);
> +
> +            out.writeObject(obj);
> +            byteArray = baos.toByteArray();
> +        }
> +        finally
> +        {
> +            if (out != null) 
> +            {
> +                out.close();
> +            }
> +        }
> +        return byteArray;
>      }
>  
>      /**
> Index: build.xml
> ===================================================================
> RCS file: /home/cvspublic/jakarta-commons-sandbox/lang/build.xml,v
> retrieving revision 1.4
> diff -u -u -r1.4 build.xml
> --- build.xml	9 Mar 2002 17:11:38 -0000	1.4
> +++ build.xml	9 Mar 2002 23:03:21 -0000
> @@ -224,6 +224,7 @@
>  
>    <target name="test"  depends="compile.tests,
>                                  test.strings,
> +                                test.objects,
>                                  test.numberRange,
>                                  test.exception
>                                 "
> @@ -236,6 +237,15 @@
>      <java classname="${test.runner}" fork="yes"
>          failonerror="${test.failonerror}">
>        <arg value="org.apache.commons.lang.StringsTest"/>
> +      <classpath refid="test.classpath"/>
> +    </java>
> +  </target>
> +
> +  <target name="test.objects" depends="compile.tests">
> +    <echo message="Running Objects tests ..."/>
> +    <java classname="${test.runner}" fork="yes"
> +        failonerror="${test.failonerror}">
> +      <arg value="org.apache.commons.lang.ObjectsTest"/>
>        <classpath refid="test.classpath"/>
>      </java>
>    </target>
> package org.apache.commons.lang;
>
> /* ====================================================================
>  * The Apache Software License, Version 1.1
>  *
>  * Copyright (c) 2001 The Apache Software Foundation.  All rights
>  * reserved.
>  *
>  * Redistribution and use in source and binary forms, with or without
>  * modification, are permitted provided that the following conditions
>  * are met:
>  *
>  * 1. Redistributions of source code must retain the above copyright
>  *    notice, this list of conditions and the following disclaimer.
>  *
>  * 2. Redistributions in binary form must reproduce the above copyright
>  *    notice, this list of conditions and the following disclaimer in
>  *    the documentation and/or other materials provided with the
>  *    distribution.
>  *
>  * 3. The end-user documentation included with the redistribution,
>  *    if any, must include the following acknowledgment:
>  *       "This product includes software developed by the
>  *        Apache Software Foundation (http://www.apache.org/)."
>  *    Alternately, this acknowledgment may appear in the software itself,
>  *    if and wherever such third-party acknowledgments normally appear.
>  *
>  * 4. The names "Apache" and "Apache Software Foundation" and
>  *    "Apache Turbine" must not be used to endorse or promote products
>  *    derived from this software without prior written permission. For
>  *    written permission, please contact apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache",
>  *    "Apache Turbine", nor may "Apache" appear in their name, without
>  *    prior written permission of the Apache Software Foundation.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> import java.util.HashMap;
> import java.io.IOException;
>
> import junit.framework.Test;
> import junit.framework.TestCase;
> import junit.framework.TestSuite;
>
> /**
>  * Unit tests {@link org.apache.commons.lang.Objects}.
>  *
>  * @author <a href="mailto:dlr@collab.net">John McNally</a>
>  */
> public class ObjectsTest extends TestCase
> {
>     private static final String FOO = "foo";
>     private static final String BAR = "bar";
>     private static final String MAP_ERROR =
>         "Map did not serialize and deserialize to equivalent map";
>
>     public ObjectsTest(String name)
>     {
>         super(name);
>     }
>     
>     public void testIsNull()
>     {
>         Object o = FOO;
>         Object dflt = BAR;
>         assertEquals("dflt was not returned when o was null", dflt,
>                      Objects.isNull(null, dflt));
>         assertEquals("dflt was returned when o was not null", o,
>                      Objects.isNull(o, dflt));
>     }
>         
>     public void testDeserialize()
>         throws IOException
>     {
>         serializeDeserialize();
>     }
>
>     public void testSerialize()
>         throws IOException
>     {
>         serializeDeserialize();
>     }
>
>     private void serializeDeserialize()
>         throws IOException
>     {
>         HashMap original = new HashMap();
>         original.put(FOO, BAR);
>         original.put(BAR, FOO);
>         byte[] ser = Objects.serialize(original);
>         HashMap deser = (HashMap)Objects.deserialize(ser);
>         assertEquals(MAP_ERROR, original.get(FOO), deser.get(FOO));
>         assertEquals(MAP_ERROR, original.get(BAR), deser.get(BAR));
>     }    
>
>     public void testEquals()
>     {
>         assertTrue("Objects.equals(null, null) returned false", 
>                    Objects.equals(null, null));
>         assertTrue("Objects.equals(\"foo\", null) returned true", 
>                    !Objects.equals(FOO, null));
>         assertTrue("Objects.equals(null, \"bar\") returned true", 
>                    !Objects.equals(null, BAR));
>         assertTrue("Objects.equals(\"foo\", \"bar\") returned true", 
>                    !Objects.equals(FOO, BAR));
>         assertTrue("Objects.equals(\"foo\", \"foo\") returned false", 
>                    Objects.equals(FOO, FOO));
>     }
>         
> }
>
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>