Рубрики
Без рубрики

Исключение JAXBException: Реализация JAXB-API не найдена в пути к модулю или пути к классу

Нам нужно добавить JAXB RI для решения исключения jaxbex, например, jaxb-impl или eclipse moxy.

Автор оригинала: mkyong.

В этой статье показано, как решить популярное исключение JAXBException Реализация JAXB-API не найдена в пути к модулю или пути к классу .

Содержание

  • 1. Исключение JAXBException: Реализация JAXB-API не найдена
  • 2. Нам нужна реализация JAXB
  • 3. Реализация JAXB – Привязка XML в Джакарте
  • 4. Реализация JAXB – EclipseLink MOXy
    • 4.1 Реализация JAXB-API не найдена?
    • 4.2 Требуется jaxb.свойства
    • 4.3 Явно использует JAXBContextFactory.
  • 5. Реализация JAXB – Стеклянная рыба
  • 6. javax.xml.bind или jakarta.xml.bind?
    • 6.1 Java EE и javax.xml .*
    • 6.2 Джакарта ЭЭ и jakarta.xml . *
  • 7. Скачать Исходный Код
  • 8. Рекомендации

1. Исключение JAXBException: Реализация JAXB-API не найдена

Перенесите проект на Java 11 и добавьте зависимость Maven JAXB.

  
      javax.xml.bind
      jaxb-api
      2.3.1
  

И попадает в приведенное ниже Исключение jaxbex ?

javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
  at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
  at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
  at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
  at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
  at com.mkyong.xml.jaxb.JaxbExample.main(JaxbExample.java:20)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
  at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122)
  at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155)
  at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276)
  ... 4 more

2. Нам нужна реализация JAXB

Пакеты JAXB javax.xml . * не видны в Java 9 и Java 10 и удалены в Java 11. И jaxb-api содержит только API, и нам нужна реализация JAXB.

  
      javax.xml.bind
      jaxb-api
      2.3.1
  

3. Реализация JAXB – Привязка XML в Джакарте

Мы можем добавить привязку Jakarta XML в качестве реализации JAXB.

  
  
      jakarta.xml.bind
      jakarta.xml.bind-api
      3.0.0
  

  
  
      com.sun.xml.bind
      jaxb-impl
      3.0.0
      runtime
  

4. Реализация JAXB – EclipseLink MOXy

Мы также можем добавить EclipseLink MOXy в качестве реализации JAXB.

  
  
      jakarta.xml.bind
      jakarta.xml.bind-api
      3.0.0
  

  
      org.eclipse.persistence
      org.eclipse.persistence.moxy
      3.0.0
  

4.1 Реализация JAXB-API не найдена?

После добавления реализации EclipseLink MOXy JAXB мы все равно получим то же сообщение об ошибке.

javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]

4.2 Требуется jaxb.свойства

Для EclipseLink MOXy нам нужно добавить jaxb.properties в один из пакетов класса домена ; ; jaxb.свойства определили JAXB для использования Moxy-ссылки EclipseLink JAXBContextFactory , а не по умолчанию com.sun.xml.внутренний.привязка.v2.ContextFactory

# For old APIs  2.3.*
# javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

# @Since 3.0, javax.xml rebrand to jakarta.xml
jakarta.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory

4.3 Явно использует JAXBContextFactory.

Если мы не хотим создавать одноцелевой файл jaxb.properties ; в качестве альтернативы, мы можем явно использовать ссылку EclipseLink MOXY JAXBContextFactory для создания JAXBContext .

  // Normal JAXB Implementation
  // JAXBContext jaxbContext = JAXBContext.newInstance(Company.class);

  // EclipseLink MOXy's JAXBContextFactory
  JAXBContext jaxbContext = org.eclipse.persistence.jaxb.JAXBContextFactory
                    .createContext(new Class[] {Company.class}, null);

  Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

5. Реализация JAXB – Стеклянная рыба

Есть стеклянная рыба ДЖАКСБ РИ.

  
  
      jakarta.xml.bind
      jakarta.xml.bind-api
      3.0.0
  

  
      org.glassfish.jaxb
      jaxb-runtime
      3.0.0
      runtime
  

6. javax.xml.bind или jakarta.xml.bind?

Java EE javax. * был переименован в Jakarta EE джакарта. * , прочитайте историю Джакартского EE .

6.1 Java EE и javax.xml .*

jaxb-api содержит API-интерфейсы в старых пакетах Java EE джавакс. * . JAXB RI также необходимо переключиться на 2.3. * версия.

  
  
      javax.xml.bind
      jaxb-api
      2.3.1
  

  
  
      com.sun.xml.bind
      jaxb-impl
      2.3.4
  

Некоторые API-интерфейсы в javax.xml . * посылка.

// Java EE packages
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

6.2 Джакарта ЭЭ и jakarta.xml . *

jakarta.xml.bind-api* содержит API-интерфейсы в новых пакетах jakarta. * . JAXB RI должен переключиться на 3. * версия.

  
  
      jakarta.xml.bind
      jakarta.xml.bind-api
      3.0.0
  

  
  
      com.sun.xml.bind
      jaxb-impl
      3.0.0
      runtime
  

Те же API-интерфейсы в jakarta.xml . * посылка.

// Jakarta EE packages
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;

Примечание Пример JAXB привет, мир

7. Скачать Исходный Код

$ клон git $ клон git

$ cd java-xml

$ cd src/основной/java/com/mkyong/xml/jaxb/

8. Рекомендации

Оригинал: “https://mkyong.com/java/jaxbexception-implementation-of-jaxb-api-has-not-been-found-on-module-path-or-classpath/”