Causés par: java.lang.ClassNotFoundException: com.soleil.xml.bind.v2.de modèle.annotation.AnnotationReader
Vous pourriez penser que le problème suivant est très simple, mais je ne sais pas ce que j'ai fait de mal ici. Je me sens j'ai ajouté les dépendances nécessaires. N'ai-je pas?
Quelqu'un pourrait-il svp me suggérer quoi de mal ici?
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/bind/v2/model/annotation/AnnotationReader
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:242)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:441)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
at com.misc.common.ReadXMLFileJaxb.main(ReadXMLFileJaxb.java:14)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.model.annotation.AnnotationReader
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 23 more
Book.java
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Book {
@XmlAttribute
private String firstName;
@XmlElement
private String lastName;
@XmlElement
private String age;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Book [firstName=" + firstName + ", lastName=" + lastName+ ", age=" + age + "]";
}
}
ReadXMLFileJaxb.java
public class ReadXMLFileJaxb {
public static void main(String[] args) {
File file = new File(ReadXMLFileDOM.class.getClassLoader().getResource("book.xml").getFile());
try {
JAXBContext context = JAXBContext.newInstance(Book.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Book book = (Book) unmarshaller.unmarshal(file);
System.out.println(book.toString());
} catch (JAXBException e) {
System.out.println(e.getMessage());
}
}
}
Mon book.xml
<?xml version="1.0"?>
<book>
<person>
<first>Kiran</first>
<last>Pai</last>
<age>22</age>
</person>
<person>
<first>Bill</first>
<last>Gates</last>
<age>46</age>
</person>
<person>
<first>Steve</first>
<last>Jobs</last>
<age>40</age>
</person>
</book>
pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- JAXB -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.12</version>
</dependency>
</dependencies>
OriginalL'auteur | 2016-04-11
Vous devez vous connecter pour publier un commentaire.
Comme par lien: Pourquoi a AnnotationReader été retiré de JAXB de référence de mise en œuvre?, vous devez tout simplement utiliser ci-dessous les dépendances maven:
Vous avez besoin de refactorisation de code un peu. Regarde aussi comme vous n'avez pas créé de même nom des champs de la classe du modèle, il doit être comme ci-dessous:
Person.java
Book.java
ReadXMLFileJaxb.java
Ci-dessous la sortie je vois:
jaxb-core
etjaxb-impl
,jaxb-core
ajoute automatiquementjaxb-impl
.FYI: jaxb-core n'est plus une partie de la com.soleil.xml.bind. J'ai eu ce même message d'erreur et qui a été corrigé avec l'aide de jaxb-xjc, version 2.1.7, de com.soleil.xml.bind.
OriginalL'auteur
Bien que la Question est très ancienne mais toujours d'y répondre. La racine la cause est que com.soleil.xml.bind est aujourd'hui obsolète. org.glassfish.jaxb est l'implémentation de référence de l'API JAXB. L'aide ci-dessous JAXB RI maven dépendance permettrait de résoudre le problème.
j'ai dû passer à 2.3.0 artefacts de l'exécution et de base pour résoudre le problème
elle a effectivement travaillé pour moi, c' :
<dependency> <groupId>com.sun.activation</groupId> <artifactId>javax.activation</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.0</version> </dependency>
seul votre combinaison a travaillé, merci!!! (java10, spring-boot 2.0.x)
OriginalL'auteur nirmalsingh
Vous semblent être en cours d'exécution à l'intérieur de l'IDE. Pour des raisons étranges, bien que la JAXB cours sont inclus dans les JRE rt.jar,
ils ne sont pas disponibles pour votre application à l'exécution.
Cependant, si je lance l'application de cette façon:
c'est à dire à partir de la ligne de commande en utilisant la norme Maven de la structure, il ne semble pas fonctionner.
Votre book.xml est un peu de mal, je crois. Il contient un
person
élément alors que l'Book.java ne fait pas. Vous pouvez résoudre ce problème.OriginalL'auteur Kedar Mhaswade