IllegalArgumentException:无法序列化对象

时间:2015-03-29 22:27:02

标签: java serialization orientdb

我需要实现 OSerializableStream 接口,以便在orientdb数据库中保存对象。我使用 orientdb-community-1.7.4 版本并尝试在spring中使用 SerializationUtils 来序列化,反序列化对象。当我想序列化具有属性Map<Integer, Collection<String>>的对象时,我收到错误消息:

java.lang.IllegalArgumentException: Failed to serialize object

SocialRecord.java

package persistence.graphdb.socialNetwork;

import com.orientechnologies.orient.core.exception.OSerializationException;
import com.orientechnologies.orient.core.serialization.OSerializableStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.springframework.util.SerializationUtils;

public class SocialRecord implements OSerializableStream{

    // all message keywords
    private Map<Integer, Collection<String>> keywords = new HashMap<>();

    public Map<Integer, Collection<String>> getKeywords() {
        return keywords;
    }

    public void setKeywords(Map<Integer, Collection<String>> keywords) {
        this.keywords = keywords;
    }

    @Override
    public byte[] toStream() throws OSerializationException {
        return SerializationUtils.serialize(this);
    }

    @Override
    public OSerializableStream fromStream(byte[] bytes) throws OSerializationException {
        return (OSerializableStream) SerializationUtils.deserialize(bytes);
    }

}

当我创建 SocialRecord 类的一些对象并调用 toStream()方法时,我得到 IllegalArgumentException

2 个答案:

答案 0 :(得分:2)

SerializationUtils可能需要一个实现Serializable的类。

[编辑]下面的评论我现在认为问题是地图成员。将其类型更改为可序列化类型HashMap,我相信问题将得到解决。

答案 1 :(得分:2)

使用HashMap而不是实现序列化程序。您可能还需要对Collection进行子类化,因为我发现更复杂的对象很棘手