-
-
Notifications
You must be signed in to change notification settings - Fork 230
Closed
Milestone
Description
For the following class:
@JacksonXmlRootElement(localName = "dynaBean", namespace = "")
@JsonTypeInfo(use = Id.NAME, property = "class", include = As.PROPERTY)
public class DynaBean {
private final Map<String, String> _properties = new TreeMap<String, String>();
public DynaBean(Map<String, String> values) {
_properties.putAll(values);
}
@JsonAnyGetter
@JacksonXmlProperty(isAttribute = false)
public Map<String, String> getProperties() {
return _properties;
}
}
For the code:
XmlMapper xmlMapper = new XmlMapper();
Map<String, String> values = new HashMap<String, String>();
values.put("prop1", "val1");
values.put("prop2", "val2");
System.out.println(xmlMapper.writeValueAsString(new DynaBean(values)));
Since we have @JacksonXmlProperty(isAttribute = false)
, we expect:
<dynaBean xmlns="" class="TestSerializationAttr$DynaBean">
<prop1>val1</prop1>
<prop2>val2</prop2>
</dynaBean>
But we have:
<dynaBean xmlns="" class="TestSerializationAttr$DynaBean" prop1="val1" prop2="val2">
</dynaBean>
Test case to add in com.fasterxml.jackson.dataformat.xml.ser.TestSerializationAttr
@JacksonXmlRootElement(localName = "dynaBean", namespace = "")
@JsonTypeInfo(use = Id.NAME, property = "class", include = As.PROPERTY)
public class DynaBean {
private final Map<String, String> _properties = new TreeMap<String, String>();
public DynaBean(Map<String, String> values) {
_properties.putAll(values);
}
@JsonAnyGetter
@JacksonXmlProperty(isAttribute = false)
public Map<String, String> getProperties() {
return _properties;
}
}
public void testIssue117() throws JsonProcessingException {
Map<String, String> values = new HashMap<String, String>();
values.put("prop1", "val1");
values.put("prop2", "val2");
assertEquals("<dynaBean xmlns=\"\" class=\"TestSerializationAttr$DynaBean\"><prop1>val1</prop1><prop2>val2</prop2></dynaBean>",
_xmlMapper.writeValueAsString(new DynaBean(values)));
}
I believe the problem resides somewhere in XmlSerializerBase constructor where the _attributeCount does not take into account the @JsonAnyGetter.
Metadata
Metadata
Assignees
Labels
No labels