使用二进制协议序列化记录时,OrientDB服务器会出现NullPointerException

时间:2017-12-03 13:50:51

标签: serialization binary protocols orientdb record

我刚开始用C ++实现binaryDB的二进制协议API。使用orientDB的当前版本是“orientdb-community-2.2.29”,win 10 x64和java 1.8。由于我试图在示例数据库服务器上查询“select * from XXXX”,因此会抛出异常并且没有记录被序列化到客户端。以下是成功连接和查询后的日志:

2017-12-03 14:14:12:561 INFO  {db=Site} /0:0:0:0:0:0:0:1:2520 - Writing bytes (4+0=4 bytes): null [OChannelBinaryServer]$ANSI{green {db=Site}} Error on unmarshalling record #73:0 (java.lang.NullPointerException)
java.lang.NullPointerException
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.getRecordBytes(ONetworkProtocolBinary.java:2894)
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.writeRecord(ONetworkProtocolBinary.java:2907)
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.writeIdentifiable(ONetworkProtocolBinary.java:2697)
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.serializeValue(ONetworkProtocolBinary.java:1639)
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.command(ONetworkProtocolBinary.java:1584)
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.executeRequest(ONetworkProtocolBinary.java:660)
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.sessionRequest(ONetworkProtocolBinary.java:394)
    at com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary.execute(ONetworkProtocolBinary.java:217)
    at com.orientechnologies.common.thread.OSoftThread.run(OSoftThread.java:81)

2017-12-03 14:14:12:561 WARNI {db=Site} Cannot serialize record: XXXX#73:0{Name:[2],IDs:[1]} v3 [ONetworkProtocolBinary]

在写入“null”字节之前,recordID,position和record版本被正确地序列化并在客户端接收,同时从Studio或控制台查询就像魅力一样。我试图将类 - 属性更改为STRING或EMBEDDEDMAP同样的问题。

提前感谢您的帮助: - )

1 个答案:

答案 0 :(得分:0)

幸运的是我发现了自己的错误:配置了错误的SerializationImpl。正确的配置必须是ORecordSerializerBinary而不是ONetworkProtocolBinary。