IllegalArgumentException:无法序列化对象

IllegalArgumentException: Failed to serialize object

我需要实现 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 class 的一些对象并调用 toStream() 方法时,我得到 IllegalArgumentException

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

[edit] 在下面发表评论后,我现在认为问题是地图成员。将其类型更改为可序列化类型 HashMap,我相信问题会解决。

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