У меня есть следующие аннотированные классы JAXB:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"payload"
})
@XmlRootElement(name = "response")
public class MyResponse {
@XmlElement(required = true)
protected MyPayload payload;
public MyPayload getPayload() {
return payload;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "myPayload", propOrder = {
"any"
})
public class MyPayload {
@XmlAnyElement(lax = true)
protected Object any;
public Object getAny() {
return any;
}
public void setAny(Object value) {
this.any = value;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "mySpecificPayload", propOrder = {
"field1",
"field2",
})
public class MySpecificPayload {
@XmlElement(name = "field-1", required = true)
protected String field1;
@XmlElement(name = "field-2")
protected String field2;
}
Когда я пытаюсь десериализовать ввод:
<response>
<payload>
<my-specific-payload>
<field-1>value1</field-1>
<field-2>value2</field-2>
</my-specific-payload>
</payload>
</response>
, используя:
ObjectMapper mapper = new XmlMapper();
mapper.registerModule(new JaxbAnnotationModule());
MyResponse value = mapper.readValue(myXmlString, MyResponse.class);
Iget:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: нераспознанное поле «my-specific-payload» (класс com.example.MyPayload), не помеченное как игнорируемое (одно известное свойство:"any"])
Я хотел бы иметь возможность:
MyResponse value = mapper.readValue(myXmlString, MyResponse.class);
MySpecificPayload msp = (MySpecificPayload) value.getPayload().getAny();
В настоящее время использую библиотеки Джексона с версией: 2.9.6 Как мне получить Джексона, чтобы добиться этого?
Спасибо, Джейсон