From 6930af73f4714e84210e5367e700788ade708db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mitusi=C5=84ski?= <33416713+lmitusinski@users.noreply.github.com> Date: Thu, 12 Jul 2018 22:07:41 +0200 Subject: [PATCH] #7610 #7625 fixed deserialization of table objects in autotranslation (#7673) --- .../beakerx/DefaultBeakerXJsonSerializer.java | 7 ++- .../AutotranslationDefaultDeserializer.java | 45 +++++++++++++++++++ .../serializer/TableDisplayDeSerializer.java | 8 ++-- 3 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/AutotranslationDefaultDeserializer.java diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/DefaultBeakerXJsonSerializer.java b/kernel/base/src/main/java/com/twosigma/beakerx/DefaultBeakerXJsonSerializer.java index c89cb6e03d..f5c158f501 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/DefaultBeakerXJsonSerializer.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/DefaultBeakerXJsonSerializer.java @@ -17,11 +17,16 @@ import com.twosigma.beakerx.jvm.serialization.BasicObjectSerializer; import com.twosigma.beakerx.jvm.serialization.BeakerObjectConverter; +import com.twosigma.beakerx.table.serializer.AutotranslationDefaultDeserializer; +import com.twosigma.beakerx.table.serializer.TableDisplayDeSerializer; public class DefaultBeakerXJsonSerializer extends BaseBeakerXJsonSerializer { @Override protected BeakerObjectConverter createSerializer() { - return new BasicObjectSerializer(); + BasicObjectSerializer serializer = new BasicObjectSerializer(); + serializer.addfTypeDeserializer(new TableDisplayDeSerializer(serializer)); + serializer.addfTypeDeserializer(new AutotranslationDefaultDeserializer()); + return serializer; } } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/AutotranslationDefaultDeserializer.java b/kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/AutotranslationDefaultDeserializer.java new file mode 100644 index 0000000000..efd338cdd4 --- /dev/null +++ b/kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/AutotranslationDefaultDeserializer.java @@ -0,0 +1,45 @@ +/* + * Copyright 2018 TWO SIGMA OPEN SOURCE, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.twosigma.beakerx.table.serializer; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.twosigma.beakerx.jvm.serialization.ObjectDeserializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +public class AutotranslationDefaultDeserializer implements ObjectDeserializer{ + + private final static Logger logger = LoggerFactory.getLogger(AutotranslationDefaultDeserializer.class.getName()); + + @Override + public boolean canBeUsed(JsonNode n) { + // used as a last deserializer if there is no valid deserializer for processed object + return true; + } + + @Override + public Object deserialize(JsonNode n, ObjectMapper mapper) { + try { + return mapper.readValue(n.toString(), Object.class); + } catch (IOException e) { + logger.error("exception in autotranslation default deserialization", e); + } + return null; + } +} diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/TableDisplayDeSerializer.java b/kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/TableDisplayDeSerializer.java index bf50bf975b..252e6cba6a 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/TableDisplayDeSerializer.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/table/serializer/TableDisplayDeSerializer.java @@ -62,7 +62,7 @@ public static List> getValues(BeakerObjectConverter parent, JsonNode n, List> values = null; List classes = null; if (n.has("types")) - classes = mapper.readValue(n.get("types").asText(), List.class); + classes = mapper.readValue(n.get("types").toString(), List.class); if (n.has("values")) { JsonNode nn = n.get("values"); values = new ArrayList>(); @@ -87,7 +87,7 @@ public static List> getValues(BeakerObjectConverter parent, JsonNode n, public static List getColumns(JsonNode n, ObjectMapper mapper) throws IOException { List columns = null; if (n.has("columnNames")) - columns = mapper.readValue(n.get("columnNames").asText(), List.class); + columns = mapper.readValue(n.get("columnNames").toString(), List.class); return columns; } @@ -95,7 +95,7 @@ public static List getColumns(JsonNode n, ObjectMapper mapper) throws IO public static List getClasses(JsonNode n, ObjectMapper mapper) throws IOException { List classes = null; if (n.has("types")) - classes = mapper.readValue(n.get("types").asText(), List.class); + classes = mapper.readValue(n.get("types").toString(), List.class); return classes; } @@ -119,7 +119,7 @@ public static Pair getDeserializeObject(BeakerObjectConverter pa List classes = TableDisplayDeSerializer.getClasses(n, mapper); if (n.has("subtype")) - subtype = mapper.readValue(n.get("subtype").asText(), String.class); + subtype = mapper.readValue(n.get("subtype").toString(), String.class); if (subtype != null && subtype.equals(TableDisplay.DICTIONARY_SUBTYPE)) { o = getValuesAsDictionary(parent, n, mapper);