如何在 Java 9 中创建没有外部库的 XML 文件?

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

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

目前我正在使用 javax.xml.bind.JAXBContextjavax.xml.bind.Marshaller classes 来做到这一点,但是在 Java 9 这些 classes 不再存在.因此,在使用 Java 9 时出现异常:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext.
我可以用较低的 Java 版本创建 XML 文件,但我需要它兼容 Java 9。


我现在创建 XML 文件的方式是:

1。创建 XML 元素 class

@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 内部库。

您可以在 Java9 中使用这些库,但您需要需要包含它们的模块。确保您的 module-info.javajava.xml 模块有要求:

module myModule {
    requires java.xml;
}

由于您需要 JAXB 模块的更多功能,因此需要在 module-info.java 文件中添加更多 requires 语句。例如,完成后,您的 module-info.java 文件可能看起来更像以下内容:

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

有关详细信息,请参阅