Skip to content

NPE when using Standard serializer implementation for serializing {link java.util.Map} types #1439

@thomasKlug

Description

@thomasKlug

Utilizing jackson-databind-2.7.5.

There seems to be an issue surrounding the _filterId when serializing a Map. The Implementation we are setting a default filter by overriding, the JacksonAnnotationIntrospector findFilterId. A default filterId is set if one is not found. That Id may or may not be found, so we set the SimpleFilterProvider().setFailOnUnknownId to false. However in the Implementation of the MapSerializer there is an issue within the serialize method specifically

if (_filterId != null) {
                serializeFilteredFields(value, gen, provider,
                        findPropertyFilter(provider, _filterId, value), suppressableValue);
            } else if (suppressableValue != null) {
                serializeOptionalFields(value, gen, provider, suppressableValue);
            } else if (_valueSerializer != null) {
                serializeFieldsUsing(value, gen, provider, _valueSerializer);
            } else {
                serializeFields(value, gen, provider);
            }

Since the above code block assumes that the filter will be found, null gets passed into serializeFilteredFields resulting in an NPE.

The above I believe could be written:

if (_filterId != null && findPropertyFilter(provider, _filterId, value) != null) {
                serializeFilteredFields(value, gen, provider,
                        findPropertyFilter(provider, _filterId, value), suppressableValue);
            } else if (suppressableValue != null) {
                serializeOptionalFields(value, gen, provider, suppressableValue);
            } else if (_valueSerializer != null) {
                serializeFieldsUsing(value, gen, provider, _valueSerializer);
            } else {
                serializeFields(value, gen, provider);
            }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions