El paquete Java 11 javax.xml.bind no existe [duplicado]

Resuelto Boris asked hace 6 años • 1 respuestas

Estoy intentando deserializar datos XML en un árbol de contenido de Java usando JAXB , validando los datos XML tal como no están ordenados:

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

Cuando construyo el proyecto con Java 8 está bien, pero al compilarlo con Java 11 falla y aparece un error de compilación:

package javax.xml.bind does not exist

¿Cómo soluciono el problema?

Boris avatar Sep 25 '18 22:09 Boris
Aceptado

Según las notas de la versión , Java 11 eliminó los módulos Java EE:

java.xml.bind (JAXB) - REMOVED
  • Java 8-OK
  • Java 9 - DESPRECADO
  • Java 10 - DESPRECADO
  • Java 11 - ELIMINADO

Consulte JEP 320 para obtener más información.

Puede solucionar el problema utilizando versiones alternativas de las tecnologías Java EE. Simplemente agregue dependencias de Maven que contengan las clases que necesita:

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

Actualización de Yakarta EE 8 (marzo de 2020)

En lugar de utilizar módulos JAXB antiguos, puede solucionar el problema utilizando el enlace XML de Jakarta de Jakarta EE 8 :

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>2.3.3</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.3</version>
  <scope>runtime</scope>
</dependency>

Actualización de Yakarta EE 9 (noviembre de 2020)

Utilice la última versión de Jakarta XML Binding 3.0 :

  • Yakarta EE 9 API jakarta.xml.bind-api
  • implementación compatible jaxb-impl
<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>3.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>3.0.0</version>
  <scope>runtime</scope>
</dependency>

Nota: Jakarta EE 9 adopta un nuevo espacio de nombres de paquete API jakarta.xml.bind.*, así que actualice las declaraciones de importación:

javax.xml.bind -> jakarta.xml.bind

Actualización de Yakarta EE 10 (junio de 2022)

Utilice la última versión de Jakarta XML Binding 4.0 (requiere Java SE 11 o posterior):

  • Yakarta EE 10 API jakarta.xml.bind-api
  • implementación compatible jaxb-impl
<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>4.0.0</version>
  <scope>runtime</scope>
</dependency>
Boris avatar Sep 25 '2018 15:09 Boris