@@ -60,26 +60,36 @@ public JsonToken nextToken() throws IOException
60
60
_parser .setAvroContext (this );
61
61
_count = _decoder .readArrayStart ();
62
62
_state = (_count > 0 ) ? STATE_NAME : STATE_END ;
63
- return JsonToken .START_OBJECT ;
63
+ return ( _currToken = JsonToken .START_OBJECT ) ;
64
64
case STATE_NAME :
65
65
if (_index < _count ) {
66
66
_state = STATE_VALUE ;
67
67
_currentName = _decoder .readString ();
68
- return JsonToken .FIELD_NAME ;
68
+ return ( _currToken = JsonToken .FIELD_NAME ) ;
69
69
}
70
70
// need more data...
71
71
_count = _decoder .arrayNext ();
72
72
// more stuff?
73
73
if (_count > 0L ) {
74
74
_index = 0 ;
75
75
_currentName = _decoder .readString ();
76
- return JsonToken .FIELD_NAME ;
76
+ return ( _currToken = JsonToken .FIELD_NAME ) ;
77
77
}
78
78
// otherwise fall through:
79
79
case STATE_END :
80
+ final AvroReadContext parent = getParent ();
81
+ // as per [dataformats-binary#38], may need to reset, instead of bailing out
82
+ // ... note, however, that we can't as of yet test it, alas.
83
+ if (parent .inRoot ()) {
84
+ if (!_decoder .isEnd ()) {
85
+ _index = 0 ;
86
+ _state = STATE_START ;
87
+ return (_currToken = JsonToken .END_OBJECT );
88
+ }
89
+ }
80
90
_state = STATE_DONE ;
81
- _parser .setAvroContext (getParent () );
82
- return JsonToken .END_OBJECT ;
91
+ _parser .setAvroContext (parent );
92
+ return ( _currToken = JsonToken .END_OBJECT ) ;
83
93
case STATE_VALUE :
84
94
break ;
85
95
case STATE_DONE :
@@ -93,7 +103,7 @@ public JsonToken nextToken() throws IOException
93
103
}
94
104
AvroStructureReader r = _structureReader .newReader (this , _parser , _decoder );
95
105
_parser .setAvroContext (r );
96
- return r .nextToken ();
106
+ return ( _currToken = r .nextToken () );
97
107
}
98
108
99
109
@ Override
0 commit comments