You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Andreas Gebhardt (JIRA)" <ji...@apache.org> on 2016/04/17 21:16:25 UTC

[jira] [Comment Edited] (CAMEL-9799) JSON/JSON Schema validator

    [ https://issues.apache.org/jira/browse/CAMEL-9799?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15244837#comment-15244837 ] 

Andreas Gebhardt edited comment on CAMEL-9799 at 4/17/16 7:15 PM:
------------------------------------------------------------------

Hi Claus,

a short intermediate status on comparison of both Java based JSON schema validators. This https://github.com/agebhar1/json-schema-validator-battle is the repository. It's a Maven based multi-module Java project. A module for each JSON schema validator, because of there dependencies and one for schema and example resources.

*Dependencies*

 +- com.github.fge:json-schema-validator:jar:2.2.6:compile
    +- com.google.code.findbugs:jsr305:jar:3.0.0:compile
    +- joda-time:joda-time:jar:2.3:compile
    +- com.googlecode.libphonenumber:libphonenumber:jar:6.2:compile
    +- com.github.fge:json-schema-core:jar:1.2.5:compile
       +- com.github.fge:uri-template:jar:0.9:compile
          +- com.github.fge:msg-simple:jar:1.1:compile
             \- com.github.fge:btf:jar:1.2:compile
          \- com.google.guava:guava:jar:16.0.1:compile
       +- com.github.fge:jackson-coreutils:jar:1.8:compile
          \- com.fasterxml.jackson.core:jackson-databind:jar:2.2.3:compile
             +- com.fasterxml.jackson.core:jackson-annotations:jar:2.2.3:compile
             \- com.fasterxml.jackson.core:jackson-core:jar:2.2.3:compile
       \- org.mozilla:rhino:jar:1.7R4:compile
    +- javax.mail:mailapi:jar:1.4.3:compile
       \- javax.activation:activation:jar:1.1:compile
    \- net.sf.jopt-simple:jopt-simple:jar:4.6:compile

 +- org.everit.json:org.everit.json.schema:jar:1.2.0:compile
    +- org.json:json:jar:20160212:compile
    +- com.google.guava:guava:jar:19.0:compile
    \- commons-validator:commons-validator:jar:1.5.0:compile
       +- commons-beanutils:commons-beanutils:jar:1.9.2:compile
       +- commons-digester:commons-digester:jar:1.8.1:compile
       +- commons-logging:commons-logging:jar:1.2:compile
       \- commons-collections:commons-collections:jar:3.2.2:compile

The needed dependencies for `fge/json-schema-validator` are much more than that of `everit-org/json-schema`. But `fge/json-schema-validator` depends on the popular Jackson library which might cause some problems if another version is already on the classpath. Both depends on Google's `guava` in which `everit-org/json-schema` makes use of current version 19 whereas `fge/json-schema-validator` on 16.0.1.

*Failure Reports*

Schema:

{
  "$schema" : "http://json-schema.org/draft-04/schema",
  "type": "object",
  "required": [
    "a"
  ],
  "properties": {
    "a": {
      "type": "string"
    },
    "b": {
      "type": "number"
    },
    "c": {
      "type": "boolean" 
    }
  }
}

Failing Example:

{
 "a": "foo",
 "b": "1",
 "c": false
}

`everit-org/json-schema`:

#/b: expected type: Number, found: String

`fge/json-schema-validator`:

{
  "level": "error",
  "schema": {
    "loadingURI": "#",
    "pointer": "/properties/b"
  },
  "instance": {
    "pointer": "/b"
  },
  "domain": "validation",
  "keyword": "type",
  "message": "instance type (string) does not match any allowed primitive type (allowed: [\"integer\",\"number\"])",
  "found": "string",
  "expected": [
    "integer",
    "number"
  ]
}

So I must revise my statement on failure/error reporting - `fge/json-schema-validator` is obviously more precise. 

Hopefully in the next week I would add more sophisticated examples, maybe based on tests from `fge/json-schema-validator` and/or `everit-org/json-schema`. JSON schema also supports modular style through referencing (sub) schemas. Both implementations provide support which need some investigations. 

What did you think?


was (Author: agebhar1):
Hi Claus,

a short intermediate status on comparison of both Java based JSON schema validators. This https://github.com/agebhar1/json-schema-validator-battle is the repository. It's a Maven based multi-module Java project. A module for each JSON schema validator, because of there dependencies and one for schema and example resources.

*Dependencies*

 +- com.github.fge:json-schema-validator:jar:2.2.6:compile
    +- com.google.code.findbugs:jsr305:jar:3.0.0:compile
    +- joda-time:joda-time:jar:2.3:compile
    +- com.googlecode.libphonenumber:libphonenumber:jar:6.2:compile
    +- com.github.fge:json-schema-core:jar:1.2.5:compile
    |  +- com.github.fge:uri-template:jar:0.9:compile
    |  |  +- com.github.fge:msg-simple:jar:1.1:compile
    |  |  |  \- com.github.fge:btf:jar:1.2:compile
    |  |  \- com.google.guava:guava:jar:16.0.1:compile
    |  +- com.github.fge:jackson-coreutils:jar:1.8:compile
    |  |  \- com.fasterxml.jackson.core:jackson-databind:jar:2.2.3:compile
    |  |     +- com.fasterxml.jackson.core:jackson-annotations:jar:2.2.3:compile
    |  |     \- com.fasterxml.jackson.core:jackson-core:jar:2.2.3:compile
    |  \- org.mozilla:rhino:jar:1.7R4:compile
    +- javax.mail:mailapi:jar:1.4.3:compile
    |  \- javax.activation:activation:jar:1.1:compile
    \- net.sf.jopt-simple:jopt-simple:jar:4.6:compile

 +- org.everit.json:org.everit.json.schema:jar:1.2.0:compile
    +- org.json:json:jar:20160212:compile
    +- com.google.guava:guava:jar:19.0:compile
    \- commons-validator:commons-validator:jar:1.5.0:compile
       +- commons-beanutils:commons-beanutils:jar:1.9.2:compile
       +- commons-digester:commons-digester:jar:1.8.1:compile
       +- commons-logging:commons-logging:jar:1.2:compile
       \- commons-collections:commons-collections:jar:3.2.2:compile

The needed dependencies for `fge/json-schema-validator` are much more than that of `everit-org/json-schema`. But `fge/json-schema-validator` depends on the popular Jackson library which might cause some problems if another version is already on the classpath. Both depends on Google's `guava` in which `everit-org/json-schema` makes use of current version 19 whereas `fge/json-schema-validator` on 16.0.1.

*Failure Reports*

Schema:

{
  "$schema" : "http://json-schema.org/draft-04/schema",
  "type": "object",
  "required": [
    "a"
  ],
  "properties": {
    "a": {
      "type": "string"
    },
    "b": {
      "type": "number"
    },
    "c": {
      "type": "boolean" 
    }
  }
}

Failing Example:

{
 "a": "foo",
 "b": "1",
 "c": false
}

`everit-org/json-schema`:

#/b: expected type: Number, found: String

`fge/json-schema-validator`:

{
  "level": "error",
  "schema": {
    "loadingURI": "#",
    "pointer": "/properties/b"
  },
  "instance": {
    "pointer": "/b"
  },
  "domain": "validation",
  "keyword": "type",
  "message": "instance type (string) does not match any allowed primitive type (allowed: [\"integer\",\"number\"])",
  "found": "string",
  "expected": [
    "integer",
    "number"
  ]
}

So I must revise my statement on failure/error reporting - `fge/json-schema-validator` is obviously more precise. 

Hopefully in the next week I would add more sophisticated examples, maybe based on tests from `fge/json-schema-validator` and/or `everit-org/json-schema`. JSON schema also supports modular style through referencing (sub) schemas. Both implementations provide support which need some investigations. 

What did you think?

> JSON/JSON Schema validator
> --------------------------
>
>                 Key: CAMEL-9799
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9799
>             Project: Camel
>          Issue Type: Wish
>            Reporter: Andreas Gebhardt
>
> > Von: Gnanaguru S
> > An: ★ dev@camel.apache.org
> >
> > Subject: \[DISCUSS\] - Thoughts on Apache Camel 2.18 and towards 3.0
> >
> > \[...\]
> > 7.  JSON validator. XML XSD validation is nice and straight forward, but it
> > will be great if we have something similar for JSON as well. like
> > to:json-validator:classpath/response.json
> > \[...\]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)