Páginas filhas
  • Documentação Jolt customizado

Objetivo

Nesse tutorial, será explicado como criar e utilizar funções customizadas do Jolt, ferramenta utilizada nesse projeto para manipular e converter JSON. Dentro do projeto “Winthor-integracao-core” foi criado uma package dentro de ‘infra’ com nome de ‘jolt.custom’ que permite a criação desses métodos customizados. 

Entendendo o projeto:

As funções do Jolt podem ser executadas passando parâmetros para a função ou não. Por exemplo:

  • =concat(@(1,value),@(1,key)) – recebe parâmetros para concatenar duas ou mais Strings;
  • =toString – não recebe parâmetros, porém converte aquele atributo para uma String;

É importante ressaltar que essas funções customizadas funcionam somente até um nível a mais da árvore do JSON. Portanto, caso seja necessário usar em outro nível, deve utilizar a função de modify do Jolt, para levar essa informação para a camada correta, e depois fazer uso das funções customizadas.

Exemplo:

Nesse exemplo, a informação do teste é levada ao nível 1 da árvore do JSON, e depois é feita a operação de concatenar. Isso foi feito para poder exemplificar, porém a função de concatenar poderia ser sua função customizada.

Criando uma função customizada:

  1. Criar uma classe com o nome no formato ‘Jolt____.java’. Na package infra.jolt.custom.functions.impl;

  2. Sua classe deve ser anotada com o Bean @JoltCustomFunctionEnable para que ele possa ser compreendido pelo projeto;

  3. Sua classe deve implementar a interface JoltCustomFunction;

  4. Você deve implementar todos os métodos da interface;
    1. O método execute(Object value) tem como objetivo implementar a lógica das funções Jolt que não recebem parâmetro;
      1. Caso você não deseje implementar uma operação para esse cenário, você deve retornar o próprio atributo ‘value’. Caso isso não seja feito, pode causar uma exceção.

    2. O método execute(Map<String, Object> jsonValue, List<Object> parâmetros) tem como objetivo implementar a lógica das funções Jolt que recebem parâmetro;
      1. Caso você não queira implementar um método para quando for informado um parâmetro deve retornar null;
      2. Nos casos em que você quer usar só uma quantidade limitada de parâmetros, você pode acessa-lo através da função this.getValueParameterByIndex(INDEX, parâmetros). Sendo Index o número do index do parâmetro que você quer acessar. Exemplo:


    3. O método getFunctionName() tem como objetivo nomear sua operação customizada;
      1. Retornar uma String com o nome do método que será utilizado no Jolt customizado.

  5. Alterar em /src/test/resources/Jolt/dados/dados-base64.json
    1. Esse json representa o json recebido pelo WSH e que irá ser convertido. Você pode adicionar um novo atributo para poder usar suas funções de conversão conforme próximo tópico.

  6. Alterar em /src/test/resources/Jolt/layout/layout0base0640decode.json
    1. Esse json é onde utiliza as funções Jolt para fazer as transformações. Nela você irá usar sua função customizada para verificar se as transformações estão funcionando conforme o esperado.

  7. Para testar, será necessário acessar a classe de teste em /src/test/java/winthorsmarthube.domain.transformador/TransformadorLayoutTest.java
    1. Executar essa classe no modo debug com um breakpoint na função ‘test()’ na linha do assert para verificar o atributo ‘dadosTransformados’. Caso a classe transformada esteja conforme o esperado, sua função está funcionando.


Como criar e testar funções customizadas:

Para exemplificar o processo, iremos criar uma função que retornar o horário atual, e poderá retornar em um formato especifico, caso seja informado no parâmetro.

  1. Criamos a classe JoltHorarioAtual.java


  2. Anotamos a classe com o bean @JoltCustomFunctionEnable e implementamos a interface JoltCustomFunction


  3. Implementamos os métodos obrigatórios da interface


  4. Quando formos utilizar nossa função, quero que seja chamado o método “=horarioAgora”.


  5. Para as regras, vou implementar o método caso não seja informado nenhum parâmetro retornando o localDateTime atual. Exemplo de uso dessa função “=horarioAgora” e irá retornar o valor: “2022-08-19 18:51:48”


  6. E caso ela queira me passar um formato de data especifico, ela deve passar os parâmetros. Conforme podemos ver, só o primeiro parâmetro será utilizado nessa função


  7. Para testar, vamos editar o arquivo dados-base64.json na package “src/test/resource/jolt/dados” 

  8. E vamos editar nosso layout de teste na package “src/test/resource/jolt/layout”. Inicialmente, vamos fazer a operação sem passar parâmetros e sobre escrevendo o ‘horarioAntes’. 

  9. Verificando no debug do nosso teste, vemos que o Jolt transformado contem nossa variável ‘horarioAntes’ com o valor atual.


  10. Agora para testar a versão em que é passado o parâmetro de formato de data esperado, vamos alterar nosso layout de transformação Jolt de teste para um formato diferente. 

  11. E ao executar com o debug, vemos que o formato retornado foi conforme informado no layout.



  • Sem rótulos