Автор оригинала: 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. Рекомендации
- Привязка XML в Джакарте
- EclipseLink Мокси
- Архитектура Java для привязки XML (JAXB)
- Пример JAXB привет, мир
Оригинал: “https://mkyong.com/java/jaxbexception-implementation-of-jaxb-api-has-not-been-found-on-module-path-or-classpath/”