代码之家  ›  专栏  ›  技术社区  ›  Dumbo Faisal

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

  •  2
  • Dumbo Faisal  · 技术社区  · 7 年前

    如何创建 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);
    


    我希望有人已经遇到了这个问题,并知道如何解决它。

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   Justin Albano    7 年前

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

    module myModule {
        requires java.xml;
    }
    

    由于您需要JAXB模块提供更多功能,因此需要添加更多 requires 您的 模块信息。JAVA 文件例如,您的 模块信息。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