0

My android app needs to serialize an object (RowCreation) to transmit it over the network. Obvisously the object class implements the Serializable interface. The class has the following structure:

    public class RowCreation extends ClientSyncRequest {

    private static final long serialVersionUID = 10001243L;


    public int localID;
    public int entity;
    public Hashtable attributes = new Hashtable();
    public byte[] bytes;
    public long time = 0;
    public String md5CheckSum;
}

public class ClientSyncRequest extends SyncMessage {

        private static final long serialVersionUID = 10001246L;


        public int id = 0;

        public int getId(){

            return this.id;

        }
    }




public class SyncMessage implements Serializable{

     private static final long serialVersionUID = 10001231L;


}

It happens that one of the app users reported a bug today, When I saw the stacktrace on the google play console was the StackOverflowError:

java.lang.StackOverflowError
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1064)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1035)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:248)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1067)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:1035)
at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:248)
at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1067)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1574)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
at java.util.Hashtable.writeObject(Hashtable.java:1079)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053)
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
m_junior
  • 591
  • 1
  • 8
  • 19
  • You are seeing a Hashtable.writeObject in the stack trace; maybe somehow you are taking too many objects. One possibility might be an inner non-static class. Or a somewhat recursive data structure. – Joop Eggen Aug 25 '15 at 09:19
  • what precisely you want me to do? – m_junior Aug 25 '15 at 13:48

0 Answers0