Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.double-agent-validator:double-agent-validator-java:0.0.5'
}
dependencies {
implementation("com.github.double-agent-validator:double-agent-validator-java:0.0.5")
}
<dependency>
<groupId>com.github.double-agent-validator</groupId>
<artifactId>double-agent-validator-java</artifactId>
<version>0.0.5</version>
</dependency>
libraryDependencies += "com.github.double-agent-validator" % "double-agent-validator-java" % "0.0.5"
:dependencies [[com.github.double-agent-validator/double-agent-validator-java "0.0.5"]]
Este projeto tem por objetivo permitir a execução de validações de forma isomórfica, ou seja: o mesmo código utilizado para validar os dados no servidor é utilizado para validar os dados no frontend.
Para tanto levou-se ### em conta a capacidade de executar javascript no servidor Java utilizando o Nashorn (uma script engine Javascript) disponível no Java 8, que tem uma vantagem considerável em relação à script engine anterior (Rhino) que lenta.
Adicione o jitpack como repositório maven, no seu arquivo pom.xml:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
...
Adicione a dependência double-agent-validator no pom.xml, como a seguir:
<dependency>
<groupId>com.gitlab.serpro</groupId>
<artifactId>double-agent-validator</artifactId>
<version>0.0.11</version>
</dependency>
mvn install
./start-vertx-server.sh
./start-angular2.sh
Dado o seguinte arquivo presente na pasta src/main/resources
var DoubleAgent;
(function (DoubleAgent) {
var JsonSchemaValidator;
(function (JsonSchemaValidator) {
JsonSchemaValidator.schemas = [
{
id: 'pessoa-v1',
type: 'object',
required: ['name', 'age'],
properties:
{
name: {
type: "string"
},
age: {
type: "number"
}
}
}
];
})(JsonSchemaValidator = DoubleAgent.JsonSchemaValidator || (DoubleAgent.JsonSchemaValidator = {}));
})(DoubleAgent || (DoubleAgent = {}));
//# sourceMappingURL=validators.js.map
Podemos utilizar a classe JsonSchemaValidator da seguinte forma:
JsonSchemaValidator jsonSchemaValidator = new JsonSchemaValidator();
InputStreamReader is = new InputStreamReader(this.getClass().getResourceAsStream("js/pessoa.js"));
jsonSchemaValidator.loadSchemaData(is, "DoubleAgent.JsonSchemaValidator");
ValidationResult result = jsonSchemaValidator.validate("pessoa-v1", "{name: 'John', age: 1}");
No exemplo Vertx é possivel obter o script para uso no frontend através da requisição ao endereço: http://localhost:8080/json-schema-validation
Esse script retornado necessita que tanto o ajv como o lodash ja tenham sido incluidos em sua pagina.
Para utiliza o DoubleAgentValidator em sua pagina e possivel atraves dos seguinte objeto:
var result = DoubleAgent.JsonSchemaValidator.validate('pessoa-v1', {});
/*
// result terá o seguinte valor
result = [
{
"keyword": "required",
"dataPath": "",
"schemaPath": "pessoa-v1/required",
"params": {
"missingProperty": "name"
},
"message": "should have required property 'name'"
},
{
"keyword": "required",
"dataPath": "",
"schemaPath": "pessoa-v1/required",
"params": {
"missingProperty": "age"
},
"message": "should have required property 'age'"
}
];
*/
Opcionamente, você pode servir junto com o script de validação dos seus json schemas as dependências ajv
e lodash
.
A classe JsonSchemaValidator
fornece o método getScriptFileWithDependencies()
que possibilita retornar a String com os códigos javascript das bibliotecas lodash (4.16.4)
e ajv (4.8.2)
.
Sendo assim, opcionalmente você pode servir seu script de validação dos seus schemas JSON juntamente com os scripts dessas duas dependências.
A aplicação de exemplo em vertx disponibiliza a chamada ao endpoint REST com um parâmetro ?with-dependencies=true
que demonstra justamente esta possibilidade.
Dessa forma, podemos adicionar em uma página html uma tag script apontando para http://localhost:8080/json-schema-validation?with-dependencies=true
e dessa forma, após a carga (load
) da página o objeto DoubleAgent.JsonSchemaValidator com o método validate
estará disponível permitindo a execução das validações, como no exemplo acima;
Existe um pacote npm chamado double-agent-validator
que permite a integração com uma aplicação Angular 2.
Para mais instruções acesse o README.md do projeto npm ou veja um exemplo de uso.