2016-06-20 12 views
1

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 

番号3:json-schema-validator

<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の依存関係を更新したりする必要があります。

答えて

1

私はJava8ライブラリをダウンロードしないようとJava6の上でコンパイルeveritライブラリのバックポートを作成した7

@rduilheのためにそれを再コンパイルします。それは、以前のバージョンのポートですが、あなたは、それをローカルにコンパイル可能性がありますhttps://github.com/rdruilhe/json-schema

(免責事項:私はeverit-ORG/JSONスキーマの作者だ)

+0

私はあなたが私を与えたリポジトリをクローン化したが、コードにはlamba-functionsが含まれているので、まだJava8コードであることは明らかです。 Java6で動作する1.1.0ですか? –

+0

そのリポジトリに "java6-compliant"というブランチがあります。マスターの代わりにそれを試してください – erosb

+1

ありがとうございました[セクション](https://github.com/rdruilhe/json-schema/tree/java6-compliant)が見つかりました。私のローカルMavenリポジトリのために設定され、展開された相対コード。すべて完了し、働いています。 –

関連する問題