Как создать XML-файл без внешних библиотек в Java 9?

How to create XML file without external libraries in Java 9?

В настоящее время я использую для этого классы javax.xml.bind.JAXBContext и javax.xml.bind.Marshaller, но в Java 9 эти классы больше не существуют. Итак, при использовании Java 9 я получаю исключение: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext.
Я могу создать файл XML с более низкой версией Java, но мне нужно, чтобы он был совместим и с Java 9.


The way I am creating XML file right now is:

1. Создайте класс элемента XML.

@XmlRootElement
public class Places {

    private List<Athlete> athletes;

    public List<Athlete> getAthletes() {
        return athletes;
    }

    @XmlElement
    public void setAthletes(List<Athlete> athletes) {
        this.athletes = athletes;
    }
}  

2. Создайте файл XML.

List<Athlete> athletes = new ArrayList<>();
Places places = new Places();
places.setAthletes(athletes);    
JAXBContext context = JAXBContext.newInstance(Places.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(places, new File(outputPath);
marshaller.marshal(places, System.out);


Надеюсь, кто-то уже сталкивался с этой проблемой и знает, как ее решить.

P.S .: Я искал ответ на этот вопрос, но ничего не нашел, так что это не должно быть дублированным вопросом.
Как я уже упоминалДля этого мне нужно использовать только внутренние библиотеки Java.

Для этого мне нужно использовать только внутренние библиотеки Java. - почему?
lexicore 08.04.2018 13:27

Вы читали документацию по API? docs.oracle.com/javase/9/docs/api/java.xml-summary.html

zlakad 08.04.2018 13:30

@lexicore Из-за задания, которое мне дала компания, где я ищу работу

Dumbo 08.04.2018 13:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
443
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать эти библиотеки в Java 9, но вам потребуется модуль, который их содержит. Убедитесь, что вашему module-info.java требуется модуль java.xml:

module myModule {
    requires java.xml;
}

Поскольку вам требуется больше функциональности от модулей JAXB, вам нужно будет добавить больше операторов requires в ваш файл module-info.java. Например, ваш файл module-info.java может выглядеть следующим образом, когда вы закончите:

module myModule {
   java.xml
   java.xml.bind
   java.xml.ws
   java.xml.ws.annotation
}

Для получения дополнительной информации см. Как разрешить java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException в Java 9.

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