Десериализовать дочерние элементы XML как строку XML
Используя Джексона или JAXB, есть ли способ десериализации / маршалирования целого поддерева дочерних элементов XML в строку?
Например, с учетом следующего XML:
<root>
<foo>
<bar>
<baz/>
</bar>
</foo>
</root>
Есть ли способ десериализации / маршалирования в следующий класс?
@XmlRootElement
public class Root {
private String foo;
// constructors, getters, setters, etc.
}
где результат будет выглядеть Root(foo="<bar><baz/></bar>")
?
1 ответ
Вы можете написать свой собственный десериализатор Джексона для этого:
public class Test {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new XmlMapper();
final SimpleModule module = new SimpleModule("configModule", Version.unknownVersion());
module.addDeserializer(Root.class, new DeSerializer());
mapper.registerModule(module);
// Root readValue = mapper.readValue(<xml source>);
}
}
class DeSerializer extends StdDeserializer<Root> {
protected DeSerializer() {
super(Root.class);
}
@Override
public Root deserialize(JsonParser p, DeserializationContext ctxt) throws Exception {
// use p.getText() and p.nextToken to navigate through the xml and construct Root object
return new Root();
}
}