From d74ebb25a018b54684dc9b89fbf2897c0c11425c Mon Sep 17 00:00:00 2001 From: bicouy0 Date: Tue, 17 Oct 2017 13:14:28 +0200 Subject: [PATCH 1/2] test case for List deserialization List[ListTestEntity] is deserialized as a java.util.HashMap --- .../com/arangodb/velocypack/module/scala/VPackListTest.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/scala/com/arangodb/velocypack/module/scala/VPackListTest.scala b/src/test/scala/com/arangodb/velocypack/module/scala/VPackListTest.scala index 7663656..deeb023 100644 --- a/src/test/scala/com/arangodb/velocypack/module/scala/VPackListTest.scala +++ b/src/test/scala/com/arangodb/velocypack/module/scala/VPackListTest.scala @@ -55,6 +55,7 @@ class VPackListTest extends FunSuite with Matchers { entity.i(0) should be(69) entity.o.size should be(1) entity.o(0) should not be null + entity.o(0) shouldBe a [ListTestEntity] } -} \ No newline at end of file +} From 091af0f15d52d04a62cbb25f010f305b880b5c95 Mon Sep 17 00:00:00 2001 From: bicou Date: Tue, 17 Oct 2017 13:48:59 +0200 Subject: [PATCH 2/2] use a parameterized deserializer for LIST --- .../module/scala/internal/VPackScalaDeserializers.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/scala/com/arangodb/velocypack/module/scala/internal/VPackScalaDeserializers.scala b/src/main/scala/com/arangodb/velocypack/module/scala/internal/VPackScalaDeserializers.scala index fb478ae..db6691b 100644 --- a/src/main/scala/com/arangodb/velocypack/module/scala/internal/VPackScalaDeserializers.scala +++ b/src/main/scala/com/arangodb/velocypack/module/scala/internal/VPackScalaDeserializers.scala @@ -23,9 +23,14 @@ object VPackScalaDeserializers { } } - val LIST = new VPackDeserializer[List[Any]] { + val LIST = new VPackDeserializerParameterizedType[List[Any]] { def deserialize(parent: VPackSlice, vpack: VPackSlice, context: VPackDeserializationContext): List[Any] = - context.deserialize(vpack, classOf[java.util.List[Any]]).toList + throw new UnsupportedOperationException + + def deserialize(parent: VPackSlice, vpack: VPackSlice, context: VPackDeserializationContext, t: ParameterizedType): List[Any] = { + val clazz = t.getActualTypeArguments()(0).asInstanceOf[Class[Any]] + vpack.arrayIterator().map { slice => context.deserialize(slice, clazz) }.toList + } } val MAP = new VPackDeserializer[Map[Any, Any]] {