微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JAXB/Moxy 解组 JSON 在线程“main”中遇到错误异常 java.lang.NoClassDefFoundError: jakarta/json/JsonException

如何解决JAXB/Moxy 解组 JSON 在线程“main”中遇到错误异常 java.lang.NoClassDefFoundError: jakarta/json/JsonException

我正在尝试使用 Unmarshal一个简单的 JSON 文件Student POJO 发送到我的 JAXB/Moxy,但我遇到了以下错误

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)

如果我尝试用 JSON 替换 XML,那么一切正常。仅当我为 Unmarshalling 文件运行 JSON 时才会出错。

我只想知道当 JSON 一切正常时,为什么我会遇到 XML 的问题,并且我正在按照文章中提到的步骤进行操作。任何帮助将不胜感激。

我有 Jaxb.properties 文件

jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

以下是我的 Student 课:

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

我只想知道当 JSON 一切正常时,为什么我会遇到 XML 的问题,并且我正在按照文章中提到的步骤进行操作。任何帮助将不胜感激。

在这里尝试了其他帖子中可用的所有方法,但没有任何效果,所以发布相同的内容

我正在关注这些文章https://dzone.com/articles/eclipselink-moxy-and-java-api http://blog.bdoughan.com/2013/07/eclipselink-moxy-and-java-api-for-json.html

解决方法

异常实际上告诉您问题。您在运行时缺少一个类,因此您需要添加一个依赖项。根据包名称和问题描述,我们可以假设您要添加 Jakarta JSON Processing (JSON-P)。尝试添加以下依赖

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.json</artifactId>
    <version>2.0.1</version>
</dependency>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?