From bbf44f5d4a55b93e5270dd38dbdcbb084df1ee5f Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Fri, 2 Oct 2020 13:07:50 +0300 Subject: [PATCH] CB-290 Document serialization fix --- .../cloudbeaver/service/sql/WebSQLUtils.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java index 062d803b51..34587d01d6 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLUtils.java @@ -26,6 +26,9 @@ import org.jkiss.dbeaver.model.struct.DBSAttributeBase; import org.jkiss.dbeaver.model.struct.DBSTypedObject; import org.jkiss.dbeaver.utils.ContentUtils; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; @@ -50,7 +53,7 @@ public class WebSQLUtils { if (dataFormat != WebDataFormat.document) { return serializeDocumentValue((DBDDocument) dbValue); } else { - return new WebSQLDatabaseDocument(session, (DBDDocument) dbValue); + return serializeDocumentValue(session, (DBDDocument) dbValue); } } else if (dbValue instanceof DBDComplexValue) { return serializeComplexValue(session, (DBDComplexValue)dbValue, dataFormat); @@ -83,6 +86,24 @@ public class WebSQLUtils { return value.toString(); } + private static Map serializeDocumentValue(WebSession session, DBDDocument document) throws DBCException { + String documentData; + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + document.serializeDocument(session.getProgressMonitor(), baos, StandardCharsets.UTF_8); + documentData = new String(baos.toByteArray(), StandardCharsets.UTF_8); + } catch (Exception e) { + throw new DBCException("Error serializing document", e); + } + + Map map = new LinkedHashMap<>(); + map.put("id", document.getDocumentId()); + map.put("contentType", document.getDocumentContentType()); + map.put("properties", Collections.emptyMap()); + map.put("data", documentData); + return map; + } + private static Object serializeContentValue(WebSession session, DBDContent value) throws DBCException { return ContentUtils.getContentStringValue(session.getProgressMonitor(), value); }