Jackson jaxrs xml provider update issue - from 2.4.1 to 2.5.0
I am facing some issues while upgrading Jackson jaxrs xml provider from 2.4.1 to 2.5.0. I am using an xml provider in a Jersey REST API project (v1.19).
New version: com.fasterxml.jackson.jaxrs: jackson-jaxrs-xml-provider: 2.5.0
Question: Custom serializers written to customize Jackson's default serialization are not called on serialization. These custom serializers have worked since v2.4.1, and therefore, after an update, the API does not return the desired output structure.
Please find my ContextResolver implementation and custom serializer below:
XmlMapperContextResolver.java
@Provider
@Produces({MediaType.APPLICATION_XML })
public class XmlMapperContextResolver implements ContextResolver<XmlMapper> {
private final XmlMapper animalXmlMapper = new XmlMapper();
private final XmlMapper defaultXmlMapper = new XmlMapper();
@Override
public XmlMapper getContext(Class<?> type) {
if (Animal.class.isAssignableFrom(type)) {
return animalXmlMapper;
}
return defaultXmlMapper;
}
public XmlMapperContextResolver() {
JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
// Adding Serializers
module.addSerializer(CharacterMap.class, new CharacterMapSerializer());
animalXmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
animalXmlMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
animalXmlMapper.registerModule(module);
defaultXmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
defaultXmlMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
}
}
CharacterMapSerializer.java
public class CharacterMapSerializer extends
JsonSerializer<Map<String, Character>> {
@Override
public void serialize(Map<String, Character> value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
provider.defaultSerializeField("Character", value.values(), jgen);
}
}
CharacterMap.java
public class CharacterMap extends HashMap<String, Character> {
}
At runtime it XmlMapperContextResolver
is called and it successfully returns an instance of animalXmlMapper. But when serializing, no response CharacterMapSerializer
is called, and instead Jackson uses his default serialization method to generate an XML response.
source to share
No one has answered this question yet
Check out similar questions: