1 Project: jackson-core
2 
3 Contains core streaming reader (`JsonParser`) and writer (`JsonGenerator`) abstractions,
4 factory for constructing readers/writers (JsonFactory), as well as a minimal set
5 of interfaces needed for streaming level to make callbacks and call-throughs,
6 via `ObjectCodec` and `TreeNode`.
7 
8 Also includes implementation of this API for JSON.
9 Forms the base for other data formats as well, despite naming that suggests
10 JSON-specificity: naming is due to history, as Jackson started out as pure
11 JSON library.
12 
13 ------------------------------------------------------------------------
14 === Releases ===
15 ------------------------------------------------------------------------
16 
17 2.12.0 (not yet released)
18 
19 #618: Publish Gradle Module Metadata
20  (contributed by Jendrik J)
21 #619: Add `StreamReadCapability` for further format-based/format-agnostic
22   handling improvements
23 #627: Add `JsonParser.isExpectedNumberIntToken()` convenience method
24 #630: Add `StreamWriteCapability` for further format-based/format-agnostic
25   handling improvements
26 #631: Add `JsonParser.getNumberValueExact()` to allow precision-retaining buffering
27 - Deprecate `JsonParser.getCurrentTokenId()` (use `#currentTokenId()` instead)
28 
29 2.11.2 (02-Aug-2020)
30 2.11.1 (25-Jun-2020)
31 
32 No changes since 2.11.0
33 
34 2.11.0 (26-Apr-2020)
35 
36 #504: Add a String Array write method in the Streaming API
37  (requested by Michel F, impl contributed by Oleksandr P)
38 #565: Synchronize variants of `JsonGenerator#writeNumberField` with `JsonGenerator#writeNumber`
39  (contributed by valery1707@github)
40 #587: Add JsonGenerator#writeNumber(char[], int, int) method
41  (contributed by Volkan Y)
42 #606: Do not clear aggregated contents of `TextBuffer` when `releaseBuffers()` called
43 #609: `FilteringGeneratorDelegate` does not handle `writeString(Reader, int)`
44  (reported by Volkan Y)
45 #611: Optionally allow leading decimal in float tokens
46  (contributed by James A)
47 
48 2.10.5 (21-Jul-2020)
49 
50 #616: Parsing JSON with `ALLOW_MISSING_VALUE` enabled results in endless stream
51   of `VALUE_NULL` tokens
52  (reported by Justin L)
53 
54 2.10.4 (03-May-2020)
55 
56 #605: Handle case when system property access is restricted
57  (reported by rhernandez35@github)
58 
59 2.10.3 (03-Mar-2020)
60 
61 #592: DataFormatMatcher#getMatchedFormatName throws NPE when no match exists
62  (reported by Scott L)
63 #603: 'JsonParser.getCurrentLocation()` byte/char offset update incorrectly for big payloads
64  (reported, fix contributed by Fabien R)
65 
66 2.10.2 (05-Jan-2020)
67 
68 #580: FilteringGeneratorDelegate writeRawValue delegate to `writeRaw()`
69   instead of `writeRawValue()`
70  (reported by Arnaud R)
71 #582: `FilteringGeneratorDelegate` bug when filtering arrays (in 2.10.1)
72  (reported by alarribeau@github)
73 
74 2.10.1 (09-Nov-2019)
75 
76 #455: Jackson reports wrong locations for JsonEOFException
77  (reported by wastevenson@github, fix contributed by Todd O'B
78 #567: Add `uses` for `ObjectCodec` in module-info
79  (reported by Marc M)
80 #578: Array index out of bounds in hex lookup
81  (reported by Emily S)
82 
83 2.10.0 (26-Sep-2019)
84 
85 #433: Add Builder pattern for creating configured Stream factories
86 #464: Add "maximum unescaped char" configuration option for `JsonFactory` via builder
87 #467: Create `JsonReadFeature` to move JSON-specific `JsonParser.Feature`s to
88 #479: Improve thread-safety of buffer recycling
89 #480: `SerializableString` value can not directly render to Writer
90  (requested by Philippe M)
91 #481: Create `JsonWriteFeature` to move JSON-specific `JsonGenerator.Feature`s to
92 #484: Implement `UTF8JsonGenerator.writeRawValue(SerializableString)` (and
93   `writeRaw(..)`) more efficiently
94 #495: Create `StreamReadFeature` to move non-json specific `JsonParser.Feature`s to
95 #496: Create `StreamWriteFeature` to take over non-json-specific `JsonGenerator.Feature`s
96 #502: Make `DefaultPrettyPrinter.createInstance()` to fail for sub-classes
97 #506: Add missing type parameter for `TypeReference` in `ObjectCodec`
98 #508: Add new exception type `InputCoercionException` to be used for failed coercions
99   like overflow for `int`
100 #517: Add `JsonGenerator.writeStartObject(Object, int)` (needed by CBOR, maybe Avro)
101 #527: Add simple module-info for JDK9+, using Moditect
102 #533: UTF-8 BOM not accounted for in JsonLocation.getByteOffset()
103  (contributed by Fabien R)
104 #539: Reduce max size of recycled byte[]/char[] blocks by `TextBuffer`, `ByteArrayBuilder`
105 #547: `CharsToNameCanonicalizer`: Internal error on `SymbolTable.rehash()` with high
106   number of hash collisions
107  (reported by Alex R)
108 #548: ByteQuadsCanonicalizer: ArrayIndexOutOfBoundsException in addName
109  (reported by Alex R)
110 #549: Add configurability of "quote character" for JSON factory
111 #561: Misleading exception for unquoted String parsing
112 #563: Async parser does not keep track of Array context properly
113  (reported by Doug R)
114 - Rewrite `JsonGenerator.copyCurrentStructure()` to remove recursion)
115 - Add `missingNode()`, `nullNode()` in `TreeCodec`
116 - Add `JsonParserDelegate.delegate()` methods
117 
118 2.9.10 (21-Sep-2019)
119 
120 #540: UTF8StreamJsonParser: fix byte to int conversion for malformed escapes
121  (reported by Alex R and Sam S)
122 #556: 'IndexOutOfBoundsException' in UTF8JsonGenerator.writeString(Reader, len)
123   when using a negative length
124  (reported by jacob-alan-ward@github)
125 
126 2.9.9 (16-May-2019)
127 
128 #516: _inputPtr off-by-one in UTF8StreamJsonParser._parseNumber2()
129  (reported by Henrik G)
130 #531: Non-blocking parser reports incorrect locations when fed with non-zero offset
131  (reported by David N)
132 
133 2.9.8 (15-Dec-2018)
134 
135 #488: Fail earlier on coercions from "too big" `BigInteger` into
136   fixed-size types (`int`, `long`, `short`)
137 #510: Fix ArrayIndexOutofBoundsException found by LGTM.com
138  (reported by Alexander E-T)
139 - Improve exception message for missing Base64 padding (see databind#2183)
140 
141 2.9.7 (19-Sep-2018)
142 
143 #476: Problem with `BufferRecycler` via async parser (or when sharing parser
144  across threads)
145 #477: Exception while decoding Base64 value with escaped `=` character
146 #488: Fail earlier on coercions from "too big" `BigInteger` into
147   fixed-size types (`int`, `long`, `short`)
148 
149 2.9.6 (12-Jun-2018)
150 
151 #400: Add mechanism for forcing `BufferRecycler` released (to call on shutdown)
152  (contributed by Jeroen B)
153 #460: Failing to link `ObjectCodec` with `JsonFactory` copy constructor
154 #463: Ensure that `skipChildren()` of non-blocking `JsonParser` will throw
155    exception if not enough input
156   (requested by Doug R)
157 
158 2.9.5 (26-Mar-2018)
159 
160 No changes since 2.9.4
161 
162 2.9.4 (24-Jan-2018)
163 
164 #414: Base64 MIME variant does not ignore white space chars as per RFC2045
165  (reported by tmoschou@github)
166 #437: `ArrayIndexOutOfBoundsException` in `UTF8StreamJsonParser`
167  (reported by Igor A)
168 
169 2.9.3 (09-Dec-2017)
170 
171 #419: `ArrayIndexOutOfBoundsException` from `UTF32Reader.read()` on invalid input
172 
173 2.9.2 (13-Oct-2017)
174 
175 - New parent pom (`jackson-base`)
176 
177 2.9.1 (07-Sep-2017)
178 
179 #397: Add `Automatic-Module-Name` ("com.fasterxml.jackson.core") for JDK 9 module system
180 
181 2.9.0 (30-Jul-2017))
182 
183 #17: Add 'JsonGenerator.writeString(Reader r, int charLength)'
184  (constributed by Logan W)
185 #57: Add support for non-blocking ("async") JSON parsing
186 #208: Make use of `_matchCount` in `FilteringParserDelegate`
187  (contributed by Rafal F)
188 #242: Add new write methods in `JsonGenerator` for writing type id containers
189 #304: Optimize `NumberOutput.outputLong()` method
190 #306: Add new method in `JsonStreamContext` to construct `JsonPointer`
191 #312: Add `JsonProcessingException.clearLocation()` to allow clearing
192   possibly security-sensitive information
193  (contributed by Alex Y)
194 #314: Add a method in `JsonParser` to allow checking for "NaN" values
195 #323: Add `JsonParser.ALLOW_TRAILING_COMMA` to work for Arrays and Objects
196  (contributed by Brad H)
197 #325: `DataInput` backed parser should handle `EOFException` at end of doc
198  (reported by Brad H)
199 #330: `FilteringParserDelegate` seems to miss last closing `END_OBJECT`
200  (contributed by Rafal F)
201 #340: Making `WriterBasedJsonGenerator` non-final
202  (requested by rfoltyns@github)
203 #356: Improve indication of "source reference" in `JsonLocation` wrt `byte[]`,`char[]`
204 #372: JsonParserSequence#skipChildren() throws exception when current delegate is
205   TokenBuffer.Parser with "incomplete" JSON
206  (contributed by Michael S)
207 #374: Minimal and DefaultPrettyPrinter with configurable separators
208  (contributed by Rafal F)
209 
210 2.8.11 (23-Dec-2017)
211 
212 #418: ArrayIndexOutOfBoundsException from UTF32Reader.read on invalid input
213  (reported, contributed fix for by pfitzsimons-r7@github)
214 
215 2.8.10 (24-Aug-2017)
216 
217 No changes since 2.8.9
218 
219 2.8.9 (12-Jun-2017)
220 
221 #382: ArrayIndexOutOfBoundsException from UTF32Reader.read on invalid input
222  (reported by Wil S)
223 
224 2.8.8 (05-Apr-2017)
225 
226 #359: FilteringGeneratorDelegate does not override writeStartObject(Object forValue)
227  (contributed by Arnaud R)
228 #362: Use correct length variable for UTF-8 surrogate writing
229 
230 2.8.7 (21-Feb-2017)
231 
232 #349: CharsToNameCanonicalizer performance bottleneck
233  (reported by Nuno D, nmldiegues@github)
234 #351: `java.lang.NegativeArraySizeException` at `ByteArrayBuilder.toByteArray()`
235 #354: Buffer size dependency in UTF8JsonGenerator writeRaw
236  (reported by Chistopher C)
237 
238 2.8.6 (12-Jan-2017)
239 
240 #322: Trim tokens in error messages to 256 byte to prevent attacks
241  (contributed by Alessio S)
242 #335: Missing exception for invalid last character of base64 string to decode
243  using `Base64Variant.decode()`
244 
245 2.8.5 (14-Nov-2016)
246 2.8.4 (14-Oct-2016)
247 
248 No changes since 2.8.3
249 
250 2.8.3 (17-Sep-2016)
251 
252 #318: Add support for writing `byte[]` via `JsonGenerator.writeEmbeddedObject()`
253 
254 2.8.2 (30-Aug-2016)
255 2.8.1 (20-Jul-2016)
256 
257 No changes since 2.8.0
258 
259 2.8.0 (04-Jul-2016)
260 
261 #86: Allow inclusion of request body for `JsonParseException`
262  (contributed by LokeshN)
263 #117: Add `JsonParser.Feature.ALLOW_MISSING_VALUES` to support for missing values
264  (contributed by LokeshN)
265 #136: Add `JsonpCharacterEscapes` for easier handling of potential problems
266  with JSONP and rare but technically allowed \u2028 and \u2029 linefeed characters
267 #253: Add `JsonGenerator. writeEmbeddedObject()` to allow writes of opaque native types
268  (suggested by Gregoire C)
269 #255: Relax ownership checks for buffers not to require increase in size
270 #257: Add `writeStartObject(Object pojo)` to streamline assignment of current value
271 #265: `JsonStringEncoder` should allow passing `CharSequence`
272  (contributed by Mikael S)
273 #276: Add support for serializing using `java.io.DataOutput`
274 #277: Add new scalar-array write methods for `int`/`long`/`double` cases
275 #279: Support `DataInput` for parsing
276 #280: Add `JsonParser.finishToken()` to force full, non-lazy reading of current token
277 #281: Add `JsonEOFException` as sub-class of `JsonParseException`
278 #282: Fail to report error for trying to write field name outside Object (root level)
279 #285: Add `JsonParser.getText(Writer)`
280  (contributed by LokesN)
281 #290: Add `JsonGenerator.canWriteFormattedNumbers()` for introspection
282 #294: Add `JsonGenerator.writeFieldId(long)` method to support binary formats
283  with non-String keys
284 #296: `JsonParserSequence` skips a token on a switched Parser
285  (reported by Kevin G)
286 - Add `JsonParser.currentToken()` and `JsonParser.currentTokenId()` as replacements
287   for `getCurrentToken()` and `getCurrentTokenId()`, respectively. Existing methods
288   will likely be deprecated in 2.9.
289 
290 2.7.9.3:
291 
292 #1872: NullPointerException in SubTypeValidator.validateSubType when
293   validating Spring interface
294 #1931: Two more c3p0 gadgets to exploit default typing issue
295 
296 2.7.9.2 (20-Dec-2017)
297 
298 #1607: `@JsonIdentityReference` not used when setup on class only
299 #1628: Don't print to error stream about failure to load JDK 7 types
300 #1680: Blacklist couple more types for deserialization
301 #1737: Block more JDK types from polymorphic deserialization
302 #1855: Blacklist for more serialization gadgets (dbcp/tomcat, spring)
303 
304 2.7.9.1 (18-Apr-2017)
305 
306 #1599: Jackson Deserializer security vulnerability
307 
308 2.7.9 (04-Feb-2017)
309 
310 No changes since 2.7.8
311 
312 2.7.8 (26-Sep-2016)
313 
314 #317: ArrayIndexOutOfBoundsException: 200 on floating point number with exactly
315   200-length decimal part
316  (reported by Allar H)
317 
318 2.7.7 (27-Aug-2016)
319 
320 #307: JsonGenerationException: Split surrogate on writeRaw() input thrown for
321   input of a certain size
322  (reported by Mike N)
323 #315: `OutOfMemoryError` when writing BigDecimal
324  (reported by gmethwin@github)
325 
326 2.7.6 (23-Jul-2016)
327 
328 - Clean up of FindBugs reported possible issues.
329 
330 2.7.5 (11-Jun-2016)
331 
332 #280: FilteringGeneratorDelegate.writeUTF8String() should delegate to writeUTF8String()
333  (reported by Tanguy L)
334 
335 2.7.4 (29-Apr-2016)
336 
337 #209: Make use of `_allowMultipleMatches` in `FilteringParserDelegate`
338  (contributed by Lokesh N)
339 - Make `processor` transient in `JsonParseException`, `JsonGenerationException`
340   to keep both Serializable
341 
342 2.7.3 (16-Mar-2016)
343 
344 No changes since 2.7.2.
345 
346 2.7.2 (26-Feb-2016)
347 
348 #246: Fix UTF8JsonGenerator to allow QUOTE_FIELD_NAMES to be toggled
349  (suggested by philipa@github)
350 
351 2.7.1 (02-Feb-2016)
352 
353 No changes since 2.7.0.
354 
355 2.7.0 (10-Jun-2016)
356 
357 #37: JsonParser.getTokenLocation() doesn't update after field names
358  (reported by Michael L)
359 #198: Add back-references to `JsonParser` / `JsonGenerator` for low-level parsing issues
360  (via `JsonParseException`, `JsonGenerationException`)
361 #211: Typo of function name com.fasterxml.jackson.core.Version.isUknownVersion()
362  (reported by timray@github)
363 #229: Array element and field token spans include previous comma.
364 - Implemented `ReaderBasedJsonParser.nextFieldName(SerializableString)`
365   (to improved Afterburner performance over String/char[] sources)
366 
367 2.6.6 (05-Apr-2016)
368 
369 #248: VersionUtil.versionFor() unexpectedly return null instead of Version.unknownVersion()
370  (reported by sammyhk@github)
371 
372 2.6.5 (19-Jan-2016)
373 2.6.4 (07-Dec-2015)
374 
375 No changes since 2.6.3.
376 
377 2.6.3 (12-Oct-2015)
378 
379 #220: Problem with `JsonParser.nextFieldName(SerializableString)` for byte-backed parser
380 
381 2.6.2 (14-Sep-2015)
382 
383 #213: Parser is sometimes wrong when using CANONICALIZE_FIELD_NAMES
384  (reported by ichernev@github)
385 #216: ArrayIndexOutOfBoundsException: 128 when repeatedly serializing to a byte array
386  (reported by geekbeast@github)
387 
388 2.6.1 (09-Aug-2015)
389 
390 #207: `ArrayIndexOutOfBoundsException` in `ByteQuadsCanonicalizer`
391  (reported by Florian S, fschopp@github)
392 
393 2.6.0 (17-Jul-2015)
394 
395 #137: Allow filtering content read via `JsonParser` by specifying `JsonPointer`;
396   uses new class `com.fasterxml.jackson.core.filter.FilteringParserDelegate`
397   (and related, `TokenFilter`)
398 #177: Add a check so `JsonGenerator.writeString()` won't work if `writeFieldName()` expected.
399 #182: Inconsistent TextBuffer#getTextBuffer behavior
400  (contributed by Masaru H)
401 #185: Allow filtering content written via `JsonGenerator` by specifying `JsonPointer`;
402   uses new class `com.fasterxml.jackson.core.filter.FilteringGeneratorDelegate`
403   (and related, `TokenFilter`)
404 #188: `JsonParser.getValueAsString()` should return field name for `JsonToken.FIELD_NAME`, not `null`
405 #189: Add `JsonFactory.Feature.USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING` (default: true), which may
406   be disabled to prevent use of ThreadLocal-based buffer recyling.
407  (suggested by soldierkam@github)
408 #195: Add `JsonGenerator.getOutputBuffered()` to find out amount of content buffered,
409   not yet flushed.
410  (requested by Ruediger M)
411 #196: Add support for `FormatFeature` extension, for format-specifc Enum-backed
412   parser/generator options
413 - Minor improvement to construction of "default PrettyPrinter": now overridable by data format
414   modules
415 - Implement a new yet more optimized symbol table for byte-backed parsers
416 - Add `JsonParser.Feature.IGNORE_UNDEFINED`, useful for data formats like protobuf
417 - Optimize writing of String names (remove intermediate copy; with JDK7 no speed benefit)
418 
419 2.5.5 (07-Dec-2015)
420 
421 #220: Problem with `JsonParser.nextFieldName(SerializableString)` for byte-backed parser
422 #221: Fixed ArrayIndexOutOfBounds exception for character-based `JsonGenerator`
423  (reported by a-lerion@github)
424 
425 2.5.4 (09-Jun-2015)
426 
427 No changes.
428 
429 2.5.3 (24-Apr-2015)
430 
431 #191: Longest collision chain in symbol table now exceeds maximum -- suspect a DoS attack
432  (reported by Paul D)
433 
434 2.5.2 (29-Mar-2015)
435 
436 #181: Failure parsing -Infinity on buffer boundary
437  (reported by brharrington@github)
438 #187: Longest collision chain in symbol table exceeds maximum length routinely
439   in non-malicious code
440  (reported by mazzaferri@github)
441 
442 2.5.1 (06-Feb-2015)
443 
444 #178: Add `Lf2SpacesIndenter.withLinefeed` back to keep binary-compatibility with 2.4.x
445  (reported by ansell@github)
446 - Minor fix to alignment of null bytes in the last 4 bytes of name, in case where name
447   may cross the input boundary
448 
449 2.5.0 (01-Jan-2015)
450 
451 #148: BytesToNameCanonicalizer can mishandle leading null byte(s).
452  (reported by rjmac@github)
453 #164: Add `JsonGenerator.Feature.IGNORE_UNKNOWN` (but support via individual
454   data format modules)
455 #166: Allow to configure line endings and indentation
456  (contributed by Aaron D)
457 #167: `JsonGenerator` not catching problem of writing field name twice in a row
458 #168: Add methods in `JsonStreamContext` for keeping track of "current value"
459 #169: Add `JsonPointer.head()`
460  (contributed by Alex S, lordofthejars@github)
461 - Added `ResolvedType.getParameterSource()` to support better resolution
462  of generic types.
463 - Added `JsonGenerator.writeRawValue(SerializableString)`
464 - Added `JsonParser.hasExpectedStartObjectToken()` convenience method
465 - Added `JsonParser.hasTokenId(id)` convenience method
466 - Added `JsonParser.nextFieldName()` (no args)
467 
468 2.4.6 (23-Apr-2015)
469 
470 #184: WRITE_NUMBERS_AS_STRINGS disables WRITE_BIGDECIMAL_AS_PLAIN
471  (reported by Derek C)
472 
473 2.4.5 (13-Jan-2015)
474 
475 No changes since 2.4.4.
476 
477 2.4.4 (24-Nov-2014)
478 
479 #157: ArrayIndexOutOfBoundsException: 200 on numbers with more than 200 digits.
480  (reported by Lars P, larsp@github)
481 #173: An exception is thrown for a valid JsonPointer expression
482  (reported by Alex S)
483 #176: `JsonPointer` should not consider "00" to be valid index
484  (reported by fge@gitub)
485 - Fix `JsonGenerator.setFeatureMask()` to better handle dynamic changes.
486 
487 2.4.3 (02-Oct-2014)
488 
489 #152: Exception for property names longer than 256k
490  (reported by CrendKing@github)
491 
492 2.4.2 (13-Aug-2014)
493 
494 #145: NPE at BytesToNameCanonicalizer
495  (reported by Shay B)
496 #146: Error while parsing negative floats at the end of the input buffer
497  (reported by rjmac@github)
498 
499 2.4.1 (16-Jun-2014)
500 
501 #143: Flaw in `BufferRecycler.allocByteBuffer(int,int)` that results in
502  performance regression
503 
504 2.4.0 (29-May-2014)
505 
506 #121: Increase size of low-level byte[]/char[] input/output buffers
507  (from 4k->8k for bytes, 2k->4k for chars)
508 #127: Add `JsonGenerator.writeStartArray(int size)` for binary formats
509 #138: Add support for using `char[]` as input source; optimize handling
510   of `String` input as well.
511 - Refactor `BufferRecycler` to eliminate helper enums
512 
513 2.3.5 (13-Jan-2015)
514 
515 #152: Exception for property names longer than 256k
516 #173: An exception is thrown for a valid JsonPointer expression
517 #176: `JsonPointer` should not consider "00" to be valid index
518 
519 2.3.4 (17-Jul-2014)
520 2.3.3 (10-Apr-2014)
521 
522 No changes since 2.3.2.
523 
524 2.3.2 (01-Mar-2014)
525 
526 #126: Revert some 1.6 back to make core lib work with Android 2.2 (FroYo)
527  (contributed by Goncalo S)
528 #129: Missing delegation method, `JsonParserDelegate.isExpectedStartArrayToken()`
529  (Pascal G)
530 #133: Prevent error on JsonPointer expressions for properties that have numeric
531   ids above 32-bit range
532  (reported by mrstlee@github)
533 
534 2.3.1 (28-Dec-2013)
535 
536 No functional changes.
537 
538 2.3.0 (13-Nov-2013)
539 
540 #8: Add methods in `JsonParser`/`JsonGenerator` for reading/writing Object Ids
541 #47: Support YAML-style comments with `JsonParser.Feature.ALLOW_YAML_COMMENTS`
542 #60: Add a feature (`JsonParser.Feature.STRICT_DUPLICATE_DETECTION`) to verify
543   that input does not contain duplicate filed names
544 #77: Improve error reporting for unrecognized tokens
545  (requested by cowwoc@github)
546 #85: Add `JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN`
547 #91: Add methods in `JsonGenerator` for writing native Type Ids
548 #92: Add methods in `JsonParser` for reading native Type Ids
549 #93: Add `getFeatureMask()`, `setFeatureMask()` in `JsonGenerator`/`JsonParser`
550 #94: Allow coercion of String value "null" (similar to handling of null token)
551 #96: Add `JsonFactory.requiresPropertyOrdering()` introspection method
552 #97: JsonGenerator's `JsonWriteContext` not maintained properly, loses
553   current field name
554  (reported by Sam R)
555 #98: Improve handling of failures for `BigDecimal`, for "NaN" (and infinity)
556 #102: Unquoted field names can not start with a digit
557 #103: Add `JsonFactory.canHandleBinaryNatively`, `JsonGenerator.canWriteBinaryNatively`
558  to let databind module detect level of support for binary data.
559 #105: Parser parsers numbers eagerly; does not report error with missing space
560 #106: Add `JsonGenerator.Feature.STRICT_DUPLICATE_DETECTION` for preventing dup names
561 #110: Improve overridability of `JsonGeneratorDelegate`
562  (suggested by qpliu@github)
563 #111: _currInputRowStart isn't initialized in UTF8StreamJsonParser() constructor
564  (reported by dreamershl@github)
565 #115: JsonGenerator writeRawValue problem with surrogate UTF-8 characters
566  (reported by Marcin Z)
567 #116: WriterBasedJsonGenerator produces truncated Unicode escape sequences
568  (reported by Steve L-S)
569 - Improve `DefaultPrettyPrinter`, `Lf2SpacesIndenter` (from databind #276)
570 - Add `JsonGenerator.canOmitFields()` method to support discovery of
571   positional formats, needed for handling of filtering for CSV
572 - Rewrite `InternCache` to use `ConcurrentHashMap`, to work more efficiently both
573   for common case of few misses (no block on access), and slowest cases (lots of
574   misses).
575 - Add `JsonPointer` implementation, to be used by tree model, streaming
576 - Make `UTF8StreamJsonParser` non-final, for potential sub-classing
577 
578 2.2.3 (23-Aug-2013)
579 
580 #78: ArrayIndexOutOfBoundsException for very long numbers (>500 digits)
581  (reported by boothen@github)
582 #81: CharTypes.appendQuoted misencodes first 32 Unicode values as '\0000'
583  (reported by githubaff0@github)
584 #84: Support for parsing 'Infinity' when feature ALLOW_NON_NUMERIC_NUMBERS is on
585  (contributed by ebrevdo@github)
586 - Add `Base64Variant.decode()` convenience methods
587 
588 2.2.2 (26-May-2013)
589 
590 No changes since previous version.
591 
592 2.2.1 (03-May-2013)
593 
594 #72: JsonFactory.copy() was not copying settings properly
595  (reported by Christian S (squiddle@github))
596 - Moved VERSION/LICENSE contained in jars under META-INF/, to resolve
597   Android packaging (APK) issues
598 
599 2.2.0 (22-Apr-2013)
600 
601 Fixes:
602 
603 #51: JsonLocation had non-serializable field, mark as transient
604 
605 Improvements
606 
607 #46, #49: Improve VersionUtil to generate PackageVersion, instead of
608   reading VERSION.txt from jar -- improves startup perf on Android significantly
609  (contributed by Ben G)
610 #59: Add more functionality in `TreeNode` interface, to allow some
611  level of traversal over any and all Tree Model implementations
612 #69: Add support for writing `short` values in JsonGenerator
613 
614 2.1.3 (19-Jan-2013)
615 
616 * [JACKSON-884]: JsonStringEncoder.quoteAsStringValue() fails to encode
617   ctrl chars correctly.
618 * [Issue#48] Problems with spaces in URLs
619  (reported by KlausBrunner)
620 
621 2.1.2 (04-Dec-2012)
622 
623 * [Issue#42] Problems with UTF32Reader
624  (reported by James R [jroper@github])
625 * Added missing methods (like 'setPrettyPrinter()' in JsonGeneratorDelegate
626 
627 2.1.1 (11-Nov-2012)
628 
629 * [Issue#34] `JsonParser.nextFieldName()` fails on buffer boundary
630  (reported by gsson@github)
631 * [Issue#38] `JsonParser.nextFieldName()` problems when handling
632  names with trailing spaces
633  (reported by matjazs@github)
634 
635 2.1.0 (08-Oct-2012)
636 
637 A new minor version for 2.x.
638 
639 New features:
640 
641 * [Issue#14]: add 'readBinaryValue(...)' method in JsonParser
642 * [Issue#16]: add 'writeBinary(InputStream, int)' method in JsonGenerator
643   (and implement for JSON backend)
644 * [Issue#26]: Allow overriding "root value separator"
645  (suggested by Henning S)
646 
647 Improvements:
648 
649 * [JACKSON-837]: Made JsonGenerator implement Flushable.
650  (suggested by Matt G)
651 * [Issue#10]: add 'JsonProcessingException.getOriginalMessage()' for accessing
652   message without location info
653 * [Issue#31]: make `JsonFactory` java.io.Serializable (via JDK)
654 
655 Other:
656 
657 * [Issue-25]: Add 'createParser' and 'createGenerator' (as eventual replacements
658   for 'createJsonParser'/'createJsonGenerator') in 'JsonFactory'
659 * Try to improve locking aspects of symbol tables, by reducing scope of
660   synchronized sections when creating, merging table contents.
661 * Added 'JsonFactory.copy()' method to support databinding's 'ObjectMapper.copy()'
662 * Added method 'requiresCustomCodec()' for JsonFactory and JsonParser
663 * Added 'JsonParser.getValueAsString()' method (to support flexible conversions)
664 * Added META-INF/services/com.fasterxml.jackson.core.JsonFactory SPI to register
665   `JsonFactory` for even more automatic format discovery in future.
666 
667 2.0.4 (26-Jun-2012)
668 
669 Fixes:
670 
671 * [Issue-6] PrettyPrinter, count wrong for end-object case
672 * 1.9.x fixes up to 1.9.8
673 
674 2.0.3: skipped;	 only some modules use this version
675 
676 2.0.2 (14-May-2012)
677 
678 * 1.9.x fixes up to 1.9.7
679 
680 2.0.1 (22-Apr-2012)
681 
682 Fixes:
683 
684 * [JACKSON-827] Fix incompatibilities with JDK 1.5 (2.0.0 accidentally
685   required 1.6)
686  (reported Pascal G)
687 
688 2.0.0 (25-Mar-2012)
689 
690 Fixes:
691 
692 (all fixes up until 1.9.6)
693 
694 Improvements
695 
696 * [JACKSON-730]: Add checks to ensure that Features are applicable for
697   instances (parsers, generators), or if not, throw IllegalArgumentException
698 * [JACKSON-742]: Add append-methods in SerializableString
699 
700 New features:
701 
702 * [JACKSON-782]: Add 'JsonParser.overrideCurrentName()', needed as a workaround
703   for some exotic data binding cases (and/or formats)
704 
705 [entries for versions 1.x and earlier not retained; refer to earlier releases)
706