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

时间:2018-04-08 11:19:41

标签: java xml jaxb java-9

  

如何在Java 9中创建XML文件,无需外部库

目前我使用javax.xml.bind.JAXBContextjavax.xml.bind.Marshaller类来执行此操作,但在Java 9上,这些类不再存在。因此,在使用Java 9时,我得到一个例外:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext 我可以使用较低的Java版本创建XML文件,但我需要它与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);

<小时/> 我希望有人遇到过这个问题并知道如何解决它。

P.S。:我已经搜索了这个问题的答案,但没有找到任何答案,所以它不应该是一个重复的问题。
正如我提到 我必须只使用Java内部库。

1 个答案:

答案 0 :(得分: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
}

有关详细信息,请参阅How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9