【问题标题】:JAXB/Moxy unmarshalling JSON runs into error Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/json/JsonExceptionJAXB/Moxy 解组 JSON 在线程“主”java.lang.NoClassDefFoundError 中遇到错误异常:jakarta/json/JsonException
【发布时间】:2021-06-18 20:04:57
【问题描述】:

我正在尝试使用JAXB/Moxy 将一个简单的JSON 文件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,那么一切正常。仅当我为 JSON 文件运行 Unmarshalling 时才会出现错误。

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

我有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>

我只是想知道为什么我在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

【问题讨论】:

    标签: java json jaxb unmarshalling moxy


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢这对我有帮助。我知道这一定与依赖有关,但找不到类似的东西。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2014-11-06
    相关资源
    最近更新 更多