JAXB/Moxy unmarshalling JSON runs into error Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/json/JsonException
JAXB/Moxy unmarshalling JSON runs into error Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/json/JsonException
我正在尝试 Unmarshal
使用 JAXB/Moxy
将一个简单的 JSON
文件发送到我的 Student POJO
,但我 运行 遇到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/json/JsonException
at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.getNewXMLReader(SAXUnmarshaller.java:211)
at com.newJAXB.UnmarshallingJSON.main(UnmarshallingJSON.java:24)
Caused by: java.lang.ClassNotFoundException: jakarta.json.JsonException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
如果我尝试用 XML
替换 JSON
那么一切正常。仅当我 运行 Unmarshalling
for JSON
file.
时才会出现错误
我只是想知道为什么在 XML
一切正常时我会遇到 JSON
的问题并且我正在按照文章中提到的步骤进行操作。任何帮助将不胜感激。
我有 Jaxb.properties
个文件:
jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
以下是我的Student
class:
@XmlRootElement(name = "Student")
@XmlType(name = "Student", propOrder = {"name", "age"})
@XmlAccessorType(XmlAccessType.FIELD)
@ToString(callSuper = true)
@Data
@NoArgsConstructor
public class Student {
private String name;
private String age;
}
以下是我的 JSON
文件:
{
"name": "xyz",
"age": "25"
}
以下是我的Unmarshalling main class
:
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Unmarshaller;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;
import java.io.InputStream;
public class UnmarshallingJSON {
public static void main(String[] args) throws JAXBException {
final InputStream inputStream = com.newJAXB.UnmarshallingJSON.class.getClassLoader().getResourceAsStream("student.json");
JAXBContext jc = JAXBContext.newInstance(Student.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setProperty("eclipselink.media-type", "application/json");
unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
Student student = (Student) unmarshaller.unmarshal(inputStream);
System.out.println(student);
}
}
以下是我的依赖:
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>3.1.0-SNAPSHOT</version>
</dependency>
我只是想知道为什么在 XML
一切正常时我会遇到 JSON
的问题并且我正在按照文章中提到的步骤进行操作。任何帮助将不胜感激。
我在这里尝试了其他帖子上可用的所有方法都没有用,所以发布相同的方法。
我正在关注这些文章:
https://dzone.com/articles/eclipselink-moxy-and-java-api
http://blog.bdoughan.com/2013/07/eclipselink-moxy-and-java-api-for-json.html
异常实际上告诉你问题所在。您在运行时缺少 class,因此您需要添加依赖项。根据包名和问题描述,我们可以假设您要添加 Jakarta JSON Processing (JSON-P)。尝试添加以下依赖项
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.json</artifactId>
<version>2.0.1</version>
</dependency>
我正在尝试 Unmarshal
使用 JAXB/Moxy
将一个简单的 JSON
文件发送到我的 Student POJO
,但我 运行 遇到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/json/JsonException
at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.getNewXMLReader(SAXUnmarshaller.java:211)
at com.newJAXB.UnmarshallingJSON.main(UnmarshallingJSON.java:24)
Caused by: java.lang.ClassNotFoundException: jakarta.json.JsonException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
如果我尝试用 XML
替换 JSON
那么一切正常。仅当我 运行 Unmarshalling
for JSON
file.
我只是想知道为什么在 XML
一切正常时我会遇到 JSON
的问题并且我正在按照文章中提到的步骤进行操作。任何帮助将不胜感激。
我有 Jaxb.properties
个文件:
jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
以下是我的Student
class:
@XmlRootElement(name = "Student")
@XmlType(name = "Student", propOrder = {"name", "age"})
@XmlAccessorType(XmlAccessType.FIELD)
@ToString(callSuper = true)
@Data
@NoArgsConstructor
public class Student {
private String name;
private String age;
}
以下是我的 JSON
文件:
{
"name": "xyz",
"age": "25"
}
以下是我的Unmarshalling main class
:
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Unmarshaller;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;
import java.io.InputStream;
public class UnmarshallingJSON {
public static void main(String[] args) throws JAXBException {
final InputStream inputStream = com.newJAXB.UnmarshallingJSON.class.getClassLoader().getResourceAsStream("student.json");
JAXBContext jc = JAXBContext.newInstance(Student.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setProperty("eclipselink.media-type", "application/json");
unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
Student student = (Student) unmarshaller.unmarshal(inputStream);
System.out.println(student);
}
}
以下是我的依赖:
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>3.1.0-SNAPSHOT</version>
</dependency>
我只是想知道为什么在 XML
一切正常时我会遇到 JSON
的问题并且我正在按照文章中提到的步骤进行操作。任何帮助将不胜感激。
我在这里尝试了其他帖子上可用的所有方法都没有用,所以发布相同的方法。
我正在关注这些文章: https://dzone.com/articles/eclipselink-moxy-and-java-api http://blog.bdoughan.com/2013/07/eclipselink-moxy-and-java-api-for-json.html
异常实际上告诉你问题所在。您在运行时缺少 class,因此您需要添加依赖项。根据包名和问题描述,我们可以假设您要添加 Jakarta JSON Processing (JSON-P)。尝试添加以下依赖项
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.json</artifactId>
<version>2.0.1</version>
</dependency>