Java应用程序引擎-使用适当的库验证JSON模式
我正在寻找一个有效的JsonSchema验证库,它可以与AppEngineJava环境一起工作 我发现了3个不同的库,但没有一个因为不同的原因而可用 第一名: 问题是: 它使用了一个旧版本的Guava(Guava 13.0.1),我不能使用它,因为我的主要项目使用的是版本19,但更重要的是,我使用的是版本13中还不存在的更新的Guava方法Java应用程序引擎-使用适当的库验证JSON模式,java,maven,validation,google-app-engine,jsonschema,Java,Maven,Validation,Google App Engine,Jsonschema,我正在寻找一个有效的JsonSchema验证库,它可以与AppEngineJava环境一起工作 我发现了3个不同的库,但没有一个因为不同的原因而可用 第一名: 问题是: 它使用了一个旧版本的Guava(Guava 13.0.1),我不能使用它,因为我的主要项目使用的是版本19,但更重要的是,我使用的是版本13中还不存在的更新的Guava方法 java.lang.NoSuchMethodError: com.google.common.collect.FluentIterable.toImmuta
java.lang.NoSuchMethodError: com.google.common.collect.FluentIterable.toImmutableSet()Lcom/google/common/collect/ImmutableSet;
at org.eel.kitchen.jsonschema.syntax.draftv4.DraftV4TypeSyntaxChecker.<clinit>(DraftV4TypeSyntaxChecker.java:43)
问题:这个库只针对Java8编译,而Java8不适用于AppEngine环境
java.lang.UnsupportedClassVersionError: org/everit/json/schema/loader/SchemaLoader : Unsupported major.minor version 52.0
第三名: 问题在于:Jackson似乎使用了多线程方式来执行代码,如果不通过GAE ThreadManager声明,应用程序内引擎将被禁止
java.io.IOException: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
我没有找到这个库的其他Java实现,我所有的尝试都没有成功。我工作的唯一方法是使用Guava 13的第一个解决方案(我禁用了我的代码,它使用较新的Guava函数,用自定义代码重写了功能)
最后。。。问题是:除了我已经展示的可能与AppEngine一起工作的库之外,还有其他库吗?
如果可能的话,我希望避免下载Java8库并将其重新编译为7版本,甚至更新第一个库Guava依赖项
我希望避免下载Java8库并重新编译它7
@rduilhe创建了everit库的后端口,该库在java6上编译。您可以在本地编译它,尽管它是早期版本的端口:
(免责声明:我是everit org/json模式的作者)我克隆了您给我的存储库,但代码包含lamba函数,因此很明显,这仍然是Java8代码。是1.1.0版本的Java6吗?repo有一个分支称为“Java6兼容”,尝试使用它代替masterThank you,找到并下载相关代码,为我的本地Maven存储库配置,然后部署。一切都完成了,一切正常。
<dependency>
<groupId>org.everit.json</groupId>
<artifactId>org.everit.json.schema</artifactId>
<version>1.3.0</version>
</dependency>
try (InputStream inputStream = Validator.class.getResourceAsStream("schema.json")) {
JSONObject rawSchema = new JSONObject(new JSONTokener(inputStream));
Schema schema = SchemaLoader.load(rawSchema);
schema.validate(new JSONObject(input)); // throws a ValidationException if this object is invalid
}
java.lang.UnsupportedClassVersionError: org/everit/json/schema/loader/SchemaLoader : Unsupported major.minor version 52.0
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.2.6</version>
</dependency>
JsonNode schema = JsonLoader.fromURL(HelloAppEngine.class.getResource("schema.json"));
JsonNode json = JsonLoader.fromURL(HelloAppEngine.class.getResource("json.json"));
JsonSchema jsonSchema = JsonSchemaFactory.byDefault().getJsonSchema(schema);
ProcessingReport report = jsonSchema.validate(json);
if (!report.isSuccess()) {
// throw error;
}
java.io.IOException: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")