Re: [kryo] com.esotericsoftware.kryo.KryoException: java.lang.ClassCastException: com.xxx.transformer.kryo.Employee cannot be cast to java.lang.Integer

1,035 views
Skip to first unread message

Nate

unread,
Aug 21, 2012, 9:07:56 PM8/21/12
to kryo-...@googlegroups.com
Is it possible your _views object has a View key? Are you running from SVN? A recent fix may be related to your problem.

-Nate


On Tue, Aug 21, 2012 at 5:24 PM, Ramki Dirisala <ramki.d...@gmail.com> wrote:
Hi,
I am new Kryo and exploring to use in my project. but when i try one POC, i am getting a strange error. i am putting all my classes.

1) public class CopyOnWriteMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Comparator<Entry<K,V>> {

    private Map<? extends K,? extends V> backingMap = null;
    private ArrayList<SimpleEntry<K,V>> store = null
    ............... some getters/setters
   }
2) public class View implements Serializable{

    private CopyOnWriteMap<String,String> _attributes = new CopyOnWriteMap<String,String>();
    private String _viewID;
    ............... some getters/setters
 }

3) public class Page implements Serializable {
    private CopyOnWriteMap<String,String> _attributes = new CopyOnWriteMap<String,String>();
    private CopyOnWriteMap<String, View> _views = new CopyOnWriteMap<String, View>();
        ............... some getters/setters
  public View getMutableView(final String viewID) {
        View view = _views.get(viewID);
        if (!_views.containsLocalKey(viewID)) {
            if (view == null) {
                view = new View();
                view.setViewID(viewID);
            } else {
                view = view.createChild();
            }
            _views.put(viewID, view);
        }
        return view;
    }

  }
4) public class KryoSerializerUtil {
     public static void main(String[] args) throws Exception {
             Page page = new Page();
        page.getMutableView("ramki");
        
        Kryo kryo = new Kryo();
        kryo.register(CopyOnWriteMap.class);
        kryo.register(View.class);
        kryo.register(Page.class); 
        Output output = new Output(new FileOutputStream("file.bin"));
        kryo.writeClassAndObject(output, page);
}
}

so when i try to run above code i am getting following error

Exception in thread "main" com.esotericsoftware.kryo.KryoException: java.lang.ClassCastException: com.apn.transformer.View cannot be cast to java.lang.String
Serialization trace:
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:495)
at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:213)
at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:571)
at com.apn.transformer.kryo.KryoSerializerUtil.main(KryoSerializerUtil.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.ClassCastException: com.apn.transformer.View cannot be cast to java.lang.String
at com.esotericsoftware.kryo.serializers.DefaultSerializers$StringSerializer.write(DefaultSerializers.java:146)
at com.esotericsoftware.kryo.Kryo.writeObjectOrNull(Kryo.java:552)
at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:83)
at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:17)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:504)
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.write(FieldSerializer.java:474)

could someone help me to find out the problem?

Thanks,
Ramki      
  

--
You received this message because you are subscribed to the "kryo-users" group.
http://groups.google.com/group/kryo-users

Ramki Dirisala

unread,
Aug 21, 2012, 10:11:52 PM8/21/12
to kryo-...@googlegroups.com
Hi Nate,
Thanks for quick response. Key always a String not View Object? intrestingly, if i make View Class as Final, it is working fine.

i am usingkryo 2.19.

Thanks,
Ramki
--
Thanks,
Ramki.


Nate

unread,
Aug 21, 2012, 10:13:31 PM8/21/12
to kryo-...@googlegroups.com
I'm guessing your problem is fixed in SVN. I'll try to do a release tomorrow.

-Nate

Ramki Dirisala

unread,
Aug 21, 2012, 10:16:23 PM8/21/12
to kryo-...@googlegroups.com
ok great.

-RK

Ramki Dirisala

unread,
Aug 24, 2012, 1:14:50 PM8/24/12
to kryo-...@googlegroups.com
Hi Nate,
My previous problem solved with Kryo2.20. when i try to deserialize the object back, i am getting following exception.

com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): java.util.Map
at com.esotericsoftware.kryo.Kryo.newInstantiator(Kryo.java:1048)
at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1060)
at com.esotericsoftware.kryo.serializers.MapSerializer.create(MapSerializer.java:93)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:97)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:17)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:629)
at com.apn.transformer.kryo.KryoSerializerUtil.read(KryoSerializerUtil.java:57)
at com.apn.transformer.TrafficConfigTransformer.transform(TrafficConfigTransformer.java:48)
at com.apn.transformer.TrafficConfigTransformer.main(TrafficConfigTransformer.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Not sure might be the issue.

Thanks,
Ramki

On Tue, Aug 21, 2012 at 7:13 PM, Nate <nathan...@gmail.com> wrote:



--
Thanks,
Ramki.


Nate

unread,
Aug 24, 2012, 3:52:33 PM8/24/12
to kryo-...@googlegroups.com
On Fri, Aug 24, 2012 at 10:14 AM, Ramki Dirisala <ramki.d...@gmail.com> wrote:
Hi Nate,
My previous problem solved with Kryo2.20. when i try to deserialize the object back, i am getting following exception.

com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): java.util.Map
at com.esotericsoftware.kryo.Kryo.newInstantiator(Kryo.java:1048)
at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1060)
at com.esotericsoftware.kryo.serializers.MapSerializer.create(MapSerializer.java:93)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:97)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:17)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:629)
at com.apn.transformer.kryo.KryoSerializerUtil.read(KryoSerializerUtil.java:57)
at com.apn.transformer.TrafficConfigTransformer.transform(TrafficConfigTransformer.java:48)
at com.apn.transformer.TrafficConfigTransformer.main(TrafficConfigTransformer.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Not sure might be the issue.

No idea. The unit tests pass. :)

-Nate
Reply all
Reply to author
Forward
0 new messages