Uploaded image for project: 'yangtools'
  1. yangtools
  2. YANGTOOLS-1029

Attempting to emit multiple leave nodes in JSON causes nesting problem

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Medium
    • Resolution: Done
    • None
    • 3.0.6, 2.1.13, 4.0.2
    • codecs
    • None

    Description

      This was discovered during YANGTOOLS-1027 backport to 2.1.x. On that branch leaf nodes do not emit an endNode() event, hence when they are written out and the stream is closed, we get:

      java.io.IOException: Incomplete document
      	at com.google.gson.stream.JsonWriter.close(JsonWriter.java:559)
      	at org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter.closeWriter(JSONNormalizedNodeStreamWriter.java:319)
      	at org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter$Exclusive.close(JSONNormalizedNodeStreamWriter.java:53)
      	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.close(NormalizedNodeWriter.java:116)
      	at org.opendaylight.yangtools.yang.data.codec.gson.AbstractYT1027Test.toJSON(AbstractYT1027Test.java:158)
      	at org.opendaylight.yangtools.yang.data.codec.gson.AbstractYT1027Test.testUint64Serialization(AbstractYT1027Test.java:116)

      which we're not getting on 3.0.x or 4.0.x. Those newer branches emit a single leaf, whose endNode() event ends up also closing the root, hence masking the above.

      An attempt to emit two leaf nodes, though, will result in:

      java.lang.IllegalStateException: Nesting problem.
      	at com.google.gson.stream.JsonWriter.beforeName(JsonWriter.java:616)
      	at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:401)
      	at com.google.gson.stream.JsonWriter.value(JsonWriter.java:527)
      	at org.opendaylight.yangtools.yang.data.codec.gson.NumberJSONCodec.writeValue(NumberJSONCodec.java:26)
      	at org.opendaylight.yangtools.yang.data.codec.gson.NumberJSONCodec.writeValue(NumberJSONCodec.java:1)
      	at org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter.writeValue(JSONNormalizedNodeStreamWriter.java:377)
      	at org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter.scalarValue(JSONNormalizedNodeStreamWriter.java:359)
      	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessAsSimpleNode(NormalizedNodeWriter.java:147)
      	at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:107)
      	at org.opendaylight.yangtools.yang.data.codec.gson.AbstractYT1027Test.toJSON(AbstractYT1027Test.java:157)
      	at org.opendaylight.yangtools.yang.data.codec.gson.AbstractYT1027Test.testDecimalSerialization(AbstractYT1027Test.java:106)
      

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              rovarga Robert Varga
              rovarga Robert Varga
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: