2014年7月19日土曜日

jsonschema2pojo 妥当性チェック

jsonschema2pojoを使ってjackson用のクラスファイルを作成してみましたが、json schemaの妥当性のチェックがソースとして反映されてないようです。

デフォルトの指定ではバリデーションは有効にならないようです。
https://github.com/joelittlejohn/jsonschema2pojo/wiki/Reference

ということで、以下から、jarファイルをダウンロードして前回作成したプロジェクトの"libs"に追加します。
http://mvnrepository.com/artifact/javax.validation/validation-api/1.0.0.GA

さらに、build.xmlを以下のように置き換え

<xml version="1.0" encoding="UTF-8"?>
<project name="myproject" default="generate">

<taskdef name="jsonschema2pojo" classname="org.jsonschema2pojo.ant.Jsonschema2PojoTask">
<classpath>
<fileset dir="libs">
<include name="*.jar" />
</fileset>
</classpath>
</taskdef>

<target name="generate">
<jsonschema2pojo source="src/address.json"
targetDirectory="gen" targetPackage="com.example"
includeJsr303Annotations="true" />
</target>

</project>



これで実行すると妥当性チェックをしてくれそうなJavaクラスが生成されます。
※実際にチェックされるのかは後でやります。

jsonスキーマからJavaクラス生成でparseエラーが出る場合は、antの引数に、"-verbose"を指定すると問題の箇所が特定できます。1つ1つ順番に潰していってください。

Json Schemaを追加ってJavaクラスを生成する

必要があったので、Json Schemaがどんなものなのか確認する意味を含めてJson SchemaからJavaクラスを生成してみました。

いつもEclipseを利用して作業を行っているため、今回の生成もEclipseを利用します。
以下のサイトを参考にしました


1. Eclipseにプロジェクトを作成し、build.xmlファイルを準備します。
build.xmlファイルには、以下のコードを貼り付けておきます。

<xml version="1.0" encoding="UTF-8"?>
<project name="myproject" default="generate">

<taskdef name="jsonschema2pojo" classname="org.jsonschema2pojo.ant.Jsonschema2PojoTask">
<classpath>
<fileset dir="libs">
<include name="*.jar" />
</fileset>
</classpath>
</taskdef>

<target name="generate">
<jsonschema2pojo source="src/address.json"
targetDirectory="gen" targetPackage="com.example" />
</target>

</project>


<xml version="1.0" encoding="UTF-8"?>
<project name="myproject" default="generate">


2. 必要なJarファイルをダウンロードし、プロジェクト内の"libs"フォルダへ配置します。
必要なJarファイル一覧は、jsonschema2pojo -Githubの"The Ant Task"にありますが、一部ライブラリの追加、変更が必要でした。
追加
・Appache commons lang 3
変更
・codemodel2.4 → codemodel2.6

3. buildの実行
Buildfile: /Users/XX/Documents/workspace/jsonschema2java/build.xml
generate:
BUILD SUCCESSFUL
Total time: 615 milliseconds

完成