From 3ece4bf9e73163222a80b9d931d6610135be09a3 Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@nibio.no> Date: Tue, 28 Apr 2020 13:34:14 +0200 Subject: [PATCH] Serialization/deserialization issue fixed for good --- .../java/no/nibio/vips/util/ModelUtil.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/java/no/nibio/vips/util/ModelUtil.java b/src/main/java/no/nibio/vips/util/ModelUtil.java index bed787c..4781cae 100755 --- a/src/main/java/no/nibio/vips/util/ModelUtil.java +++ b/src/main/java/no/nibio/vips/util/ModelUtil.java @@ -19,12 +19,16 @@ package no.nibio.vips.util; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLConnection; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import no.nibio.vips.entity.WeatherObservation; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; @@ -115,4 +119,30 @@ public class ModelUtil { return Base64.encodeBase64String(bytes); } + /** + * This solves the problem of the model not knowing if the ModelConfiguration + * contains a halfway serialized List of WeatherObservation (typically LinkedHashMap) + * OR a List of actual WeatherObservations. + * @param unknownClassList + * @return + */ + public List<WeatherObservation> extractWeatherObservationList(Object unknownClassList) + { + try + { + // These are real WeatherObservation classes + List<WeatherObservation> obsList = (List<WeatherObservation>) unknownClassList; + if(obsList != null && obsList.size() > 0) + { + WeatherObservation o = obsList.get(0); + } + return obsList; + } + catch(ClassCastException ex) + { + // These are semi serialized, tell ObjectMapper/Jackson how to do it + ObjectMapper mapper = new ObjectMapper(); + return mapper.convertValue(unknownClassList, new TypeReference<List<WeatherObservation>>(){}); + } + } } -- GitLab