Как преобразовать xml-строку в java-объект с помощью JAXB

Дан следующий класс Superhero:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import lombok.Getter;
import lombok.Setter;

@XmlRootElement(name = "super-hero")
@XmlAccessorType(XmlAccessType.FIELD)
@Getter
@Setter
class SuperHero {
  @XmlElement(name = "name")
  String name;

  @XmlElement(name = "super-power")
  String superPower;
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Вы можете преобразовать XML-строку в экземпляр SuperHero с помощью следующего кода:

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import org.junit.jupiter.api.Test;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
class TestXmlStringToObjectUnmarshalling {

  static final String superHeroXml =
      "<?xml version="1.0" encoding="UTF-8" standalone="yes"?>"
          + "<super-hero>"
          + "  <name>Superman</name>"
          + "  <super-power>Flight</super-power>"
          + "</super-hero>";

  @Test
  void testXmlUnmarshalling() throws JAXBException {
    JAXBContext jaxbContext = JAXBContext.newInstance(SuperHero.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

    StringReader reader = new StringReader(superHeroXml);
    SuperHero superHero = (SuperHero) unmarshaller.unmarshal(reader);

    assertEquals("Flight", superHero.getSuperPower());
  }
}

Войти в полноэкранный режим Выйти из полноэкранного режима

Примечание:

  • создайте JAXBContext, который включает класс SuperHeroJAXBContext.newInstance(SuperHero.class)
  • создать JAXB Unmarshaller и применить метод unmarshal к StringReader, обертывающему текст (это может быть также FileReader или любой другой Reader).

Делюсь с ❤️ от Codever. Используйте функциональность 👉 copy to mine, чтобы добавить его в свою личную коллекцию сниппетов.

Оцените статью
devanswers.ru
Добавить комментарий