6
6
import com .fasterxml .jackson .annotation .JsonProperty ;
7
7
import com .fasterxml .jackson .annotation .JsonPropertyOrder ;
8
8
import com .fasterxml .jackson .core .JsonParser ;
9
+ import com .fasterxml .jackson .core .JsonToken ;
10
+ import com .fasterxml .jackson .databind .ObjectReader ;
9
11
import com .fasterxml .jackson .dataformat .protobuf .schema .ProtobufSchema ;
10
12
11
13
public class ReadNestedUnknownFieldsTest extends ProtobufTestBase
@@ -124,7 +126,7 @@ public static class Embed {
124
126
125
127
private final ProtobufMapper MAPPER = new ProtobufMapper ();
126
128
127
- // [dataformats-binary#108]
129
+ // [dataformats-binary#108], [dataformats-binary#584]
128
130
public void testMultipleUnknown () throws Exception
129
131
{
130
132
MoreNestedField moreNestedField = new MoreNestedField ();
@@ -133,15 +135,36 @@ public void testMultipleUnknown() throws Exception
133
135
nestedTwoField .setNested2 (2 );
134
136
moreNestedField .setF1 (nestedTwoField );
135
137
136
- byte [] in = MAPPER .writerFor (MoreNestedField .class )
138
+ byte [] doc = MAPPER .writerFor (MoreNestedField .class )
137
139
.with (MAPPER .generateSchemaFor (MoreNestedField .class ))
138
140
.writeValueAsBytes (moreNestedField );
141
+ final ProtobufSchema schema = MAPPER .generateSchemaFor (LessNestedField .class );
142
+ final ObjectReader protoR = MAPPER .readerFor (LessNestedField .class )
143
+ .with (schema )
144
+ // important: skip through unknown
145
+ .with (JsonParser .Feature .IGNORE_UNDEFINED );
146
+
147
+ // 30-Apr-2025, tatu: [dataformats-binary#584]: First, iterate over tokens
148
+ try (JsonParser p = protoR .createParser (doc )) {
149
+ assertToken (JsonToken .START_OBJECT , p .nextToken ());
150
+ assertToken (JsonToken .FIELD_NAME , p .nextToken ());
151
+ assertEquals ("f1" , p .currentName ());
152
+ assertToken (JsonToken .START_OBJECT , p .nextToken ());
153
+ assertToken (JsonToken .FIELD_NAME , p .nextToken ());
154
+ assertEquals ("nested2" , p .currentName ());
155
+ assertToken (JsonToken .VALUE_NUMBER_INT , p .nextToken ());
156
+ assertEquals (2 , p .getIntValue ());
157
+ assertToken (JsonToken .END_OBJECT , p .nextToken ());
158
+ assertToken (JsonToken .END_OBJECT , p .nextToken ());
159
+ assertNull (p .nextToken ());
160
+ }
139
161
162
+ // and only then test databinding
140
163
LessNestedField lesser = MAPPER .readerFor (LessNestedField .class )
141
164
.with (MAPPER .generateSchemaFor (LessNestedField .class ))
142
165
// important: skip through unknown
143
166
.with (JsonParser .Feature .IGNORE_UNDEFINED )
144
- .readValue (in );
167
+ .readValue (doc );
145
168
146
169
assertEquals (moreNestedField .getF1 ().getNested2 (), lesser .getF1 ().getNested2 ());
147
170
}
0 commit comments