This is an automated email from the git hooks/post-receive script. New commit to branch feature/8143-blobGsonAdapter in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit b3b6cc50a55eaedab5572ab1e59cc3128a96324a Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Sat Mar 19 08:09:58 2016 +0100 creation d'un adapteur pour le type blob (see #8124). --- .../ird/observe/services/dto/gson/BlobAdapter.java | 57 ++++++++++++++++++++++ .../services/dto/gson/ObserveDtoGsonSupplier.java | 2 + 2 files changed, 59 insertions(+) diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/BlobAdapter.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/BlobAdapter.java new file mode 100644 index 0000000..762e28c --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/BlobAdapter.java @@ -0,0 +1,57 @@ +package fr.ird.observe.services.dto.gson; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import javax.sql.rowset.serial.SerialBlob; +import java.lang.reflect.Type; +import java.sql.Blob; +import java.sql.SQLException; +import java.util.Base64; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class BlobAdapter implements JsonSerializer<Blob>, JsonDeserializer<Blob> { + + @Override + public Blob deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + + String blob64 = json.getAsString(); + + byte[] bytes = Base64.getDecoder().decode(blob64); + + + try { + SerialBlob blob = new SerialBlob(bytes); + + return blob; + + } catch (SQLException e) { + throw new JsonParseException("could not create blob ", e); + } + + } + + @Override + public JsonElement serialize(Blob src, Type typeOfSrc, JsonSerializationContext context) { + try { + + byte[] bytes = src.getBytes(1, (int) src.length()); + + Base64.Encoder encoder = Base64.getEncoder(); + + String blob64 = encoder.encodeToString(bytes); + + return new JsonPrimitive(blob64); + + } catch (SQLException e) { + throw new JsonParseException("could not read blob ", e); + } + } +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java index 6d84326..bd6b380 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java @@ -40,6 +40,7 @@ import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; import org.nuiton.version.Version; +import java.sql.Blob; import java.sql.Timestamp; import java.util.Date; @@ -95,6 +96,7 @@ public class ObserveDtoGsonSupplier implements Supplier<Gson> { gsonBuilder.registerTypeAdapter(Timestamp.class, new DateAdapter()); gsonBuilder.registerTypeAdapter(java.sql.Date.class, new DateAdapter()); gsonBuilder.registerTypeAdapter(Class.class, new ClassAdapter()); + gsonBuilder.registerTypeAdapter(Blob.class, new BlobAdapter()); gsonBuilder.registerTypeAdapter(ImmutableList.class, new ImmutableListAdapter()); gsonBuilder.registerTypeAdapter(ImmutableSet.class, new ImmutableSetAdapter()); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.