Десериализовать дочерние элементы XML как строку XML - PullRequest
0 голосов
/ 04 сентября 2018

Используя Джексона или 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 Ответ

0 голосов
/ 05 сентября 2018

Вы можете написать свой собственный десериализатор Джексона для этого:

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();

  }
}
...