Java 11 пакет javax.xml.bind не существует

Я пытаюсь десериализовать данные XML в дерево контента Java с помощью JAXB, проверяя данные XML так, как они не распакованы:

try {
  JAXBContext context = JAXBContext.newInstance("com.acme.foo");
  Unmarshaller unmarshaller = context.createUnmarshaller();
  unmarshaller.setSchema(schema);
  FooObject fooObj = (FooObject) unmarshaller.unmarshal(new File("foo.xml"));
} catch (UnmarshalException ex) {
  ex.printStackTrace();
} catch (JAXBException ex) {
  ex.printStackTrace();
}

Когда я собираю проект с Java 8, это нормально, но сборка с Java 11 завершается с ошибкой компиляции:

package javax.xml.bind does not exist

Как мне исправить проблему?

Ответы

Ответ 1

Согласно примечаниям к выпуску, Java 11 удалила модули Java EE:

java.xml.bind (JAXB) - REMOVED
  • Java 8 - ОК
  • Java 9 - УСТАРЕЛО
  • Java 10 - УСТАРЕЛО
  • Java 11 - УДАЛЕНО

См. JEP 320 для получения дополнительной информации.

Вы можете решить эту проблему, используя альтернативные версии технологий Java EE. Просто добавьте зависимости Maven, содержащие нужные вам классы:

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-core</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.0</version>
</dependency>