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

avatar
Dumbo
8 апреля 2018 в 11:19
502
1
2

Как создать XML файл без внешних библиотек в 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.


Сейчас я создаю файл XML:

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


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

PS: Я искал ответ на этот вопрос, но ничего не нашел, так что это не должен быть повторяющийся вопрос. >Для этого мне нужно использовать только внутренние библиотеки Java.

Источник
lexicore
8 апреля 2018 в 11:27
0

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

zlakad
8 апреля 2018 в 11:30
1

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

Dumbo
8 апреля 2018 в 11:32
0

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

Ответы (1)

avatar
Justin Albano
8 апреля 2018 в 12:11
3

Вы можете использовать эти библиотеки в 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.