You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2019/01/05 07:51:30 UTC

svn commit: r1850466 [7/9] - in /tomee/site/trunk/content: ./ blog/ blog/2016/03/ blog/2017/ community/ community/contributing/ security/ tags/ tomee-8.0/ tomee-8.0/docs/ tomee-8.0/docs/admin/ tomee-8.0/docs/admin/cluster/ tomee-8.0/docs/admin/configur...

Added: tomee/site/trunk/content/tomee-8.0/examples/jsonb-configuration.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/jsonb-configuration.html?rev=1850466&view=auto
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/jsonb-configuration.html (added)
+++ tomee/site/trunk/content/tomee-8.0/examples/jsonb-configuration.html Sat Jan  5 07:51:27 2019
@@ -0,0 +1,423 @@
+<!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>null</h1>
+            </div>
+          </div>
+        </div>
+        <div class="row">
+            
+            <div class="col-md-12">
+                <p>This examples shows how to customize jsonb for a JAX-RS Application. JSONB is the new javaee-api:8.0 standard for json serialization/deserialization. Few annotations are needed and JsonbConfig offers many configurations.</p>
+<h2>Run and test Endpoint</h2>
+<p>the application can be run with 'mvn clean install tomee:run' if port 8080 is available you can invoke the following endpoint: (GET) <a href="http://localhost:8080/jsonb-configuration/api/users">http://localhost:8080/jsonb-configuration/api/users</a> that should respond with the following json:<br/>[<br/> {<br/> "Id":1,<br/> "Name":"user 1",<br/> "Registration":"2018 - 12 - 28"<br/> },<br/> {<br/> "Id":2,<br/> "Name":"user 2",<br/> "Registration":"2018 - 12 - 28"<br/> }<br/>]</p>
+<h2>@ApplicationPath</h2>
+<p>JAXRS entry point class, as follows jaxrs will load all the annotated @Path classes and methods without specifying them.</p>
+<pre><code>import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@ApplicationPath(&quot;api&quot;)
+public class JAXRSApplication extends Application {
+
+}
+</code></pre>
+<h2>@Path Rest resource</h2>
+<p>Simple jaxrs class with a GET endpoint</p>
+<pre><code>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.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.superbiz.model.User;
+
+@Path(&quot;users&quot;)
+@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, &quot;user 1&quot;);
+       User user2 = new User(2, &quot;user 2&quot;);
+       users.add(user1);
+       users.add(user2);
+
+       return users;
+    }
+}
+</code></pre>
+<h2>JSONB Configuration</h2>
+<p>Implementing ContextResolver&lt;&gt; you can customize jaxrs defaults, in this example we are going to customize JSONB serialization/deserialization</p>
+<pre><code>import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+import javax.json.bind.JsonbConfig;
+import javax.json.bind.config.PropertyNamingStrategy;
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+public class JSONBConfiguration implements ContextResolver&lt;Jsonb&gt; {
+
+    private Jsonb jsonb;
+
+    public JSONBConfiguration() {
+       // jsonbConfig offers a lot of configurations.
+       JsonbConfig config = new JsonbConfig().withFormatting(true)
+          .withPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)
+          .withDateFormat(&quot;yyyy - MM - dd&quot;, Locale.ENGLISH);
+
+       jsonb = JsonbBuilder.create(config);
+    }
+
+    @Override
+    public Jsonb getContext(Class&lt;?&gt; type) {
+       return jsonb;
+    }
+
+}
+</code></pre>
+<p>JsonbConfig offers many configurations.</p>
+<h2>Accessing the rest endpoint</h2>
+<p>The test spin up an openejb webapp and invoke the users endpoint</p>
+<pre><code>import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+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;
+
+@EnableServices(value = &quot;jaxrs&quot;)
+@RunWith(ApplicationComposer.class)
+public class UserServiceTest {
+
+    @Module
+    @Classes({ UserService.class, JAXRSApplication.class, JSONBConfiguration.class })
+    public WebApp app() {
+       return new WebApp().contextRoot(&quot;test&quot;);
+    }
+
+    @Test
+    public void get() throws IOException {
+       final String message = WebClient.create(&quot;http://localhost:4204&quot;).path(&quot;/test/api/users&quot;).get(String.class);
+       System.out.println(message);
+
+       final SimpleDateFormat sdf = new SimpleDateFormat(&quot;yyyy - MM - dd&quot;);
+
+       // test withDateFormat(&quot;yyyy - MM - dd&quot;)
+       Assert.assertTrue(message.contains(sdf.format(new Date())));
+       // test withFormatting(true)
+       Assert.assertTrue(message.contains(System.getProperty(&quot;line.separator&quot;)));
+    }
+
+}
+</code></pre>
+<h1>Running</h1>
+<p>Running the example can be done from maven with a simple 'mvn clean install' command run from the 'jsonb-configuration' directory.</p>
+<p>When run you should see output similar to the following.</p>
+<pre><code>-------------------------------------------------------
+ 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 &#39;httpejbd&#39; 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-configuration/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 &quot;/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-configuration/UserServiceTest&quot; loaded.
+INFO - Creating dedicated application classloader for UserServiceTest
+INFO - Assembling app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-configuration/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@2f94c4db
+INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6b5966e1
+INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@65e61854
+INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@1568159
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@4fcee388
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@6f80fafe
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@63cd604c
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@593e824f
+INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@72ccd81a
+INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6d8792db
+INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@64bc21ac
+INFO - Using writers:
+INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@493dfb8e
+INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@5d25e6bb
+INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@72ccd81a
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@4fcee388
+INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@2f94c4db
+INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6b5966e1
+INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@65e61854
+INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@1568159
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@6f80fafe
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@63cd604c
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@593e824f
+INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6d8792db
+INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@64bc21ac
+INFO - Using exception mappers:
+INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@361c294e
+INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@6fff253c
+INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@7859e786
+INFO -      org.apache.openejb.server.cxf.rs.CxfRsHttpListener$CxfResponseValidationExceptionMapper@285d851a
+INFO - REST Application: http://127.0.0.1:4204/test/api       -&gt; org.superbiz.JAXRSApplication@5af28b27
+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 - Deployed Application(path=/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-configuration/UserServiceTest)
+[
+  {
+    &quot;Id&quot;:1,
+    &quot;Name&quot;:&quot;user 1&quot;,
+    &quot;Registration&quot;:&quot;2018 - 12 - 28&quot;
+  },
+  {
+    &quot;Id&quot;:2,
+    &quot;Name&quot;:&quot;user 2&quot;,
+    &quot;Registration&quot;:&quot;2018 - 12 - 28&quot;
+  }
+]
+INFO - Undeploying app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-configuration/UserServiceTest
+INFO - Stopping network services
+INFO - Stopping server services
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.203 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+</code></pre>
+<h2>Inside the jar</h2>
+<p>javaee-api:8.0 brings in all the dependencies needed to spin up a working REST application. </p>
+<p>If we look at the jar built by maven, we'll see the application itself is quite small:</p>
+<pre><code>$ jar tvf target/jsonb-configuration-8.0.0-SNAPSHOT.war 
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/
+   134 Fri Dec 28 19:36:08 CET 2018 META-INF/MANIFEST.MF
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/model/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/rest/
+  1165 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/model/User.class
+   402 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/JAXRSApplication.class
+  1194 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/rest/UserService.class
+  1701 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/JSONBConfiguration.class
+  1224 Fri Dec 28 18:28:32 CET 2018 WEB-INF/web.xml
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/org.superbiz/
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/org.superbiz/jsonb-configuration/
+  1791 Fri Dec 28 19:10:44 CET 2018 META-INF/maven/org.superbiz/jsonb-configuration/pom.xml
+   128 Fri Dec 28 19:36:08 CET 2018 META-INF/maven/org.superbiz/jsonb-configuration/pom.properties
+</code></pre>
+<p>This single jar could be deployed any any compliant Java EE implementation. In TomEE you'd simply place it in the <code>tomee.home/webapps/</code> directory.</p>
+            </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/documentation.html" 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>
+

Added: tomee/site/trunk/content/tomee-8.0/examples/jsonb-custom-serializer.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/jsonb-custom-serializer.html?rev=1850466&view=auto
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/jsonb-custom-serializer.html (added)
+++ tomee/site/trunk/content/tomee-8.0/examples/jsonb-custom-serializer.html Sat Jan  5 07:51:27 2019
@@ -0,0 +1,609 @@
+<!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>null</h1>
+            </div>
+          </div>
+        </div>
+        <div class="row">
+            
+            <div class="col-md-12">
+                <p>This examples shows how to customize objects serialization/deserialization with jsonb for a JAX-RS Application.</p>
+<h2>Run and test Endpoint</h2>
+<p>the application can be run with 'mvn clean install tomee:run' if port 8080 is available you can invoke the following endpoint: (GET) <a href="http://localhost:8080/jsonb-custom-serializer/api/users">http://localhost:8080/jsonb-custom-serializer/api/users</a> that should respond with the following json:</p>
+<pre><code>[
+  {
+    &quot;address&quot;:{
+      &quot;addr&quot;:&quot;modified - addr1&quot;
+    },
+    &quot;id&quot;:1,
+    &quot;name&quot;:&quot;user 1&quot;,
+    &quot;registration&quot;:&quot;2018-12-29T18:13:40.028&quot;
+  },
+  {
+    &quot;address&quot;:{
+      &quot;addr&quot;:&quot;modified - addr2&quot;
+    },
+    &quot;id&quot;:2,
+    &quot;name&quot;:&quot;user 2&quot;,
+    &quot;registration&quot;:&quot;2018-12-29T18:13:40.028&quot;
+  }
+]
+</code></pre>
+<p>and the endpoint: (POST) <a href="http://localhost:8080/jsonb-custom-serializer/api/users">http://localhost:8080/jsonb-custom-serializer/api/users</a> with a body like:</p>
+<pre><code>{ 
+    &quot;id&quot;: 1, 
+    &quot;name&quot;: &quot;name1&quot;, 
+    &quot;extra&quot;: &quot;extra1&quot; 
+}
+</code></pre>
+<p>which respond with the following json:</p>
+<pre><code>{ 
+    &quot;id&quot;: 1, 
+    &quot;name&quot;: &quot;name1extra1&quot;, 
+    &quot;registration&quot;: &quot;Sat Dec 29 19:48:05 CET 2018&quot;,
+    &quot;address&quot;: null 
+}
+</code></pre>
+<h2>@ApplicationPath</h2>
+<p>JAXRS entry point class, as follows jaxrs will load all the annotated @Path classes and methods without specifying them.</p>
+<pre><code>import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@ApplicationPath(&quot;api&quot;)
+public class JAXRSApplication extends Application {
+
+}
+</code></pre>
+<h2>@Path Rest resource</h2>
+<p>Simple jaxrs class with a GET and a POST endpoint</p>
+<pre><code>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(&quot;users&quot;)
+@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, &quot;user 1&quot;, new Address(&quot;addr1&quot;));
+       User user2 = new User(2, &quot;user 2&quot;, new Address(&quot;addr2&quot;));
+       users.add(user1);
+       users.add(user2);
+
+       return users;
+    }
+
+    @POST
+    public User addUser(User u) {
+       // Just to show the deserialization
+       return u;
+    }
+}
+</code></pre>
+<h2>JSONB Configuration</h2>
+<p>Implementing ContextResolver&lt;&gt; you can customize jaxrs defaults, in this example we are going to customize JSONB serialization for all objects of type Address, defined in AddressSerializer class</p>
+<pre><code>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&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>
+<h2>Address serializer</h2>
+<p>Simple Object serializer class that add 'modified' during serialization</p>
+<pre><code>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&lt;Address&gt; {
+
+    @Override
+    public void serialize(Address obj, JsonGenerator generator, SerializationContext ctx) {
+       if (obj != null) {
+         obj.setAddr(&quot;modified - &quot; + obj.getAddr());
+         ctx.serialize(obj, generator);
+       }
+
+    }
+
+}
+</code></pre>
+<h2>User Deserializer</h2>
+<p>Create an object from a json</p>
+<pre><code>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&lt;User&gt; {
+
+    @Override
+    public User deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
+       JsonObject jo = parser.getObject();
+       String name = jo.get(&quot;name&quot;).toString().replace(&quot;\&quot;&quot;, &quot;&quot;);
+       if (jo.get(&quot;extra&quot;) != null) {
+         name = name + jo.get(&quot;extra&quot;).toString().replace(&quot;\&quot;&quot;, &quot;&quot;);
+       }
+       User u = new User(Integer.parseInt(jo.get(&quot;id&quot;).toString()), name, null);
+
+       return u;
+    }
+
+}
+</code></pre>
+<h2>Using the deserializer @JsonbTypeDeserializer @JsonbTypeSerializer</h2>
+<p>With the annotation @JsonbTypeDeserializer or @JsonbTypeSerializer you can notify jsonb to use the custom deserializer </p>
+<pre><code>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
+
+} 
+</code></pre>
+<h2>Accessing the rest endpoint</h2>
+<p>The test spin up an openejb webapp and invoke the users endpoint</p>
+<pre><code>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 = &quot;jaxrs&quot;)
+@RunWith(ApplicationComposer.class)
+public class UserServiceTest {
+
+    @Module
+    @Classes({ UserService.class, JAXRSApplication.class, JSONBConfiguration.class })
+    public WebApp app() {
+       return new WebApp().contextRoot(&quot;test&quot;);
+    }
+
+    @Test
+    public void get() throws IOException {
+       final String message = WebClient.create(&quot;http://localhost:4204&quot;).path(&quot;/test/api/users&quot;).get(String.class);
+
+       Assert.assertTrue(message.contains(&quot;modified - addr1&quot;));
+    }
+
+    @Test
+    public void post() throws IOException {
+       final String inputJson = &quot;{ \&quot;id\&quot;: 1, \&quot;name\&quot;: \&quot;user1\&quot;, \&quot;extra\&quot;: \&quot;extraField\&quot;}&quot;;
+       final User responseUser = WebClient.create(&quot;http://localhost:4204&quot;).path(&quot;/test/api/users&quot;)
+          .type(MediaType.APPLICATION_JSON).post(inputJson, User.class);
+
+       Assert.assertTrue(!responseUser.getName().equals(&quot;user1&quot;));
+       Assert.assertTrue(responseUser.getName().equals(&quot;user1&quot; + &quot;extraField&quot;));
+    }
+
+}
+</code></pre>
+<h1>Running</h1>
+<p>Running the example can be done from maven with a simple 'mvn clean install' command run from the 'jsonb-custom-serializer' directory.</p>
+<p>When run you should see output similar to the following.</p>
+<pre><code>-------------------------------------------------------
+ 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 &#39;httpejbd&#39; 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 &quot;/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest&quot; 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 &#39;httpejbd&#39; 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 &quot;/home/federico/Documents/PRIVATO/Apache/tomee/examples/jsonb-custom-serializer/UserServiceTest&quot; 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>
+<h2>Inside the jar</h2>
+<p>javaee-api:8.0 brings in all the dependencies needed to spin up a working REST application. </p>
+<p>If we look at the jar built by maven, we'll see the application itself is quite small:</p>
+<pre><code>$ 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>
+<p>This single jar could be deployed any any compliant Java EE implementation. In TomEE you'd simply place it in the <code>tomee.home/webapps/</code> directory.</p>
+            </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/documentation.html" 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>
+

Modified: tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs-with-descriptor.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs-with-descriptor.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs-with-descriptor.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs-with-descriptor.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/lookup-of-ejbs.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mbean-auto-registration.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mbean-auto-registration.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mbean-auto-registration.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mbean-auto-registration.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/moviefun-rest.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/moviefun-rest.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/moviefun-rest.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/moviefun-rest.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/moviefun.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/moviefun.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/moviefun.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/moviefun.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/movies-complete-meta.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/movies-complete-meta.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/movies-complete-meta.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/movies-complete-meta.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/movies-complete.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/movies-complete.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/movies-complete.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/movies-complete.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-config-example.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-config-example.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-config-example.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-config-example.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-custom-healthcheck.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-custom-healthcheck.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-custom-healthcheck.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-custom-healthcheck.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-fallback.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-fallback.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-fallback.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-fallback.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-retry.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-retry.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-retry.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-faulttolerance-retry.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Added: tomee/site/trunk/content/tomee-8.0/examples/mp-jsonb-configuration.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-jsonb-configuration.html?rev=1850466&view=auto
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-jsonb-configuration.html (added)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-jsonb-configuration.html Sat Jan  5 07:51:27 2019
@@ -0,0 +1,423 @@
+<!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>null</h1>
+            </div>
+          </div>
+        </div>
+        <div class="row">
+            
+            <div class="col-md-12">
+                <p>This examples shows how to customize jsonb for a JAX-RS Application. JSONB is the new javaee-api:8.0 standard for json serialization/deserialization. Few annotations are needed and JsonbConfig offers many configurations.</p>
+<h2>Run and test Endpoint</h2>
+<p>the application can be run with 'mvn clean install tomee:run' if port 8080 is available you can invoke the following endpoint: (GET) <a href="http://localhost:8080/mp-jsonb-configuration/api/users">http://localhost:8080/mp-jsonb-configuration/api/users</a> that should respond with the following json:<br/>[<br/> {<br/> "Id":1,<br/> "Name":"user 1",<br/> "Registration":"2018 - 12 - 28"<br/> },<br/> {<br/> "Id":2,<br/> "Name":"user 2",<br/> "Registration":"2018 - 12 - 28"<br/> }<br/>]</p>
+<h2>@ApplicationPath</h2>
+<p>JAXRS entry point class, as follows jaxrs will load all the annotated @Path classes and methods without specifying them.</p>
+<pre><code>import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@ApplicationPath(&quot;api&quot;)
+public class JAXRSApplication extends Application {
+
+}
+</code></pre>
+<h2>@Path Rest resource</h2>
+<p>Simple jaxrs class with a GET endpoint</p>
+<pre><code>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.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.superbiz.model.User;
+
+@Path(&quot;users&quot;)
+@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, &quot;user 1&quot;);
+       User user2 = new User(2, &quot;user 2&quot;);
+       users.add(user1);
+       users.add(user2);
+
+       return users;
+    }
+}
+</code></pre>
+<h2>JSONB Configuration</h2>
+<p>Implementing ContextResolver&lt;&gt; you can customize jaxrs defaults, in this example we are going to customize JSONB serialization/deserialization</p>
+<pre><code>import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+import javax.json.bind.JsonbConfig;
+import javax.json.bind.config.PropertyNamingStrategy;
+import javax.ws.rs.ext.ContextResolver;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+public class JSONBConfiguration implements ContextResolver&lt;Jsonb&gt; {
+
+    private Jsonb jsonb;
+
+    public JSONBConfiguration() {
+       // jsonbConfig offers a lot of configurations.
+       JsonbConfig config = new JsonbConfig().withFormatting(true)
+          .withPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE)
+          .withDateFormat(&quot;yyyy - MM - dd&quot;, Locale.ENGLISH);
+
+       jsonb = JsonbBuilder.create(config);
+    }
+
+    @Override
+    public Jsonb getContext(Class&lt;?&gt; type) {
+       return jsonb;
+    }
+
+}
+</code></pre>
+<p>JsonbConfig offers many configurations.</p>
+<h2>Accessing the rest endpoint</h2>
+<p>The test spin up an openejb webapp and invoke the users endpoint</p>
+<pre><code>import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+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;
+
+@EnableServices(value = &quot;jaxrs&quot;)
+@RunWith(ApplicationComposer.class)
+public class UserServiceTest {
+
+    @Module
+    @Classes({ UserService.class, JAXRSApplication.class, JSONBConfiguration.class })
+    public WebApp app() {
+       return new WebApp().contextRoot(&quot;test&quot;);
+    }
+
+    @Test
+    public void get() throws IOException {
+       final String message = WebClient.create(&quot;http://localhost:4204&quot;).path(&quot;/test/api/users&quot;).get(String.class);
+       System.out.println(message);
+
+       final SimpleDateFormat sdf = new SimpleDateFormat(&quot;yyyy - MM - dd&quot;);
+
+       // test withDateFormat(&quot;yyyy - MM - dd&quot;)
+       Assert.assertTrue(message.contains(sdf.format(new Date())));
+       // test withFormatting(true)
+       Assert.assertTrue(message.contains(System.getProperty(&quot;line.separator&quot;)));
+    }
+
+}
+</code></pre>
+<h1>Running</h1>
+<p>Running the example can be done from maven with a simple 'mvn clean install' command run from the 'mp-jsonb-configuration' directory.</p>
+<p>When run you should see output similar to the following.</p>
+<pre><code>-------------------------------------------------------
+ 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 &#39;httpejbd&#39; 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/mp-jsonb-configuration/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 &quot;/home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest&quot; loaded.
+INFO - Creating dedicated application classloader for UserServiceTest
+INFO - Assembling app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/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@2f94c4db
+INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6b5966e1
+INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@65e61854
+INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@1568159
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@4fcee388
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@6f80fafe
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@63cd604c
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@593e824f
+INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@72ccd81a
+INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6d8792db
+INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@64bc21ac
+INFO - Using writers:
+INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@493dfb8e
+INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@5d25e6bb
+INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@72ccd81a
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@4fcee388
+INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@2f94c4db
+INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@6b5966e1
+INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@65e61854
+INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@1568159
+INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@6f80fafe
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@63cd604c
+INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@593e824f
+INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@6d8792db
+INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@64bc21ac
+INFO - Using exception mappers:
+INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@361c294e
+INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@6fff253c
+INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@7859e786
+INFO -      org.apache.openejb.server.cxf.rs.CxfRsHttpListener$CxfResponseValidationExceptionMapper@285d851a
+INFO - REST Application: http://127.0.0.1:4204/test/api       -&gt; org.superbiz.JAXRSApplication@5af28b27
+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 - Deployed Application(path=/home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest)
+[
+  {
+    &quot;Id&quot;:1,
+    &quot;Name&quot;:&quot;user 1&quot;,
+    &quot;Registration&quot;:&quot;2018 - 12 - 28&quot;
+  },
+  {
+    &quot;Id&quot;:2,
+    &quot;Name&quot;:&quot;user 2&quot;,
+    &quot;Registration&quot;:&quot;2018 - 12 - 28&quot;
+  }
+]
+INFO - Undeploying app: /home/federico/Documents/PRIVATO/Apache/tomee/examples/mp-jsonb-configuration/UserServiceTest
+INFO - Stopping network services
+INFO - Stopping server services
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.203 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+</code></pre>
+<h2>Inside the jar</h2>
+<p>javaee-api:8.0 brings in all the dependencies needed to spin up a working REST application. </p>
+<p>If we look at the jar built by maven, we'll see the application itself is quite small:</p>
+<pre><code>$ jar tvf target/mp-jsonb-configuration-8.0.0-SNAPSHOT.war 
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/
+   134 Fri Dec 28 19:36:08 CET 2018 META-INF/MANIFEST.MF
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/model/
+     0 Fri Dec 28 19:36:08 CET 2018 WEB-INF/classes/org/superbiz/rest/
+  1165 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/model/User.class
+   402 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/JAXRSApplication.class
+  1194 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/rest/UserService.class
+  1701 Fri Dec 28 19:36:06 CET 2018 WEB-INF/classes/org/superbiz/JSONBConfiguration.class
+  1224 Fri Dec 28 18:28:32 CET 2018 WEB-INF/web.xml
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/org.superbiz/
+     0 Fri Dec 28 19:36:10 CET 2018 META-INF/maven/org.superbiz/mp-jsonb-configuration/
+  1791 Fri Dec 28 19:10:44 CET 2018 META-INF/maven/org.superbiz/mp-jsonb-configuration/pom.xml
+   128 Fri Dec 28 19:36:08 CET 2018 META-INF/maven/org.superbiz/mp-jsonb-configuration/pom.properties
+</code></pre>
+<p>This single jar could be deployed any any compliant Java EE implementation. In TomEE you'd simply place it in the <code>tomee.home/webapps/</code> directory.</p>
+            </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/documentation.html" 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>
+

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-counted.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-counted.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-counted.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-counted.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-histogram.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-histogram.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-histogram.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-histogram.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-metered.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-metered.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-metered.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-metered.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-timed.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-timed.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-timed.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-metrics-timed.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-opentracing-traced.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-opentracing-traced.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-opentracing-traced.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-opentracing-traced.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>

Modified: tomee/site/trunk/content/tomee-8.0/examples/mp-rest-client.html
URL: http://svn.apache.org/viewvc/tomee/site/trunk/content/tomee-8.0/examples/mp-rest-client.html?rev=1850466&r1=1850465&r2=1850466&view=diff
==============================================================================
--- tomee/site/trunk/content/tomee-8.0/examples/mp-rest-client.html (original)
+++ tomee/site/trunk/content/tomee-8.0/examples/mp-rest-client.html Sat Jan  5 07:51:27 2019
@@ -72,7 +72,7 @@
 				<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/index.html">Security</a></li>
+					<li><a href="../../security/security.html">Security</a></li>
 					<li><a href="../../download-ng.html">Downloads</a></li>
 				</ul>
 			</div>