X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fcommon%2Fconverter%2FJsonStringConverter.java;fp=common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fcommon%2Fconverter%2FJsonStringConverter.java;h=52f8e4a191e17ec699bd6857fb492fb96d51ec94;hb=66f6af8141d231619ad9d6e6133910e14f3a32e2;hp=f29e66056fbdc9d94a32536b1204c13dc9a6d6a4;hpb=f99e1117649efbb02a14ba5906205da81f75c890;p=transportpce.git diff --git a/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java b/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java old mode 100644 new mode 100755 index f29e66056..52f8e4a19 --- a/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java @@ -13,9 +13,13 @@ import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; +import java.nio.charset.StandardCharsets; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -63,7 +67,7 @@ public class JsonStringConverter { JSONCodecFactory codecFactory = supplier .getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext()); try (Writer writer = new StringWriter(); - JsonWriter jsonWriter = JsonWriterFactory.createJsonWriter(writer, 4);) { + JsonWriter jsonWriter = JsonWriterFactory.createJsonWriter(writer, 4)) { EffectiveStatementInference rootNode = SchemaInferenceStack .of(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext()) .toInference(); @@ -93,17 +97,36 @@ public class JsonStringConverter { @SuppressWarnings("unchecked") public T createDataObjectFromJsonString(YangInstanceIdentifier path, String jsonString, JSONCodecFactorySupplier supplier) { - JsonReader reader = new JsonReader(new StringReader(jsonString)); + return createDataObjectFromReader(path, new StringReader(jsonString), supplier); + } + + public T createDataObjectFromInputStream(YangInstanceIdentifier path, InputStream jsonStream, + JSONCodecFactorySupplier supplier) { + return createDataObjectFromReader(path, new InputStreamReader(jsonStream, StandardCharsets.UTF_8), supplier); + } + + /** + * Create a dataObject of T type from Reader. + * @param path YangInstanceIdentifier + * @param inputReader Reader (could be all class implementing Reader) containing Json data. + * @param supplier RFC7951 or DRAFT_LHOTKA_NETMOD_YANG_JSON_02 + * @return the created object. + */ + private T createDataObjectFromReader(YangInstanceIdentifier path, Reader inputReader, + JSONCodecFactorySupplier supplier) { + NormalizedNodeResult result = new NormalizedNodeResult(); - try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - JsonParserStream jsonParser = JsonParserStream - .create( - streamWriter, - supplier.getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext()))) { + try (JsonReader reader = new JsonReader(inputReader); + NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + JsonParserStream jsonParser = JsonParserStream + .create( + streamWriter, + supplier.getShared(bindingDOMCodecServices + .getRuntimeContext().getEffectiveModelContext()))) { jsonParser.parse(reader); return (T) bindingDOMCodecServices.fromNormalizedNode(path, result.getResult()).getValue(); } catch (IOException e) { - LOG.warn("An error occured during parsing Json input stream", e); + LOG.warn("An error occured during parsing input reader", e); return null; } }