web-dev-qa-db-fra.com

Java 11 Le package javax.xml.bind n'existe pas

J'essaie de désérialiser les données XML dans une arborescence de contenu Java à l'aide de JAXB , en validant les données XML telles qu'elles ne sont pas masquées:

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();
}

Quand je construis le projet avec Java 8 ça va, mais le construire avec Java 11 échoue avec une erreur de compilation:

package javax.xml.bind does not exist

Comment résoudre le problème?

76
Boris

D'après release-notes , Java 11 a supprimé les modules Java EE:

Java.xml.bind (JAXB) - REMOVED
  • Java 8 - OK
  • Java 9 - PÉRIMÉ
  • Java 10 - PÉRIMÉ
  • Java 11 - Supprimé

Voir JEP 32 pour plus d’informations.

Vous pouvez résoudre le problème en utilisant d'autres versions des technologies Java EE. Ajoutez simplement des dépendances Maven contenant les classes dont vous avez besoin:

<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>
145
Boris