Here are people who have contributed to Jackson JSON process development:
(version numbers in brackets indicate release in which the problem was fixed)

Tatu Saloranta, tatu.saloranta@iki.fi: Author

Alain Penders:
  * Reported problem with JavaTypeMapper, where floating point numbers were
    accidentally converted to Booleans.
    [0.8]

Mike Eastey:
  * Reported problem with JavaTypeMapper had a bug which prevented custom
    mappers (as well as slower interface-based introspection) from working,
    provided path to specific underlying bugs.
    [0.8.2]

Augusto Callejas
  * Reported problem with JavaTypeMapper (and JsonTypeMapper), which
    caused read operation not to handle EOF appropriately but instead
    cause a NullPointerException.
    [0.9]

Maciej Pestka:
  * JavaTypeMapper did not implicitly flush generator after mapping
    objects: it should, and now will (note: JsonTypeMapper not directly
    affected, flushing still needed)
    [0.9]

Tudor Bosman:
  * Symbol table handling not thread-safe
    [0.9.3]

Michael Mangeng:
  * Suggested [JACKSON-1]: make JsonNode implement Iterable<JsonNode> to
    allow use of Java 5 foreach loop with container nodes.
    [0.9.3]

Johannes Link:
  * Reported [JACKSON-8]: Serialization of BigDecimal broken with JavaTypeMapper
    [0.9.3]

Stanislaw Osinski:
  * Reported [JACKSON-14], contributed code to resolve it and improve
    generics-handling significantly.
    [0.9.4]
 	 
Michael Descher:
  * Reported [JACKSON-18], ArrayIndexOutOfBounds on IntNode, due to
    off-by-one problem with comparisons used for caching common values.
    [0.9.4]

Mike Goodwin:
  * Suggested [JACKSON-9]: Add support for (non-standard) Json comments.
    [0.9.4]

Ray Racine:
  * Pointed out [JACKSON-25]: Problems with Maven pom for lgpl version
    [0.9.4-backport]

Scott Dixon:
  * Contributed unit test (TestComplexJavaType) for verifying functioning
    of object serialization
    [0.9.5]

Justin Friedl:
  * Reported [JACKSON-53]: problem serializing iBatis bean classes generated
    (or wrapped) by CGLib. Probably would also have caused problems with
    Hibernate and a few other frameworks.
   [0.9.8]

Scott Anderson:
  * Suggested [JACKSON-48]: Integrate ObjectMapper with JsonGenerator,
    JsonParser; add MappingJsonFactory.

