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

Attempting to emit multiple leave nodes in JSON causes nesting problem

XMLWordPrintable

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

      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)
      

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

              Created:
              Updated:
              Resolved: