Skip to content

Commit aae1b37

Browse files
johhud1cowtowncoder
authored andcommitted
SmileParser getValueAsString() issue with JsonToken.FIELD_NAME (#540)
1 parent a7232c6 commit aae1b37

File tree

9 files changed

+100
-40
lines changed

9 files changed

+100
-40
lines changed

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

+8
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ private void _testSimplePojoViaParser(Employee empl, byte[] avro,
6060
assertFalse(p.hasTextCharacters());
6161
assertEquals("name", p.currentName());
6262
assertEquals("name", p.getText());
63+
assertEquals("name", p.getValueAsString());
64+
assertEquals("name", p.getValueAsString("x"));
6365
assertToken(JsonToken.VALUE_STRING, p.nextToken());
6466
assertEquals(empl.name, p.getText());
6567

@@ -70,6 +72,9 @@ private void _testSimplePojoViaParser(Employee empl, byte[] avro,
7072
assertTrue(p.hasTextCharacters());
7173
assertToken(JsonToken.FIELD_NAME, p.nextToken());
7274
assertEquals("age", p.currentName());
75+
assertEquals("age", p.getText());
76+
assertEquals("age", p.getValueAsString());
77+
assertEquals("age", p.getValueAsString("x"));
7378
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
7479
assertEquals(NumberType.INT, p.getNumberType());
7580
assertEquals(Integer.valueOf(empl.age), p.getNumberValue());
@@ -82,6 +87,9 @@ private void _testSimplePojoViaParser(Employee empl, byte[] avro,
8287
sw = new StringWriter();
8388
assertEquals(6, p.getText(sw));
8489
assertEquals("emails", sw.toString());
90+
assertEquals("emails", p.getText());
91+
assertEquals("emails", p.getValueAsString());
92+
assertEquals("emails", p.getValueAsString("x"));
8593

8694
assertToken(JsonToken.START_ARRAY, p.nextToken());
8795
assertToken(JsonToken.VALUE_STRING, p.nextToken());

cbor/src/main/java/com/fasterxml/jackson/dataformat/cbor/CBORParser.java

+6
Original file line numberDiff line numberDiff line change
@@ -1714,6 +1714,9 @@ public String getValueAsString() throws IOException
17141714
if (_currToken == JsonToken.VALUE_STRING) {
17151715
return _sharedString == null ? _textBuffer.contentsAsString() : _sharedString;
17161716
}
1717+
if (_currToken == JsonToken.FIELD_NAME) {
1718+
return currentName();
1719+
}
17171720
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
17181721
return null;
17191722
}
@@ -1724,6 +1727,9 @@ public String getValueAsString() throws IOException
17241727
public String getValueAsString(String defaultValue) throws IOException
17251728
{
17261729
if (_currToken != JsonToken.VALUE_STRING) {
1730+
if (_currToken == JsonToken.FIELD_NAME) {
1731+
return currentName();
1732+
}
17271733
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
17281734
return defaultValue;
17291735
}

cbor/src/test/java/com/fasterxml/jackson/dataformat/cbor/parse/BasicParserTest.java

+14
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,14 @@ public void testStringField() throws IOException {
248248
assertEquals(JsonToken.START_OBJECT, parser.nextToken());
249249
assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
250250
assertEquals("a", parser.currentName());
251+
assertEquals("a", parser.getText());
252+
assertEquals("a", parser.getValueAsString());
253+
assertEquals("a", parser.getValueAsString("x"));
251254
assertEquals(JsonToken.VALUE_STRING, parser.nextToken());
252255
assertEquals("a", parser.currentName());
253256
assertEquals("b", parser.getText());
257+
assertEquals("b", parser.getValueAsString());
258+
assertEquals("b", parser.getValueAsString("x"));
254259
assertEquals(1, parser.getTextLength());
255260
assertEquals(JsonToken.END_OBJECT, parser.nextToken());
256261

@@ -281,14 +286,23 @@ public void testNestedObject() throws IOException
281286

282287
assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
283288
assertEquals("ob", parser.currentName());
289+
assertEquals("ob", parser.getText());
290+
assertEquals("ob", parser.getValueAsString());
291+
assertEquals("ob", parser.getValueAsString("x"));
284292
assertEquals(JsonToken.START_OBJECT, parser.nextToken());
285293
assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
286294
assertEquals("num", parser.currentName());
295+
assertEquals("num", parser.getText());
296+
assertEquals("num", parser.getValueAsString());
297+
assertEquals("num", parser.getValueAsString("y"));
287298
assertEquals(JsonToken.VALUE_NUMBER_INT, parser.nextToken());
288299
assertEquals(JsonToken.END_OBJECT, parser.nextToken());
289300

290301
assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
291302
assertEquals("arr", parser.currentName());
303+
assertEquals("arr", parser.getText());
304+
assertEquals("arr", parser.getValueAsString());
305+
assertEquals("arr", parser.getValueAsString("z"));
292306
assertEquals(JsonToken.START_ARRAY, parser.nextToken());
293307
assertEquals(JsonToken.END_ARRAY, parser.nextToken());
294308

ion/src/test/java/com/fasterxml/jackson/dataformat/ion/IonParserTest.java

+3
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ public void testUnknownSymbolExceptionForFieldNameIsWrapped() throws IOException
169169
Assert.assertEquals(JsonToken.START_OBJECT, parser.nextToken());
170170
Assert.assertEquals(JsonToken.FIELD_NAME, parser.nextToken());
171171
Assert.assertEquals("a", parser.currentName());
172+
Assert.assertEquals("a", parser.getText());
173+
Assert.assertEquals("a", parser.getValueAsString());
174+
Assert.assertEquals("a", parser.getValueAsString("b"));
172175
Assert.assertEquals(JsonToken.VALUE_NUMBER_INT, parser.nextValue());
173176
Assert.assertEquals(1, parser.getIntValue());
174177
parser.nextValue(); // Should encounter unknown symbol and fail

ion/src/test/java/com/fasterxml/jackson/dataformat/ion/SimpleIonReadTest.java

+24-22
Original file line numberDiff line numberDiff line change
@@ -23,32 +23,37 @@
2323
import com.fasterxml.jackson.core.JsonToken;
2424

2525
public class SimpleIonReadTest {
26+
private final IonFactory ION_F = new IonFactory();
2627
// // // Actual tests; low level
2728

2829
@Test
2930
public void testSimpleStructRead() throws IOException
3031
{
31-
IonFactory f = new IonFactory();
32-
JsonParser jp = f.createParser("{a:\"value\",b:42, c:null}");
33-
assertEquals(JsonToken.START_OBJECT, jp.nextToken());
34-
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
35-
assertEquals("a", jp.currentName());
36-
assertEquals(JsonToken.VALUE_STRING, jp.nextToken());
37-
assertEquals("value", jp.getText());
38-
assertEquals(JsonToken.VALUE_NUMBER_INT, jp.nextValue());
39-
assertEquals("b", jp.currentName());
40-
assertEquals(42, jp.getIntValue());
41-
assertEquals(JsonToken.VALUE_NULL, jp.nextValue());
42-
assertEquals("c", jp.currentName());
43-
assertEquals(JsonToken.END_OBJECT, jp.nextToken());
44-
jp.close();
32+
try (JsonParser p = ION_F.createParser("{a:\"value\",b:42, c:null}")) {
33+
assertEquals(JsonToken.START_OBJECT, p.nextToken());
34+
assertEquals(JsonToken.FIELD_NAME, p.nextToken());
35+
assertEquals("a", p.currentName());
36+
assertEquals("a", p.getText());
37+
assertEquals("a", p.getValueAsString());
38+
assertEquals("a", p.getValueAsString("x"));
39+
assertEquals(JsonToken.VALUE_STRING, p.nextToken());
40+
assertEquals("value", p.getText());
41+
assertEquals("value", p.getText());
42+
assertEquals("value", p.getValueAsString());
43+
assertEquals("value", p.getValueAsString("x"));
44+
assertEquals(JsonToken.VALUE_NUMBER_INT, p.nextValue());
45+
assertEquals("b", p.currentName());
46+
assertEquals(42, p.getIntValue());
47+
assertEquals(JsonToken.VALUE_NULL, p.nextValue());
48+
assertEquals("c", p.currentName());
49+
assertEquals(JsonToken.END_OBJECT, p.nextToken());
50+
}
4551
}
4652

4753
@Test
4854
public void testSimpleListRead() throws IOException
4955
{
50-
IonFactory f = new IonFactory();
51-
JsonParser jp = f.createParser("[ 12, true, null, \"abc\" ]");
56+
JsonParser jp = ION_F.createParser("[ 12, true, null, \"abc\" ]");
5257
assertEquals(JsonToken.START_ARRAY, jp.nextToken());
5358
assertEquals(JsonToken.VALUE_NUMBER_INT, jp.nextValue());
5459
assertEquals(12, jp.getIntValue());
@@ -63,8 +68,7 @@ public void testSimpleListRead() throws IOException
6368
@Test
6469
public void testSimpleStructAndArray() throws IOException
6570
{
66-
IonFactory f = new IonFactory();
67-
JsonParser jp = f.createParser("{a:[\"b\",\"c\"], b:null}");
71+
JsonParser jp = ION_F.createParser("{a:[\"b\",\"c\"], b:null}");
6872
assertEquals(JsonToken.START_OBJECT, jp.nextToken());
6973
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
7074
assertEquals("a", jp.currentName());
@@ -85,8 +89,7 @@ public void testSimpleStructAndArray() throws IOException
8589
@Test
8690
public void testMixed() throws IOException
8791
{
88-
IonFactory f = new IonFactory();
89-
JsonParser jp = f.createParser("{a:[ 1, { b: 13}, \"xyz\" ], c:null, d:true}");
92+
JsonParser jp = ION_F.createParser("{a:[ 1, { b: 13}, \"xyz\" ], c:null, d:true}");
9093
assertEquals(JsonToken.START_OBJECT, jp.nextToken());
9194
assertEquals(JsonToken.START_ARRAY, jp.nextValue());
9295
//assertEquals("a", jp.currentName());
@@ -113,8 +116,7 @@ public void testMixed() throws IOException
113116

114117
@Test
115118
public void testNullIonType() throws IOException {
116-
IonFactory f = new IonFactory();
117-
JsonParser jp = f.createParser("{a:\"value\",b:42, c:null.int}");
119+
JsonParser jp = ION_F.createParser("{a:\"value\",b:42, c:null.int}");
118120
assertEquals(JsonToken.START_OBJECT, jp.nextToken());
119121
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
120122
assertEquals("a", jp.currentName());

protobuf/src/main/java/com/fasterxml/jackson/dataformat/protobuf/ProtobufParser.java

+6
Original file line numberDiff line numberDiff line change
@@ -1420,6 +1420,9 @@ public String getValueAsString() throws IOException
14201420
}
14211421
return _textBuffer.contentsAsString();
14221422
}
1423+
if (_currToken == JsonToken.FIELD_NAME) {
1424+
return currentName();
1425+
}
14231426
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
14241427
return null;
14251428
}
@@ -1430,6 +1433,9 @@ public String getValueAsString() throws IOException
14301433
public String getValueAsString(String defaultValue) throws IOException
14311434
{
14321435
if (_currToken != JsonToken.VALUE_STRING) {
1436+
if (_currToken == JsonToken.FIELD_NAME) {
1437+
return currentName();
1438+
}
14331439
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
14341440
return defaultValue;
14351441
}

protobuf/src/test/java/com/fasterxml/jackson/dataformat/protobuf/ReadSimpleTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,18 @@ public void testReadPointLong() throws Exception
137137
assertNull(p.currentName());
138138
assertToken(JsonToken.FIELD_NAME, p.nextToken());
139139
assertEquals("x", p.currentName());
140+
assertEquals("x", p.getText());
141+
assertEquals("x", p.getValueAsString());
142+
assertEquals("x", p.getValueAsString("y"));
140143
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
141144
assertEquals(NumberType.LONG, p.getNumberType());
142145
assertEquals(NumberTypeFP.UNKNOWN, p.getNumberTypeFP());
143146
assertEquals(input.x, p.getIntValue());
144147
assertToken(JsonToken.FIELD_NAME, p.nextToken());
145148
assertEquals("y", p.currentName());
149+
assertEquals("y", p.getText());
150+
assertEquals("y", p.getValueAsString());
151+
assertEquals("y", p.getValueAsString("abc"));
146152
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
147153
assertEquals(input.y, p.getIntValue());
148154
assertToken(JsonToken.END_OBJECT, p.nextToken());

smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java

+6
Original file line numberDiff line numberDiff line change
@@ -1173,6 +1173,9 @@ public String getValueAsString() throws IOException
11731173
if (_currToken == JsonToken.VALUE_STRING) {
11741174
return _textBuffer.contentsAsString();
11751175
}
1176+
if (_currToken == JsonToken.FIELD_NAME) {
1177+
return currentName();
1178+
}
11761179
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
11771180
return null;
11781181
}
@@ -1183,6 +1186,9 @@ public String getValueAsString() throws IOException
11831186
public String getValueAsString(String defaultValue) throws IOException
11841187
{
11851188
if (_currToken != JsonToken.VALUE_STRING) {
1189+
if (_currToken == JsonToken.FIELD_NAME) {
1190+
return currentName();
1191+
}
11861192
if (_currToken == null || _currToken == JsonToken.VALUE_NULL || !_currToken.isScalarValue()) {
11871193
return defaultValue;
11881194
}

smile/src/test/java/com/fasterxml/jackson/dataformat/smile/parse/BasicParserTest.java

+27-18
Original file line numberDiff line numberDiff line change
@@ -217,30 +217,39 @@ public void testTrivialObject() throws IOException
217217
assertToken(JsonToken.FIELD_NAME, p.nextToken());
218218
assertEquals("abc", p.currentName());
219219
assertEquals("abc", p.getText());
220+
assertEquals("abc", p.getValueAsString());
221+
assertEquals("abc", p.getValueAsString("xyz"));
220222
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
221223
assertEquals(13, p.getIntValue());
222-
assertToken(JsonToken.END_OBJECT, p.nextToken());
223-
p.close();
224+
assertToken(JsonToken.END_OBJECT, p.nextToken());
225+
p.close();
224226
}
225227

226228
public void testSimpleObject() throws IOException
227229
{
228-
byte[] data = _smileDoc("{\"a\":8, \"b\" : [ true ], \"c\" : { }, \"d\":{\"e\":null}}");
229-
SmileParser p = _smileParser(data);
230-
assertNull(p.getCurrentToken());
231-
assertToken(JsonToken.START_OBJECT, p.nextToken());
230+
byte[] data = _smileDoc("{\"a\":8, \"b\" : [ true ], \"c\" : { }, \"d\":{\"e\":null}}");
231+
SmileParser p = _smileParser(data);
232+
assertNull(p.currentToken());
233+
assertToken(JsonToken.START_OBJECT, p.nextToken());
232234

233-
assertToken(JsonToken.FIELD_NAME, p.nextToken());
234-
assertEquals("a", p.currentName());
235-
assertEquals("a", p.getText());
236-
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
237-
assertEquals(8, p.getIntValue());
235+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
236+
assertEquals("a", p.currentName());
237+
assertEquals("a", p.getText());
238+
assertEquals("a", p.getValueAsString());
239+
assertEquals("a", p.getValueAsString("x"));
238240

239-
assertToken(JsonToken.FIELD_NAME, p.nextToken());
240-
assertEquals("b", p.currentName());
241-
assertToken(JsonToken.START_ARRAY, p.nextToken());
242-
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
243-
assertToken(JsonToken.END_ARRAY, p.nextToken());
241+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
242+
assertEquals(8, p.getIntValue());
243+
244+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
245+
assertEquals("b", p.currentName());
246+
assertEquals("b", p.getText());
247+
assertEquals("b", p.getValueAsString());
248+
assertEquals("b", p.getValueAsString("y"));
249+
250+
assertToken(JsonToken.START_ARRAY, p.nextToken());
251+
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
252+
assertToken(JsonToken.END_ARRAY, p.nextToken());
244253

245254
assertToken(JsonToken.FIELD_NAME, p.nextToken());
246255
assertEquals("c", p.currentName());
@@ -285,8 +294,8 @@ public void testNestedObject() throws IOException
285294

286295
public void testJsonSampleDoc() throws IOException
287296
{
288-
byte[] data = _smileDoc(SAMPLE_DOC_JSON_SPEC);
289-
verifyJsonSpecSampleDoc(_smileParser(data), true);
297+
byte[] data = _smileDoc(SAMPLE_DOC_JSON_SPEC);
298+
verifyJsonSpecSampleDoc(_smileParser(data), true);
290299
}
291300

292301
public void testUnicodeStringValues() throws IOException

0 commit comments

Comments
 (0)