Десериализовать дочерние элементы 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();

  }
}
Другие вопросы по тегам