如何在Java 9中创建
XML
文件,无需外部库?
目前我使用javax.xml.bind.JAXBContext
和javax.xml.bind.Marshaller
类来执行此操作,但在Java 9上,这些类不再存在。因此,在使用Java 9时,我得到一个例外:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext
我可以使用较低的Java版本创建XML
文件,但我需要它与Java 9兼容。
@XmlRootElement
public class Places {
private List<Athlete> athletes;
public List<Athlete> getAthletes() {
return athletes;
}
@XmlElement
public void setAthletes(List<Athlete> athletes) {
this.athletes = athletes;
}
}
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内部库。
答案 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。