[YANGTOOLS-1046] The generated Json is missing a closing curly bracket Created: 02/Dec/19  Updated: 03/Dec/19  Resolved: 03/Dec/19

Status: Resolved
Project: yangtools
Component/s: codecs
Affects Version/s: None
Fix Version/s: 3.0.6

Type: Bug Priority: Medium
Reporter: Ahmed Triki Assignee: Ahmed Triki
Resolution: Won't Do Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Relates
relates to YANGTOOLS-1029 Attempting to emit multiple leave nod... Resolved

 Description   

When generating Json with codec.gson.JSONNormalizedNodeStreamWriter,
a closing curly bracket is missing.



 Comments   
Comment by Robert Varga [ 02/Dec/19 ]

What version, what are the steps to reproduce?

Comment by Ahmed Triki [ 03/Dec/19 ]

I am using the method createJsonStringFromDataObject (below) to generate json from DataObject. The version of org.opendaylight.yangtools/odl-yangtools-codec is 3.0.6.

public String createJsonStringFromDataObject(final InstanceIdentifier<?> id, DataObject object) throws Exception {

        final SchemaPath scPath = SchemaPath
                .create(FluentIterable.from(id.getPathArguments()).transform(new Function<PathArgument, QName>() {
                    @Override
                    public QName apply(final PathArgument input) {
                        return BindingReflections.findQName(input.getType());
                    }
                }), true);
        final Writer writer = new StringWriter();
        NormalizedNodeStreamWriter domWriter;

        try {
            // Prepare the variables
            final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create();
            Iterable<? extends YangModuleInfo> moduleInfos = Collections
                    .singleton(BindingReflections.getModuleInfo(object.getClass()));
            moduleContext.addModuleInfos(moduleInfos);
            SchemaContext schemaContext = moduleContext.tryToCreateSchemaContext().get();
            BindingRuntimeContext bindingContext;
            bindingContext = BindingRuntimeContext.create(moduleContext, schemaContext);
            final BindingNormalizedNodeCodecRegistry codecRegistry =
                new BindingNormalizedNodeCodecRegistry(bindingContext);

            /*
             * This function needs : - context - scPath.getParent() -
             * scPath.getLastComponent().getNamespace(), -
             * JsonWriterFactory.createJsonWriter(writer)
             */
            domWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
                JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.createSimple(schemaContext),
                scPath.getParent(), scPath.getLastComponent().getNamespace(),
                JsonWriterFactory.createJsonWriter(writer, 2));
            // The write part
            final BindingStreamEventWriter bindingWriter = codecRegistry.newWriter(id, domWriter);
            codecRegistry.getSerializer(id.getTargetType()).serialize(object, bindingWriter);
            writer.close();
        } catch (IOException e) {
            LOG.error(" writer error ");
        } catch (YangSyntaxErrorException e) {
            LOG.warn("exception {} occured during json file creation", e.getMessage(), e);
        } catch (ReactorException e) {
            LOG.warn(" exception {} occured during json file creation", e.getMessage(), e);
        }
        return writer.toString();
    }
Comment by Robert Varga [ 03/Dec/19 ]

Right, you need to close domWriter.

Generated at Wed Feb 07 20:55:02 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.