Skip to content

Commit e910aec

Browse files
committed
Yet more work, now decoding of root-level scalar sequences should finally work fully
1 parent 263f6c0 commit e910aec

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

avro/src/main/java/com/fasterxml/jackson/dataformat/avro/deser/ScalarReaderWrapper.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,37 @@ final class ScalarReaderWrapper extends AvroStructureReader
1111
private final AvroScalarReader _wrappedReader;
1212
private final BinaryDecoder _decoder;
1313
private final AvroParserImpl _parser;
14+
private final boolean _rootReader;
1415

1516
public ScalarReaderWrapper(AvroScalarReader wrappedReader) {
16-
this(wrappedReader, null, null);
17+
this(wrappedReader, null, null, false);
1718
}
1819

1920
private ScalarReaderWrapper(AvroScalarReader wrappedReader,
20-
AvroParserImpl parser, BinaryDecoder decoder) {
21+
AvroParserImpl parser, BinaryDecoder decoder, boolean root) {
2122
super(null, TYPE_ROOT);
2223
_wrappedReader = wrappedReader;
2324
_parser = parser;
2425
_decoder = decoder;
26+
_rootReader = root;
2527
}
2628

2729
@Override
2830
public ScalarReaderWrapper newReader(AvroReadContext parent,
2931
AvroParserImpl parser, BinaryDecoder decoder) {
30-
return new ScalarReaderWrapper(_wrappedReader, parser, decoder);
32+
return new ScalarReaderWrapper(_wrappedReader, parser, decoder, parent.inRoot());
3133
}
3234

3335
@Override
3436
public JsonToken nextToken() throws IOException
3537
{
36-
if (_currToken == null) {
37-
JsonToken t = _wrappedReader.readValue(_parser, _decoder);
38-
_currToken = t;
39-
return t;
38+
// 19-Jan-2017, tatu: May need to be called multiple times, for root-level
39+
// sequences. Because of this need to check for EOF. But only after reading
40+
// one token successfully...
41+
if (_rootReader && _decoder.isEnd()) {
42+
return (_currToken = null);
4043
}
41-
return null;
44+
return (_currToken = _wrappedReader.readValue(_parser, _decoder));
4245
}
4346

4447
@Override

avro/src/test/java/com/fasterxml/jackson/dataformat/avro/RootSequenceTest.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ public void testReadWriteIntSequence() throws Exception
2828
sw.write(Integer.valueOf(-999));
2929
sw.close();
3030

31-
/*// comment out for now
3231
byte[] bytes = b.toByteArray();
3332
MappingIterator<Integer> it = MAPPER.readerFor(Integer.class)
3433
.with(schema)
@@ -37,11 +36,10 @@ public void testReadWriteIntSequence() throws Exception
3736
assertEquals(Integer.valueOf(1), it.nextValue());
3837
assertTrue(it.hasNextValue());
3938
assertEquals(Integer.valueOf(123456), it.nextValue());
40-
assertFalse(it.hasNextValue());
39+
assertTrue(it.hasNextValue());
4140
assertEquals(Integer.valueOf(-999), it.nextValue());
4241
assertFalse(it.hasNextValue());
4342
it.close();
44-
*/
4543
}
4644

4745
public void testReadWriteStringSequence() throws Exception
@@ -57,7 +55,6 @@ public void testReadWriteStringSequence() throws Exception
5755
sw.write("abcde");
5856
sw.close();
5957

60-
/*// comment out for now
6158
byte[] bytes = b.toByteArray();
6259
// should just be chars and 1-byte length for each
6360
assertEquals(14, bytes.length);
@@ -72,7 +69,6 @@ public void testReadWriteStringSequence() throws Exception
7269
assertEquals("abcde", it.nextValue());
7370
assertFalse(it.hasNextValue());
7471
it.close();
75-
*/
7672
}
7773

7874
public void testReadWriteEmployeeSequence() throws Exception

0 commit comments

Comments
 (0)