json-schema-validator NoClassDefFoundError:com / google / common / io / Closer

问题描述 投票:3回答:2

解决方案:添加番石榴依赖项:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

我正在尝试在此处使用json-schema-validator:https://github.com/fge/json-schema-validator

我正在使用以下Maven依赖项:

<dependency>
    <groupId>com.github.fge</groupId>
    <artifactId>json-schema-validator</artifactId>
    <version>2.2.5</version>
</dependency>

这是我正在尝试的课程:

import java.io.IOException;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.JsonLoader;

public class JsonSchemaTest {
    public static void main(String[] args) throws IOException {
        JsonNode jsonNode = JsonLoader.fromString("{\"a\":1}");
    }
}

这是我收到的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/io/Closer
    at com.github.fge.jackson.JsonNodeReader.fromReader(JsonNodeReader.java:120)
    at com.github.fge.jackson.JsonLoader.fromReader(JsonLoader.java:179)
    at com.github.fge.jackson.JsonLoader.fromString(JsonLoader.java:192)
    at com.cisco.webex.squared.flume.JsonSchemaTest.main(JsonSchemaTest.java:10)
Caused by: java.lang.ClassNotFoundException: com.google.common.io.Closer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 4 more

---编辑:

如果我将Maven版本更改为2.1.7,则可以执行JsonNode jsonNode = JsonLoader.fromString("{\"a\":1}");,但如果没有相同的java.lang.NoClassDefFoundError: com/google/common/io/Closer错误,则无法在此处创建工厂:

import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.JsonLoader;
import com.github.fge.jsonschema.exceptions.ProcessingException;
import com.github.fge.jsonschema.main.JsonSchema;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
import com.github.fge.jsonschema.report.ProcessingReport;

public final class JsonSchemaTest {
    public static void main(final String[] args) throws IOException, ProcessingException {
         //JsonNode data = JsonLoader.fromString("{\"a\":1}");
        final JsonNode data = JsonLoader.fromString("{\"a\":1}");
        final JsonNode fstabSchema = JsonLoader.fromString("{\"type\":\"object\", \"properties\":{\"a\":{\"type\":\"number\"}}}");

        final JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
        final JsonSchema schema = factory.getJsonSchema(fstabSchema);

        ProcessingReport report;

        report = schema.validate(data);
        System.out.println(report);
    }
}
java json jsonschema json-schema-validator
2个回答
2
投票

您必须在项目中导入番石榴库。

http://www.java2s.com/Code/Jar/g/Downloadguava150rc1jar.htm


0
投票

我也遇到相同的错误

com/google/common/io/Closer
java.lang.NoClassDefFoundError: com/google/common/io/Closer
at com.github.fge.jackson.JsonLoader.fromResource(JsonLoader.java:93)
at com.github.fge.jsonschema.SchemaVersion.<init>(SchemaVersion.java:63)
at com.github.fge.jsonschema.SchemaVersion.<clinit>(SchemaVersion.java:44)
com.github.fge.jsonschema.core.load.configuration.LoadingConfigurationBuilder.<init>(LoadingConfigurationBuilder.java:117)

[当尝试运行一个使用使用matchesJsonSchemaInClasspath开发的json模式验证测试用例时,请放心使用。我什至尝试添加番石榴依赖integrationTestCompile组:“ com.google.guava”,名称:“ guava”,版本:“ 11.0.2”,但失败。任何帮助将不胜感激

© www.soinside.com 2019 - 2024. All rights reserved.