You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The issue starts from the need of converting an object from an XML format to a com.fasterxml.jackson.databind.JsonNode instance and serialize it with a Wrapper object.
I have created a wrapper class which extends com.fasterxml.jackson.databind.node.POJONode.
Despite I have annotated the wrapper class with @JsonRootName, that is always serialized with the original class name. It looks like that the annotation is totally ignored. The same happens if I use @JsonTypeName and @JsonTypeInfo.
If I am doing something wrong please suggest a fix or, possibly, an alternative. Because of legacy code, it is necessary for me to use POJONode class.
Thank you for your time and help.
Marco Tizzano.
Version information
I am currently using version 2.12.4 of jackson-databind, jackson-dataformat-xml and jackson-module-jaxb-annotations.
To Reproduce
I have written the following simple JUnit test, which proves the issue:
import static java.lang.String.format;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import org.junit.Test;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.POJONode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class POJONodeJsonRootNameTest {
static final String XML_PRE_PTRN = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>%s";
private final ObjectMapper mapper = new ObjectMapper();
private final XmlMapper xmlMapper = new XmlMapper();
@Test
public void shouldConvertObjectFromXmlToJson() throws IOException {
String xml = format(XML_PRE_PTRN, "<test><name>test</name><description>test</description></test>");
JsonNode node = xmlMapper.readTree(xml);
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
String json = mapper.writeValueAsString(new TestWrapper(node));
assertNotNull(json);
}
@JsonRootName(value = "test")
private class TestWrapper extends POJONode {
public TestWrapper(Object v) {
super(v);
}
}
}
Actual Result {"TestWrapper":{"name":"test","description":"test"}}
Hi
After an additional investigation, I figured out that it all works fine up until version 2.10.5, then you get the bug with later versions.
Hope that helps.
Your answer on this matter would be highly appreciated.
Thanks.
Hello everyone.
The issue starts from the need of converting an object from an XML format to a
com.fasterxml.jackson.databind.JsonNode
instance and serialize it with a Wrapper object.I have created a wrapper class which extends
com.fasterxml.jackson.databind.node.POJONode
.Despite I have annotated the wrapper class with
@JsonRootName
, that is always serialized with the original class name. It looks like that the annotation is totally ignored. The same happens if I use@JsonTypeName
and@JsonTypeInfo
.If I am doing something wrong please suggest a fix or, possibly, an alternative. Because of legacy code, it is necessary for me to use POJONode class.
Thank you for your time and help.
Marco Tizzano.
Version information
I am currently using version 2.12.4 of
jackson-databind
,jackson-dataformat-xml
andjackson-module-jaxb-annotations
.To Reproduce
I have written the following simple JUnit test, which proves the issue:
Actual Result
{"TestWrapper":{"name":"test","description":"test"}}
Expected behavior
{"test":{"name":"test","description":"test"}}
The text was updated successfully, but these errors were encountered: