【问题标题】:Provider org.glassfish.json.JsonProviderImpl not found at javax.json.spi.JsonProvider.provider(JsonProvider.java:97)在 javax.json.spi.JsonProvider.provider(JsonProvider.java:97) 中找不到提供程序 org.glassfish.json.JsonProviderImpl
【发布时间】:2018-04-11 20:52:18
【问题描述】:

如何在 Eclipse 中运行用于 JSON 处理的 Java API(JSR 374)?

我正在尝试将 JSON 字符串解析为 JsonParser(javax.json.stream.JsonParser)。还在构建路径中添加了 javax.json-api-1.0.jar。在运行时,有一个例外。 我的代码是

import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonReader;
import javax.json.JsonStructure;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;
import javax.json.JsonReader;
import javax.json.JsonStructure;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;
public class jsonnn {
public class jsonnn {
public static void main(String[] args) {
        // Parse back
        final String result = "{\"name\":\"Falco\",\"age\":3,\"bitable\":false}";
        final JsonParser parser = Json.createParser(new StringReader(result));
        String key = null;
        String value = null;
        while (parser.hasNext()) {
            final Event event = parser.next();
            switch (event) {
            case KEY_NAME:
                key = parser.getString();
                System.out.println(key);
                break;
            case VALUE_STRING:
                value = parser.getString();
                System.out.println(value);
                break;
            }
        }
        parser.close();
    }
}

例外是

Exception in thread "main" javax.json.JsonException: Provider org.glassfish.json.JsonProviderImpl not found
at javax.json.spi.JsonProvider.provider(JsonProvider.java:97)
at javax.json.Json.createParser(Json.java:90)
at jsonnn.main(jsonnn.java:14)
Caused by: java.lang.ClassNotFoundException: org.glassfish.json.JsonProviderImpl
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at javax.json.spi.JsonProvider.provider(JsonProvider.java:94)
... 2 more

【问题讨论】:

标签: java json eclipse jar glassfish


【解决方案1】:

您正在针对 API 进行开发,并且没有针对该 API 的实现。你需要确保你有一个 JSON-P 规范的实现来实际运行你尝试使用的代码。

JSR 374 official website Getting Started guide 中,它表明您需要两个 Maven 依赖项 - 一个用于 API,一个用于参考实现 - 才能使用 JSON-P 1.1:

<dependency>
    <groupId>javax.json</groupId>
    <artifactId>javax.json-api</artifactId>
    <version>1.1</version>
</dependency>

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1</version>
</dependency>

由于您似乎没有使用 Maven,因此您需要从 Maven Central 手动下载实现 JAR: https://repo1.maven.org/maven2/org/glassfish/javax.json/1.1/

或者直接点击这个链接下载 JAR:javax.json-1.1.jar

【讨论】:

  • 值得一提的是,1.0 版(API 和实现)是 Java 1.8 支持的最后一个版本。 1.1 及以上版本需要 Java 1.9(类文件版本 53.0)。
  • 不正确 - JSON-P 1.1 是在支持 Java SE 8 的 Java EE 8 中发布的。
  • 看来截至2018年底,maven/gradle包名改为jakarta.json:jakarta.json-apiorg.glassfish:jakarta.jsoneclipse-ee4j.github.io/jsonp
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
相关资源
最近更新 更多