1
1
package com .fasterxml .jackson .databind ;
2
2
3
- import java .io .*;
3
+ import java .io .File ;
4
+ import java .io .FileInputStream ;
5
+ import java .io .IOException ;
6
+ import java .io .InputStream ;
7
+ import java .io .Reader ;
4
8
import java .net .URL ;
5
9
import java .util .Iterator ;
6
10
import java .util .Locale ;
7
11
import java .util .Map ;
8
12
import java .util .TimeZone ;
9
13
import java .util .concurrent .ConcurrentHashMap ;
10
14
11
- import com .fasterxml .jackson .core .*;
15
+ import com .fasterxml .jackson .core .Base64Variant ;
16
+ import com .fasterxml .jackson .core .FormatSchema ;
17
+ import com .fasterxml .jackson .core .JsonFactory ;
18
+ import com .fasterxml .jackson .core .JsonGenerator ;
19
+ import com .fasterxml .jackson .core .JsonLocation ;
20
+ import com .fasterxml .jackson .core .JsonParseException ;
21
+ import com .fasterxml .jackson .core .JsonParser ;
22
+ import com .fasterxml .jackson .core .JsonProcessingException ;
23
+ import com .fasterxml .jackson .core .JsonToken ;
24
+ import com .fasterxml .jackson .core .ObjectCodec ;
25
+ import com .fasterxml .jackson .core .TreeNode ;
26
+ import com .fasterxml .jackson .core .Version ;
27
+ import com .fasterxml .jackson .core .Versioned ;
28
+ import com .fasterxml .jackson .core .filter .FilteringParserDelegate ;
29
+ import com .fasterxml .jackson .core .filter .JsonPointerBasedFilter ;
30
+ import com .fasterxml .jackson .core .filter .TokenFilter ;
12
31
import com .fasterxml .jackson .core .type .ResolvedType ;
13
32
import com .fasterxml .jackson .core .type .TypeReference ;
14
33
import com .fasterxml .jackson .databind .cfg .ContextAttributes ;
@@ -38,7 +57,7 @@ public class ObjectReader
38
57
implements Versioned , java .io .Serializable // since 2.1
39
58
{
40
59
private static final long serialVersionUID = 1L ; // since 2.5
41
-
60
+
42
61
private final static JavaType JSON_NODE_TYPE = SimpleType .constructUnsafe (JsonNode .class );
43
62
44
63
/*
@@ -69,6 +88,12 @@ public class ObjectReader
69
88
*/
70
89
protected final boolean _unwrapRoot ;
71
90
91
+ /**
92
+ * Filter to be consider for JsonParser.
93
+ * Default value to be null as filter not considered.
94
+ */
95
+ private TokenFilter _filter ;
96
+
72
97
/*
73
98
/**********************************************************
74
99
/* Configuration that can be changed during building
@@ -178,6 +203,7 @@ protected ObjectReader(ObjectMapper mapper, DeserializationConfig config,
178
203
179
204
_rootDeserializer = _prefetchRootDeserializer (valueType );
180
205
_dataFormatReaders = null ;
206
+ _filter = null ;
181
207
}
182
208
183
209
/**
@@ -204,6 +230,7 @@ protected ObjectReader(ObjectReader base, DeserializationConfig config,
204
230
_injectableValues = injectableValues ;
205
231
_unwrapRoot = config .useRootWrapping ();
206
232
_dataFormatReaders = dataFormatReaders ;
233
+ _filter = base ._filter ;
207
234
}
208
235
209
236
/**
@@ -224,6 +251,7 @@ protected ObjectReader(ObjectReader base, DeserializationConfig config)
224
251
_injectableValues = base ._injectableValues ;
225
252
_unwrapRoot = config .useRootWrapping ();
226
253
_dataFormatReaders = base ._dataFormatReaders ;
254
+ _filter = base ._filter ;
227
255
}
228
256
229
257
protected ObjectReader (ObjectReader base , JsonFactory f )
@@ -243,6 +271,7 @@ protected ObjectReader(ObjectReader base, JsonFactory f)
243
271
_injectableValues = base ._injectableValues ;
244
272
_unwrapRoot = base ._unwrapRoot ;
245
273
_dataFormatReaders = base ._dataFormatReaders ;
274
+ _filter = base ._filter ;
246
275
}
247
276
248
277
/**
@@ -1053,7 +1082,8 @@ public <T> T readValue(InputStream src)
1053
1082
if (_dataFormatReaders != null ) {
1054
1083
return (T ) _detectBindAndClose (_dataFormatReaders .findFormat (src ), false );
1055
1084
}
1056
- return (T ) _bindAndClose (_parserFactory .createParser (src ));
1085
+
1086
+ return (T ) _bindAndClose (considerFilter (_parserFactory .createParser (src )));
1057
1087
}
1058
1088
1059
1089
/**
@@ -1069,7 +1099,8 @@ public <T> T readValue(Reader src)
1069
1099
if (_dataFormatReaders != null ) {
1070
1100
_reportUndetectableSource (src );
1071
1101
}
1072
- return (T ) _bindAndClose (_parserFactory .createParser (src ));
1102
+
1103
+ return (T ) _bindAndClose (considerFilter (_parserFactory .createParser (src )));
1073
1104
}
1074
1105
1075
1106
/**
@@ -1085,7 +1116,8 @@ public <T> T readValue(String src)
1085
1116
if (_dataFormatReaders != null ) {
1086
1117
_reportUndetectableSource (src );
1087
1118
}
1088
- return (T ) _bindAndClose (_parserFactory .createParser (src ));
1119
+
1120
+ return (T ) _bindAndClose (considerFilter (_parserFactory .createParser (src )));
1089
1121
}
1090
1122
1091
1123
/**
@@ -1101,7 +1133,8 @@ public <T> T readValue(byte[] src)
1101
1133
if (_dataFormatReaders != null ) {
1102
1134
return (T ) _detectBindAndClose (src , 0 , src .length );
1103
1135
}
1104
- return (T ) _bindAndClose (_parserFactory .createParser (src ));
1136
+
1137
+ return (T ) _bindAndClose (considerFilter (_parserFactory .createParser (src )));
1105
1138
}
1106
1139
1107
1140
/**
@@ -1117,7 +1150,8 @@ public <T> T readValue(byte[] src, int offset, int length)
1117
1150
if (_dataFormatReaders != null ) {
1118
1151
return (T ) _detectBindAndClose (src , offset , length );
1119
1152
}
1120
- return (T ) _bindAndClose (_parserFactory .createParser (src , offset , length ));
1153
+
1154
+ return (T ) _bindAndClose (considerFilter (_parserFactory .createParser (src , offset , length )));
1121
1155
}
1122
1156
1123
1157
@ SuppressWarnings ("unchecked" )
@@ -1127,7 +1161,8 @@ public <T> T readValue(File src)
1127
1161
if (_dataFormatReaders != null ) {
1128
1162
return (T ) _detectBindAndClose (_dataFormatReaders .findFormat (_inputStream (src )), true );
1129
1163
}
1130
- return (T ) _bindAndClose (_parserFactory .createParser (src ));
1164
+
1165
+ return (T ) _bindAndClose (considerFilter (_parserFactory .createParser (src )));
1131
1166
}
1132
1167
1133
1168
/**
@@ -1143,7 +1178,8 @@ public <T> T readValue(URL src)
1143
1178
if (_dataFormatReaders != null ) {
1144
1179
return (T ) _detectBindAndClose (_dataFormatReaders .findFormat (_inputStream (src )), true );
1145
1180
}
1146
- return (T ) _bindAndClose (_parserFactory .createParser (src ));
1181
+
1182
+ return (T ) _bindAndClose (considerFilter (_parserFactory .createParser (src )));
1147
1183
}
1148
1184
1149
1185
/**
@@ -1160,7 +1196,8 @@ public <T> T readValue(JsonNode src)
1160
1196
if (_dataFormatReaders != null ) {
1161
1197
_reportUndetectableSource (src );
1162
1198
}
1163
- return (T ) _bindAndClose (treeAsTokens (src ));
1199
+
1200
+ return (T ) _bindAndClose (considerFilter (treeAsTokens (src )));
1164
1201
}
1165
1202
1166
1203
/**
@@ -1178,7 +1215,8 @@ public JsonNode readTree(InputStream in)
1178
1215
if (_dataFormatReaders != null ) {
1179
1216
return _detectBindAndCloseAsTree (in );
1180
1217
}
1181
- return _bindAndCloseAsTree (_parserFactory .createParser (in ));
1218
+
1219
+ return _bindAndCloseAsTree (considerFilter (_parserFactory .createParser (in )));
1182
1220
}
1183
1221
1184
1222
/**
@@ -1196,7 +1234,8 @@ public JsonNode readTree(Reader r)
1196
1234
if (_dataFormatReaders != null ) {
1197
1235
_reportUndetectableSource (r );
1198
1236
}
1199
- return _bindAndCloseAsTree (_parserFactory .createParser (r ));
1237
+
1238
+ return _bindAndCloseAsTree (considerFilter (_parserFactory .createParser (r )));
1200
1239
}
1201
1240
1202
1241
/**
@@ -1214,7 +1253,8 @@ public JsonNode readTree(String json)
1214
1253
if (_dataFormatReaders != null ) {
1215
1254
_reportUndetectableSource (json );
1216
1255
}
1217
- return _bindAndCloseAsTree (_parserFactory .createParser (json ));
1256
+
1257
+ return _bindAndCloseAsTree (considerFilter (_parserFactory .createParser (json )));
1218
1258
}
1219
1259
1220
1260
/*
@@ -1268,7 +1308,8 @@ public <T> MappingIterator<T> readValues(InputStream src)
1268
1308
if (_dataFormatReaders != null ) {
1269
1309
return _detectBindAndReadValues (_dataFormatReaders .findFormat (src ), false );
1270
1310
}
1271
- return _bindAndReadValues (_parserFactory .createParser (src ));
1311
+
1312
+ return _bindAndReadValues (considerFilter (_parserFactory .createParser (src )));
1272
1313
}
1273
1314
1274
1315
/**
@@ -1281,7 +1322,7 @@ public <T> MappingIterator<T> readValues(Reader src)
1281
1322
if (_dataFormatReaders != null ) {
1282
1323
_reportUndetectableSource (src );
1283
1324
}
1284
- JsonParser p = _parserFactory .createParser (src );
1325
+ JsonParser p = considerFilter ( _parserFactory .createParser (src ) );
1285
1326
_initForMultiRead (p );
1286
1327
p .nextToken ();
1287
1328
DeserializationContext ctxt = createDeserializationContext (p );
@@ -1300,7 +1341,7 @@ public <T> MappingIterator<T> readValues(String json)
1300
1341
if (_dataFormatReaders != null ) {
1301
1342
_reportUndetectableSource (json );
1302
1343
}
1303
- JsonParser p = _parserFactory .createParser (json );
1344
+ JsonParser p = considerFilter ( _parserFactory .createParser (json ) );
1304
1345
_initForMultiRead (p );
1305
1346
p .nextToken ();
1306
1347
DeserializationContext ctxt = createDeserializationContext (p );
@@ -1316,7 +1357,7 @@ public <T> MappingIterator<T> readValues(byte[] src, int offset, int length)
1316
1357
if (_dataFormatReaders != null ) {
1317
1358
return _detectBindAndReadValues (_dataFormatReaders .findFormat (src , offset , length ), false );
1318
1359
}
1319
- return _bindAndReadValues (_parserFactory .createParser (src ));
1360
+ return _bindAndReadValues (considerFilter ( _parserFactory .createParser (src ) ));
1320
1361
}
1321
1362
1322
1363
/**
@@ -1337,7 +1378,7 @@ public <T> MappingIterator<T> readValues(File src)
1337
1378
return _detectBindAndReadValues (
1338
1379
_dataFormatReaders .findFormat (_inputStream (src )), false );
1339
1380
}
1340
- return _bindAndReadValues (_parserFactory .createParser (src ));
1381
+ return _bindAndReadValues (considerFilter ( _parserFactory .createParser (src ) ));
1341
1382
}
1342
1383
1343
1384
/**
@@ -1352,7 +1393,7 @@ public <T> MappingIterator<T> readValues(URL src)
1352
1393
return _detectBindAndReadValues (
1353
1394
_dataFormatReaders .findFormat (_inputStream (src )), true );
1354
1395
}
1355
- return _bindAndReadValues (_parserFactory .createParser (src ));
1396
+ return _bindAndReadValues (considerFilter ( _parserFactory .createParser (src ) ));
1356
1397
}
1357
1398
1358
1399
/*
@@ -1422,6 +1463,14 @@ protected Object _bind(JsonParser p, Object valueToUpdate) throws IOException
1422
1463
return result ;
1423
1464
}
1424
1465
1466
+ /**
1467
+ * Consider filter when creating JsonParser.
1468
+ */
1469
+ private JsonParser considerFilter (final JsonParser p ) {
1470
+ return _filter == null && !FilteringParserDelegate .class .isInstance (p )
1471
+ ? p : new FilteringParserDelegate (p , _filter , false , false );
1472
+ }
1473
+
1425
1474
protected Object _bindAndClose (JsonParser p ) throws IOException
1426
1475
{
1427
1476
try {
@@ -1734,4 +1783,9 @@ protected JsonDeserializer<Object> _prefetchRootDeserializer(JavaType valueType)
1734
1783
}
1735
1784
return deser ;
1736
1785
}
1786
+
1787
+ public ObjectReader at (final String value ) throws JsonParseException , IOException {
1788
+ _filter = new JsonPointerBasedFilter (value );
1789
+ return this ;
1790
+ }
1737
1791
}
0 commit comments