From a19fa1f8a03c7a7385ea3b2fd96989e0f9c88a7f Mon Sep 17 00:00:00 2001 From: David Noble Date: Tue, 17 Sep 2019 21:38:19 -0700 Subject: [PATCH] Progressed on deserializing schemas. --- .../java/com/azure/data/cosmos/core/Json.java | 2 +- .../hybridrow/layouts/SystemSchema.java | 15 +++++++-------- .../hybridrow/schemas/Namespace.java | 10 +++++++++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/java/src/main/java/com/azure/data/cosmos/core/Json.java b/java/src/main/java/com/azure/data/cosmos/core/Json.java index 14278f8..bb7f7ef 100644 --- a/java/src/main/java/com/azure/data/cosmos/core/Json.java +++ b/java/src/main/java/com/azure/data/cosmos/core/Json.java @@ -40,7 +40,7 @@ public final class Json { try { return Optional.of(reader.forType(type).readValue(stream)); } catch (IOException error) { - logger.error("", error); + logger.error("failed to parse %s due to ", type.getName(), error); return Optional.empty(); } } diff --git a/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/layouts/SystemSchema.java b/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/layouts/SystemSchema.java index a6c8ee8..baef558 100644 --- a/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/layouts/SystemSchema.java +++ b/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/layouts/SystemSchema.java @@ -6,24 +6,22 @@ package com.azure.data.cosmos.serialization.hybridrow.layouts; import com.azure.data.cosmos.serialization.hybridrow.SchemaId; import com.azure.data.cosmos.serialization.hybridrow.schemas.Namespace; import com.google.common.base.Suppliers; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; -import java.nio.charset.StandardCharsets; import java.security.CodeSource; import java.util.Enumeration; import java.util.Optional; import java.util.function.Supplier; -import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Strings.lenientFormat; public final class SystemSchema { + public static final String specificationTitle = "HybridRow serialization library"; + /** * SchemaId of the empty schema. This schema has no defined cells but can accomodate * unschematized sparse content. @@ -46,15 +44,16 @@ public final class SystemSchema { final Optional namespace; try (final InputStream stream = getResourceAsStream("SystemSchema.json")) { - namespace = Namespace.parse(stream); - } catch (IOException cause) { - String message = lenientFormat("Failed to load SystemSchema.json due to %s", cause); + String message = lenientFormat("failed to initialize %s due to %s", cause); throw new IllegalStateException(message, cause); } - return new LayoutResolverNamespace(namespace.get()); + return new LayoutResolverNamespace(namespace.orElseThrow(() -> { + String message = lenientFormat("failed to initialize %s due to system schema parse error"); + return new IllegalStateException(message); + })); }); private SystemSchema() { diff --git a/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/schemas/Namespace.java b/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/schemas/Namespace.java index ea86669..83f032b 100644 --- a/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/schemas/Namespace.java +++ b/java/src/main/java/com/azure/data/cosmos/serialization/hybridrow/schemas/Namespace.java @@ -5,6 +5,8 @@ package com.azure.data.cosmos.serialization.hybridrow.schemas; import com.azure.data.cosmos.core.Json; import com.fasterxml.jackson.annotation.JsonProperty; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.InputStream; import java.util.ArrayList; @@ -13,6 +15,8 @@ import java.util.Optional; public class Namespace { + private static final Logger logger = LoggerFactory.getLogger(Json.class); + @JsonProperty(required = true) private String name; @@ -102,7 +106,11 @@ public class Namespace { */ public static Optional parse(InputStream stream) { Optional namespace = Json.parse(stream, Namespace.class); - namespace.ifPresent(SchemaValidator::validate); + try { + namespace.ifPresent(SchemaValidator::validate); + } catch (SchemaException error) { + logger.error("failed to parse {} due to ", Namespace.class, error); + } return namespace; } }