<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Apache TomEE</title>
	<meta name="description"
		  content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
	<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
	<meta name="author" content="Luka Cvetinovic for Codrops" />
	<link rel="icon" href="../../../favicon.ico">
	<link rel="icon"  type="image/png" href="../../../favicon.png">
	<meta name="msapplication-TileColor" content="#80287a">
	<meta name="theme-color" content="#80287a">
	<link rel="stylesheet" type="text/css" href="../../../css/normalize.css">
	<link rel="stylesheet" type="text/css" href="../../../css/bootstrap.css">
	<link rel="stylesheet" type="text/css" href="../../../css/owl.css">
	<link rel="stylesheet" type="text/css" href="../../../css/animate.css">
	<link rel="stylesheet" type="text/css" href="../../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
	<link rel="stylesheet" type="text/css" href="../../../fonts/eleganticons/et-icons.css">
	<link rel="stylesheet" type="text/css" href="../../../css/jqtree.css">
	<link rel="stylesheet" type="text/css" href="../../../css/idea.css">
	<link rel="stylesheet" type="text/css" href="../../../css/cardio.css">

	<script type="text/javascript">

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-2717626-1']);
      _gaq.push(['_setDomainName', 'apache.org']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();

    </script>
</head>

<body>
    <div class="preloader">
		<img src="../../../img/loader.gif" alt="Preloader image">
	</div>
	    <nav class="navbar">
		<div class="container">
		  <div class="row">          <div class="col-md-12">

			<!-- Brand and toggle get grouped for better mobile display -->
			<div class="navbar-header">
				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
					<span class="sr-only">Toggle navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="/">
				    <span>

				    
                        <img src="../../../img/logo-active.png">
                    

                    </span>
				    Apache TomEE
                </a>
			</div>
			<!-- Collect the nav links, forms, and other content for toggling -->
			<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
				<ul class="nav navbar-nav navbar-right main-nav">
					<li><a href="../../../docs.html">Documentation</a></li>
					<li><a href="../../../community/index.html">Community</a></li>
					<li><a href="../../../security/security.html">Security</a></li>
					<li><a href="../../../download-ng.html">Downloads</a></li>
				</ul>
			</div>
			<!-- /.navbar-collapse -->
		   </div></div>
		</div>
		<!-- /.container-fluid -->
	</nav>


    <div id="main-block" class="container main-block">
        <div class="row title">
          <div class="col-md-12">
            <div class='page-header'>
              
              <h1>Serializador personalizado JSON-B</h1>
            </div>
          </div>
        </div>
        <div class="row">
            
            <div class="col-md-12">
                <div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Este exemplo mostra como personalizar a serialização/desserialização de objetos com jsonb para um aplicativo JAX-RS.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_executando_e_testando_o_endpoint">Executando e testando o Endpoint</h2>
<div class="sectionbody">
<div class="paragraph">
<p>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)
<a href="http://localhost:8080/jsonb-custom-serializer/api/users" class="bare">http://localhost:8080/jsonb-custom-serializer/api/users</a> que deve responder com o seguinte json:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="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"
  }
]</code></pre>
</div>
</div>
<div class="paragraph">
<p>e o endpoint: (POST)
<a href="http://localhost:8080/jsonb-custom-serializer/api/users" class="bare">http://localhost:8080/jsonb-custom-serializer/api/users</a> com um corpo como:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">{
    "id": 1,
    "name": "name1",
    "extra": "extra1"
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>que respondem com o seguinte json:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">{
    "id": 1,
    "name": "name1extra1",
    "registration": "Sat Dec 29 19:48:05 CET 2018",
    "address": null
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="__applicationpath">@ApplicationPath</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Classe JAXRS de ponto de entrada, da seguinte maneira, o jaxrs carregará todas as classes e métodos anotados com @Path sem especificá-los.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;

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

}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_recurso_path_rest">Recurso @Path Rest</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Classe jaxrs simples com um endpoint GET e um POST</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import java.util.ArrayList;
import java.util.List;

import jakarta.ejb.Stateless;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.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&lt;User&gt; users() {
        List&lt;User&gt; users = new ArrayList&lt;&gt;();
        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;
    }
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_configuração_jsonb">Configuração JSONB</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Implementando ContextResolver&lt;&gt; 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</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import jakarta.json.bind.Jsonb;
import jakarta.json.bind.JsonbBuilder;
import jakarta.json.bind.JsonbConfig;
import jakarta.ws.rs.ext.ContextResolver;
import jakarta.ws.rs.ext.Provider;

@Provider
public class JSONBConfiguration implements ContextResolver&lt;Jsonb&gt; {

    private Jsonb jsonb;

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

        jsonb = JsonbBuilder.create(config);
    }

    @Override
    public Jsonb getContext(Class&lt;?&gt; type) {
        return jsonb;
    }

}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_address_serializer">Address serializer</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Classe serializadora de objetos simples que adiciona <code>modified</code> durante a serialização</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import jakarta.json.bind.serializer.JsonbSerializer;
import jakarta.json.bind.serializer.SerializationContext;
import jakarta.json.stream.JsonGenerator;

import org.superbiz.model.Address;

public class AddressSerializer implements JsonbSerializer&lt;Address&gt; {

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

    }

}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_user_deserializer">User Deserializer</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Cria um objeto a partir de um json</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import java.lang.reflect.Type;

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

import org.superbiz.model.User;

public class UserDeserializer implements JsonbDeserializer&lt;User&gt; {

    @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;
    }

}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_usando_o_desserializador_jsonbtypedeserializer_jsonbtypeserializer">Usando o desserializador @JsonbTypeDeserializer @JsonbTypeSerializer</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Com a anotação @JsonbTypeDeserializer ou @JsonbTypeSerializer, você pode notificar o jsonb para usar o desserializador personalizado</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import java.util.Date;

import jakarta.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

}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_acessando_o_endpoint_rest">Acessando o endpoint rest</h2>
<div class="sectionbody">
<div class="paragraph">
<p>O teste gera um aplicativo da web openejb e chama o endpoint do usuário</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import java.io.IOException;

import jakarta.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"));
    }

}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_executando">Executando</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A execução do exemplo pode ser feita no maven com um simples comando `mvn clean install', executada no diretório `jsonb-custom-serializer'.</p>
</div>
<div class="paragraph">
<p>Ao executar, você verá uma saída semelhante à seguinte.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="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) --&gt; Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService!org.superbiz.rest.UserService) --&gt; Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService) --&gt; 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       -&gt; org.superbiz.JAXRSApplication@285d851a
INFO -      Service URI: http://127.0.0.1:4204/test/api/users -&gt;  EJB org.superbiz.rest.UserService
INFO -               GET http://127.0.0.1:4204/test/api/users -&gt;      List&lt;User&gt; users()
INFO -              POST http://127.0.0.1:4204/test/api/users -&gt;      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) --&gt; Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService!org.superbiz.rest.UserService) --&gt; Ejb(deployment-id=UserService)
INFO - Jndi(name=global/test/UserService) --&gt; 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       -&gt; org.superbiz.JAXRSApplication@77b21474
INFO -      Service URI: http://127.0.0.1:4204/test/api/users -&gt;  EJB org.superbiz.rest.UserService
INFO -               GET http://127.0.0.1:4204/test/api/users -&gt;      List&lt;User&gt; users()
INFO -              POST http://127.0.0.1:4204/test/api/users -&gt;      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</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="_dentro_do_jar">Dentro do jar</h3>
<div class="paragraph">
<p>javaee-api:8.0 traz todas as dependências necessárias para iniciar uma aplicação REST funcionando.</p>
</div>
<div class="paragraph">
<p>Se olharmos para o jar construído pelo maven, veremos que a aplicação:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="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</code></pre>
</div>
</div>
<div class="paragraph">
<p>Esse simples jar poderia ser implantado em qualquer implementação Java EE compliant.
No TomEE você simplesmente colocaria-o no diretório <code>tomee.home/webapps/</code> .</p>
</div>
</div>
</div>
</div>
            </div>
            
        </div>
    </div>
<footer>
		<div class="container">
			<div class="row">
				<div class="col-sm-6 text-center-mobile">
					<h3 class="white">Be simple.  Be certified. Be Tomcat.</h3>
					<h5 class="light regular light-white">"A good application in a good server"</h5>
					<ul class="social-footer">
						<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
						<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
						<li><a href="https://plus.google.com/communities/105208241852045684449"><i class="fa fa-google-plus"></i></a></li>
					</ul>
				</div>
				<div class="col-sm-6 text-center-mobile">
					<div class="row opening-hours">
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../../latest/docs/" class="white">Documentation</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
								<li><a href="../../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
								<li><a href="../../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
								<li><a href="../../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../../latest/examples/" class="white">Examples</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
								<li><a href="../../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
								<li><a href="../../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
								<li><a href="../../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../../community/index.html" class="white">Community</a></h5>
							<ul class="list-unstyled">
								<li><a href="../../../community/contributors.html" class="regular light-white">Contributors</a></li>
								<li><a href="../../../community/social.html" class="regular light-white">Social</a></li>
								<li><a href="../../../community/sources.html" class="regular light-white">Sources</a></li>
							</ul>
						</div>
						<div class="col-sm-3 text-center-mobile">
							<h5><a href="../../../security/index.html" class="white">Security</a></h5>
							<ul class="list-unstyled">
								<li><a href="http://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
								<li><a href="http://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
								<li><a href="http://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
							</ul>
						</div>
					</div>
				</div>
			</div>
			<div class="row bottom-footer text-center-mobile">
				<div class="col-sm-12 light-white">
					<p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
				</div>
			</div>
		</div>
	</footer>
	<!-- Holder for mobile navigation -->
	<div class="mobile-nav">
        <ul>
          <li><a hef="../../../latest/docs/admin/index.html">Administrators</a>
          <li><a hef="../../../latest/docs/developer/index.html">Developers</a>
          <li><a hef="../../../latest/docs/advanced/index.html">Advanced</a>
          <li><a hef="../../../community/index.html">Community</a>
        </ul>
		<a href="#" class="close-link"><i class="arrow_up"></i></a>
	</div>
	<!-- Scripts -->
	<script src="../../../js/jquery-1.11.1.min.js"></script>
	<script src="../../../js/owl.carousel.min.js"></script>
	<script src="../../../js/bootstrap.min.js"></script>
	<script src="../../../js/wow.min.js"></script>
	<script src="../../../js/typewriter.js"></script>
	<script src="../../../js/jquery.onepagenav.js"></script>
	<script src="../../../js/tree.jquery.js"></script>
	<script src="../../../js/highlight.pack.js"></script>
    <script src="../../../js/main.js"></script>
		</body>

</html>

