App Engine Java環境で動作する有効なJsonSchema検証ライブラリを探しています。Java App Engine - 適切なライブラリを使用してJSONスキーマを検証する
私は3つの異なるライブラリを見つけましたが、いずれもさまざまな理由で使用できません。
ナンバー1:json-schema-validator
<dependency>
<groupId>org.kitchen-eel</groupId>
<artifactId>json-schema-validator</artifactId>
<version>1.5.2</version>
</dependency>
そしてここでコード
ValidationReport report;
JsonNode schema = JsonLoader.fromURL(Validator.class.getResource("schema.json"));
JsonNode json = JsonLoader.fromString(input);
JsonSchemaFactory factory = JsonSchemaFactory.defaultFactory();
JsonSchema jsonSchema = factory.fromSchema(schema);
report = jsonSchema.validate(json);
if (!report.isSuccess()) {
// throw error
}
問題です: それはグアバ(グアバ13.0.1)の古いバージョンを使用して、そのI私のメインプロジェクトでバージョン19を使用していますが、より重要なのは、バージョン13でまだ存在しなかった新しいGuavaメソッドを使用しているためです。
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)
ナンバー2:このライブラリはある、唯一のJava 8用にコンパイルされていますorg.everit.json.schema
<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
}
問題ですApp Engine環境では利用できません
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;
}
問題である:ジャクソンが、マルチスレッドの方法を使用しているようですコードを実行するには、私はnは、私はこのライブラリのために他のJava実装が見つかりませんでした
java.io.IOException: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
GAE ThreadManagerによって宣言されていない場合はApp Engineは禁止され、そしてすべての私の試みは失敗しました。私が働いた唯一の方法は、Guava 13を使った最初の解決策です(新しいGuava関数を使用してコードを無効にし、カスタムコードで機能を書き直しています)。
最後に...誰にも代替ライブラリがありますか?すでにApp Engineで動作する可能性のあるものを教えてください。 可能であれば、Java8ライブラリのダウンロードを避け、7バージョン用に再コンパイルしたり、最初のライブラリGuavaの依存関係を更新したりする必要があります。
私はあなたが私を与えたリポジトリをクローン化したが、コードにはlamba-functionsが含まれているので、まだJava8コードであることは明らかです。 Java6で動作する1.1.0ですか? –
そのリポジトリに "java6-compliant"というブランチがあります。マスターの代わりにそれを試してください – erosb
ありがとうございました[セクション](https://github.com/rdruilhe/json-schema/tree/java6-compliant)が見つかりました。私のローカルMavenリポジトリのために設定され、展開された相対コード。すべて完了し、働いています。 –