ArangoDB,Java,Velocypack错误尝试反序列化DBEntity

时间:2018-06-15 04:55:15

标签: java spring-data deserialization arangodb

我使用的是SpringBoot 1.5.4.RELEASE,ArangoDB java驱动4.5.0,Arango Spring Data 1.1.5

我在检索对象时遇到此错误。

com.arangodb.velocypack.exception.VPackParserException: java.lang.InstantiationException: com.arangodb.springframework.core.convert.DBEntity

我找不到根本原因(仍在寻找)但是我可以看到错误被抛出的地方,在类VPack中有这种方法

private <T> T createInstance(final Type type) throws InstantiationException, IllegalAccessException {
  final T entity;
  final VPackInstanceCreator<?> creator = instanceCreators.get(type);
  if (creator != null) {
    entity = (T) creator.createInstance();
  } else if (type instanceof ParameterizedType) {
    entity = createInstance(((ParameterizedType) type).getRawType());
  } else {
    entity = ((Class<T>) type).newInstance();
  }
  return entity;
}

但传入的类型是接口 com.arangodb.springframework.core.convert.DBEntity。没有创建者,它不是参数化类型,因此调用newInstance。这当然失败了。

这似乎源于find方法中的ArangoTemplate。这是传入DBEntity.class的地方。

  @Override
  public <T> Optional<T> find(final String id, final Class<T> entityClass, final DocumentReadOptions options)
      throws DataAccessException {
    try {
      final DBEntity doc = _collection(entityClass, id).getDocument(determineDocumentKeyFromId(id),
        DBEntity.class, options);
      return Optional.ofNullable(fromDBEntity(entityClass, doc));
    } catch (final ArangoDBException e) {
      throw translateExceptionIfPossible(e);
    }
  }

我正在尝试创建一个可以按需生成此测试的测试。如果我成功了,我会在这里发帖。

感谢,
西蒙

1 个答案:

答案 0 :(得分:1)

这通常不会发生,因为存在VPackDeseralizer for DBEntity。你可能被覆盖AbstractArangoConfiguration.arangoTemplate()吗?在这种情况下,您已删除了底层驱动程序所需的配置。