我需要实现 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 。
答案 0 :(得分:2)
SerializationUtils可能需要一个实现Serializable的类。
[编辑]下面的评论我现在认为问题是地图成员。将其类型更改为可序列化类型HashMap,我相信问题将得到解决。
答案 1 :(得分:2)
使用HashMap而不是实现序列化程序。您可能还需要对Collection进行子类化,因为我发现更复杂的对象很棘手