:index-group: JSON-B
:jbake-type: page
:jbake-status: status=published
= Serializador personalizado JSON-B

Este exemplo mostra como personalizar a serialização/desserialização de objetos com jsonb para um aplicativo JAX-RS.

== Executando e testando o Endpoint

A Aplicação pode ser executado com `mvn clean install tomee:run' se porta
8080 está disponível, você pode invocar o seguinte endpoint: (GET)
http://localhost:8080/jsonb-custom-serializer/api/users que deve responder com o seguinte json:

[source,java]
----
[
  {
    "address":{
      "addr":"modified - addr1"
    },
    "id":1,
    "name":"user 1",
    "registration":"2018-12-29T18:13:40.028"
  },
  {
    "address":{
      "addr":"modified - addr2"
    },
    "id":2,
    "name":"user 2",
    "registration":"2018-12-29T18:13:40.028"
  }
]
----

e o endpoint: (POST)
http://localhost:8080/jsonb-custom-serializer/api/users com um corpo como:

[source,java]
----
{ 
    "id": 1, 
    "name": "name1", 
    "extra": "extra1" 
}
----

que respondem com o seguinte json:

[source,java]
----
{ 
    "id": 1, 
    "name": "name1extra1", 
    "registration": "Sat Dec 29 19:48:05 CET 2018",
    "address": null 
}
----

== @ApplicationPath

Classe JAXRS de ponto de entrada, da seguinte maneira, o jaxrs carregará todas as classes e métodos anotados com @Path sem especificá-los.

[source,java]
----
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("api")
public class JAXRSApplication extends Application {

}
----

== Recurso @Path Rest

Classe jaxrs simples com um endpoint GET e um POST

[source,java]
----
import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.superbiz.model.Address;
import org.superbiz.model.User;

@Path("users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Stateless
public class UserService {

    @GET
    public List<User> users() {
        List<User> users = new ArrayList<>();
        User user1 = new User(1, "user 1", new Address("addr1"));
        User user2 = new User(2, "user 2", new Address("addr2"));
        users.add(user1);
        users.add(user2);

        return users;
    }

    @POST
    public User addUser(User u) {
        // Apenas para mostrar a desserialização
        return u;
    }
}
----

== Configuração JSONB

Implementando ContextResolver<> você pode personalizar os padrões jaxrs; neste exemplo, personalizaremos a serialização JSONB para todos os objetos do tipo Address, definidos na classe AddressSerializer

[source,java]
----
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

@Provider
public class JSONBConfiguration implements ContextResolver<Jsonb> {

    private Jsonb jsonb;

    public JSONBConfiguration() {
        JsonbConfig config = new JsonbConfig().withFormatting(true).withSerializers(new AddressSerializer());

        jsonb = JsonbBuilder.create(config);
    }

    @Override
    public Jsonb getContext(Class<?> type) {
        return jsonb;
    }

}
----

== Address serializer

Classe serializadora de objetos simples que adiciona `modified` durante a serialização

[source,java]
----
import javax.json.bind.serializer.JsonbSerializer;
import javax.json.bind.serializer.SerializationContext;
import javax.json.stream.JsonGenerator;

import org.superbiz.model.Address;

public class AddressSerializer implements JsonbSerializer<Address> {

    @Override
    public void serialize(Address obj, JsonGenerator generator, SerializationContext ctx) {
        if (obj != null) {
            obj.setAddr("modified - " + obj.getAddr());
            ctx.serialize(obj, generator);
        }

    }

}
----

== User Deserializer

Cria um objeto a partir de um json

[source,java]
----
import java.lang.reflect.Type;

import javax.json.JsonObject;
import javax.json.bind.serializer.DeserializationContext;
import javax.json.bind.serializer.JsonbDeserializer;
import javax.json.stream.JsonParser;

import org.superbiz.model.User;

public class UserDeserializer implements JsonbDeserializer<User> {

    @Override
    public User deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
        JsonObject jo = parser.getObject();
        String name = jo.get("name").toString().replace("\"", "");
        if (jo.get("extra") != null) {
            name = name + jo.get("extra").toString().replace("\"", "");
        }
        User u = new User(Integer.parseInt(jo.get("id").toString()), name, null);

        return u;
    }

}
----

== Usando o desserializador @JsonbTypeDeserializer @JsonbTypeSerializer

Com a anotação @JsonbTypeDeserializer ou @JsonbTypeSerializer, você pode notificar o jsonb para usar o desserializador personalizado

[source,java]
----
import java.util.Date;

import javax.json.bind.annotation.JsonbTypeDeserializer;

import org.superbiz.UserDeserializer;

@JsonbTypeDeserializer(UserDeserializer.class)
public class User {

    private Integer id;
    private String name;
    private Date registration = new Date();
    private Address address;

    public User(Integer id, String name, Address address) {
        super();
        this.id = id;
        this.name = name;
        this.address = address;
    }

    public User() {
        super();
    }

    // ... GET/SET

} 
----

== Acessando o endpoint rest

O teste gera um aplicativo da web openejb e chama o endpoint do usuário

[source,java]
----
import java.io.IOException;

import javax.ws.rs.core.MediaType;

import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.openejb.jee.WebApp;
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.testing.Classes;
import org.apache.openejb.testing.EnableServices;
import org.apache.openejb.testing.Module;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.superbiz.JAXRSApplication;
import org.superbiz.JSONBConfiguration;
import org.superbiz.model.User;

@EnableServices(value = "jaxrs")
@RunWith(ApplicationComposer.class)
public class UserServiceTest {

    @Module
    @Classes({ UserService.class, JAXRSApplication.class, JSONBConfiguration.class })
    public WebApp app() {
        return new WebApp().contextRoot("test");
    }

    @Test
    public void get() throws IOException {
        final String message = WebClient.create("http://localhost:4204").path("/test/api/users").get(String.class);

        Assert.assertTrue(message.contains("modified - addr1"));
    }

    @Test
    public void post() throws IOException {
        final String inputJson = "{ \"id\": 1, \"name\": \"user1\", \"extra\": \"extraField\"}";
        final User responseUser = WebClient.create("http://localhost:4204").path("/test/api/users")
                .type(MediaType.APPLICATION_JSON).post(inputJson, User.class);

        Assert.assertTrue(!responseUser.getName().equals("user1"));
        Assert.assertTrue(responseUser.getName().equals("user1" + "extraField"));
    }

}
----

== Executando

A execução do exemplo pode ser feita no maven com um simples comando `mvn clean install', executada no diretório `jsonb-custom-serializer'.

Ao executar, você verá uma saída semelhante à seguinte.

[source,console]
----
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.rest.UserServiceTest
INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@7823a2f9
INFO - Succeeded in installing singleton service
INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Creating TransactionManager(id=Default Transaction Manager)
INFO - Creating SecurityService(id=Default Security Service)
INFO - Initializing network services
INFO - Creating ServerService(id=cxf-rs)
INFO - Creating ServerService(id=httpejbd)
INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9)
INFO - Initializing network services
INFO -   ** Bound Services **
INFO -   NAME                 IP              PORT  
INFO -   httpejbd             127.0.0.1       4204  
INFO - -------
INFO - Ready!
INFO - Configuring enterprise application: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest
INFO - Auto-deploying ejb UserService: EjbDeployment(deployment-id=UserService)
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.rest.UserServiceTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Creating Container(id=Default Managed Container)
INFO - Using directory /tmp for stateful session passivation
INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
INFO - Auto-creating a container for bean UserService: Container(type=STATELESS, id=Default Stateless Container)
INFO - Creating Container(id=Default Stateless Container)
INFO - Enterprise application "/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest" loaded.
INFO - Creating dedicated application classloader for UserServiceTest
INFO - Assembling app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest
INFO - Jndi(name=UserServiceLocalBean) --> Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService!org.superbiz.rest.UserService) --> Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService) --> Ejb(deployment-id=UserService)
INFO - Created Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Stateless Container)
INFO - Started Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Stateless Container)
INFO - Using readers:
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@6a1d204a
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@28a0fd6c
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@2b62442c
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@66629f63
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@841e575
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@27a5328c
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@5ab14cb9
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@62dae245
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@4b6579e8
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6fff253c
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@6c6357f9
INFO - Using writers:
INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@591e58fa
INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@3954d008
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@4b6579e8
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@841e575
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@6a1d204a
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@28a0fd6c
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@2b62442c
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@66629f63
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@27a5328c
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@5ab14cb9
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@62dae245
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6fff253c
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@6c6357f9
INFO - Using exception mappers:
INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@403132fc
INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@32cb636e
INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@71c5b236
INFO -      org.apache.openejb.server.cxf.rs.CxfRsHttpListener$CxfResponseValidationExceptionMapper@2cab9998
INFO - REST Application: http://127.0.0.1:4204/test/api       -> org.superbiz.JAXRSApplication@285d851a
INFO -      Service URI: http://127.0.0.1:4204/test/api/users ->  EJB org.superbiz.rest.UserService
INFO -               GET http://127.0.0.1:4204/test/api/users ->      List<User> users()
INFO -              POST http://127.0.0.1:4204/test/api/users ->      User addUser(User)
INFO - Deployed Application(path=/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest)
INFO - Undeploying app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest
INFO - Stopping network services
INFO - Stopping server services
INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@7823a2f9
INFO - Succeeded in installing singleton service
INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Creating TransactionManager(id=Default Transaction Manager)
INFO - Creating SecurityService(id=Default Security Service)
INFO - Initializing network services
INFO - Creating ServerService(id=cxf-rs)
INFO - Creating ServerService(id=httpejbd)
INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9)
INFO - Initializing network services
INFO -   ** Bound Services **
INFO -   NAME                 IP              PORT  
INFO -   httpejbd             127.0.0.1       4204  
INFO - -------
INFO - Ready!
INFO - Configuring enterprise application: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest
INFO - Auto-deploying ejb UserService: EjbDeployment(deployment-id=UserService)
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.rest.UserServiceTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Creating Container(id=Default Managed Container)
INFO - Using directory /tmp for stateful session passivation
INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
INFO - Auto-creating a container for bean UserService: Container(type=STATELESS, id=Default Stateless Container)
INFO - Creating Container(id=Default Stateless Container)
INFO - Enterprise application "/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest" loaded.
INFO - Creating dedicated application classloader for UserServiceTest
INFO - Assembling app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest
INFO - Jndi(name=UserServiceLocalBean) --> Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService!org.superbiz.rest.UserService) --> Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService) --> Ejb(deployment-id=UserService)
INFO - Created Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Stateless Container)
INFO - Started Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Stateless Container)
INFO - Using readers:
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@51a06cbe
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6cc0bcf6
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@29539e36
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@32f61a31
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@f5c79a6
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@669253b7
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@5ab14cb9
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@62dae245
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@3dddbe65
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@49a64d82
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@344561e0
INFO - Using writers:
INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@66d23e4a
INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@36ac8a63
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@3dddbe65
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@f5c79a6
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@51a06cbe
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6cc0bcf6
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@29539e36
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@32f61a31
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@669253b7
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@5ab14cb9
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@62dae245
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@49a64d82
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@344561e0
INFO - Using exception mappers:
INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@4d9d1b69
INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@5305c37d
INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@52c8295b
INFO -      org.apache.openejb.server.cxf.rs.CxfRsHttpListener$CxfResponseValidationExceptionMapper@251f7d26
INFO - REST Application: http://127.0.0.1:4204/test/api       -> org.superbiz.JAXRSApplication@77b21474
INFO -      Service URI: http://127.0.0.1:4204/test/api/users ->  EJB org.superbiz.rest.UserService
INFO -               GET http://127.0.0.1:4204/test/api/users ->      List<User> users()
INFO -              POST http://127.0.0.1:4204/test/api/users ->      User addUser(User)
INFO - Deployed Application(path=/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest)
INFO - Undeploying app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest
INFO - Stopping network services
INFO - Stopping server services
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.31 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
    
----

=== Dentro do jar

javaee-api:8.0 traz todas as dependências necessárias para iniciar uma aplicação REST funcionando.

Se olharmos para o jar construído pelo maven, veremos que a aplicação:

[source,java]
----
$ jar tvf target/jsonb-custom-serializer-8.0.0-SNAPSHOT.war 
     0 Sat Dec 29 19:10:44 CET 2018 META-INF/
   134 Sat Dec 29 19:10:42 CET 2018 META-INF/MANIFEST.MF
     0 Sat Dec 29 19:10:42 CET 2018 WEB-INF/
     0 Sat Dec 29 19:10:42 CET 2018 WEB-INF/classes/
     0 Sat Dec 29 19:10:42 CET 2018 WEB-INF/classes/org/
     0 Sat Dec 29 19:10:42 CET 2018 WEB-INF/classes/org/superbiz/
     0 Sat Dec 29 19:10:42 CET 2018 WEB-INF/classes/org/superbiz/model/
     0 Sat Dec 29 19:10:42 CET 2018 WEB-INF/classes/org/superbiz/rest/
   790 Sat Dec 29 19:10:38 CET 2018 WEB-INF/classes/org/superbiz/model/Address.class
  2093 Sat Dec 29 19:10:38 CET 2018 WEB-INF/classes/org/superbiz/model/User.class
  2063 Sat Dec 29 19:10:38 CET 2018 WEB-INF/classes/org/superbiz/UserDeserializer.class
   402 Sat Dec 29 19:10:38 CET 2018 WEB-INF/classes/org/superbiz/JAXRSApplication.class
  1461 Sat Dec 29 19:10:38 CET 2018 WEB-INF/classes/org/superbiz/AddressSerializer.class
  1498 Sat Dec 29 19:10:38 CET 2018 WEB-INF/classes/org/superbiz/rest/UserService.class
  1549 Sat Dec 29 19:10:38 CET 2018 WEB-INF/classes/org/superbiz/JSONBConfiguration.class
  1241 Sat Dec 29 17:52:48 CET 2018 WEB-INF/web.xml
     0 Sat Dec 29 19:10:44 CET 2018 META-INF/maven/
     0 Sat Dec 29 19:10:44 CET 2018 META-INF/maven/org.superbiz/
     0 Sat Dec 29 19:10:44 CET 2018 META-INF/maven/org.superbiz/jsonb-custom-serializer/
  1811 Sat Dec 29 17:53:36 CET 2018 META-INF/maven/org.superbiz/jsonb-custom-serializer/pom.xml
   132 Sat Dec 29 19:10:42 CET 2018 META-INF/maven/org.superbiz/jsonb-custom-serializer/pom.properties
----

Esse simples jar poderia ser implantado em qualquer implementação Java EE compliant. 
No TomEE você simplesmente colocaria-o no diretório `tomee.home/webapps/` .
