This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 7146515 Javadocs
7146515 is described below
commit 714651501f2f2221d1b21ee80a091e23f40e278e
Author: JamesBognar <[email protected]>
AuthorDate: Sun Oct 17 09:56:46 2021 -0400
Javadocs
---
.../apache/juneau/http/entity/package-info.java | 18 +
.../org/apache/juneau/http/part/package-info.java | 18 +
.../apache/juneau/http/resource/package-info.java | 18 +
juneau-doc/docs/Topics/01.Introduction.html | 131 ----
.../docs/Topics/01.Introduction/01.Features.html | 45 --
.../02.Components.html => 01.Overview.html} | 175 +++--
.../docs/Topics/01.Overview/01.juneau-core.html | 325 +++++++++
.../docs/Topics/01.Overview/02.juneau-rest.html | 19 +
.../Topics/01.Overview/03.juneau-examples.html | 19 +
.../02.juneau-marshall/07.HttpPartSerializers.html | 8 +-
juneau-doc/src/main/javadoc/overview.html | 739 ++++++++++++++-------
juneau-doc/src/main/javadoc/resources/docs.txt | 7 +-
.../src/main/javadoc/resources/fragments/toc.html | 7 +-
.../juneau/rest/client/assertion/package-info.java | 18 +
.../org/apache/juneau/rest/args/package-info.java | 18 +
.../juneau/rest/assertions/package-info.java | 18 +
.../apache/juneau/rest/logging/package-info.java | 18 +
launches/juneau-build-javadoc.sh | 1 +
18 files changed, 1082 insertions(+), 520 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/entity/package-info.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/entity/package-info.java
new file mode 100644
index 0000000..0ceb1df
--- /dev/null
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/entity/package-info.java
@@ -0,0 +1,18 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+
***************************************************************************************************************************/
+
+/**
+ * HTTP Entity Beans
+ */
+package org.apache.juneau.http.entity;
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/package-info.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/package-info.java
new file mode 100644
index 0000000..b949829
--- /dev/null
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/package-info.java
@@ -0,0 +1,18 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+
***************************************************************************************************************************/
+
+/**
+ * HTTP Part Beans
+ */
+package org.apache.juneau.http.part;
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/package-info.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/package-info.java
new file mode 100644
index 0000000..7f83285
--- /dev/null
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/resource/package-info.java
@@ -0,0 +1,18 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+
***************************************************************************************************************************/
+
+/**
+ * HTTP Resource Beans
+ */
+package org.apache.juneau.http.resource;
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/01.Introduction.html
b/juneau-doc/docs/Topics/01.Introduction.html
deleted file mode 100644
index b5847d4..0000000
--- a/juneau-doc/docs/Topics/01.Introduction.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
- * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
- * specific language governing permissions and limitations under the License.
-
***************************************************************************************************************************/
- -->
-
-{title:'Introduction'}
-
-<p>
- Apache Juneau™ is a single cohesive Java ecosystem consisting of
the following parts:
-</p>
-<table class='styled w800'>
- <tr>
- <th>Group</th><th>Component</th><th>Description</th>
- </tr>
-
- <tr class='dark bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'>Juneau Core</td>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-marshall'>juneau-marshall</a></td>
- <td>
- A universal toolkit for marshalling POJOs to a wide
variety of content types using a common framework with no external library
dependencies.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-marshall-rdf'>juneau-marshall-rdf</a></td>
- <td>
- Extended marshalling support for RDF languages.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-dto'>juneau-dto</a></td>
- <td>
- A variety of predefined DTOs for serializing and
parsing languages such as HTML5, Swagger and ATOM.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-config'>juneau-config</a></td>
- <td>
- A sophisticated configuration file API.
- </td>
- </tr>
-
- <tr class='light bb'>
- <td rowspan="5"
style='text-align:center;font-weight:bold;padding:20px;'>Juneau REST</td>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-server'>juneau-rest-server</a></td>
- <td>
- A universal REST server API for creating Swagger-based
self-documenting REST interfaces using POJOs, simply deployed as
- one or more top-level servlets in any Servlet 3.1.0+
container.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-server-springboot'>juneau-rest-server-springboot</a></td>
- <td>
- Spring boot integration support.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></td>
- <td>
- JAX/RS integration support.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-client'>juneau-rest-client</a></td>
- <td>
- A universal REST client API for interacting with Juneau
or 3rd-party REST interfaces using POJOs and proxy interfaces.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-mock'>juneau-rest-mock</a></td>
- <td>
- Mocking APIs for server-less end-to-end testing of REST
server and client APIs.
- </td>
- </tr>
-
- <tr class='dark bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'>Examples</td>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-core'>juneau-examples-core</a></td>
- <td>
- Juneau Core API examples.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-rest'>juneau-examples-rest</a></td>
- <td>
- Juneau REST API examples.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-rest-jetty'>juneau-examples-rest-jetty</a></td>
- <td>
- Juneau REST API examples using Jetty deployment.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a></td>
- <td>
- Juneau REST API examples using Spring Boot deployment.
- </td>
- </tr>
-
-</table>
-<p>
- Questions via email to <a class='doclink'
href='mailto:[email protected]?Subject=Apache%20Juneau%20question'>[email protected]</a>
are always welcome.
-</p>
-<p>
- Juneau is packed with features that may not be obvious at first.
- Users are encouraged to ask for code reviews by providing links to
specific source files such as through GitHub.
- Not only can we help you with feedback, but it helps us understand
usage patterns to further improve the product.
-</p>
-
-<h5 class='topic'>History</h5>
-<p>
- Juneau started off as a popular internal IBM toolkit called Juno.
- Originally used for serializing POJOs to and from JSON (at a time when
the concept was new), it later expanded in
- scope to include a variety of content types, and then later REST
servlet, client, and microservice APIs.
- It's use grew to more than 50 projects and was one of the most popular
community source projects within IBM.
-</p>
-<p>
- In June of 2016, the code was donated to the Apache Foundation under
the project <l>Apache Juneau</l> where it
- has continued to evolve to where it is today.
-</p>
diff --git a/juneau-doc/docs/Topics/01.Introduction/01.Features.html
b/juneau-doc/docs/Topics/01.Introduction/01.Features.html
deleted file mode 100644
index d756983..0000000
--- a/juneau-doc/docs/Topics/01.Introduction/01.Features.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
- * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
- * specific language governing permissions and limitations under the License.
-
***************************************************************************************************************************/
- -->
-
-{title:'Features', updated:'8.1.0'}
-
-<ul class='spaced-list'>
- <li>
- Fast memory-efficient serialization.
- <li>
- Fast, safe, memory-efficient parsing. Parsers are not
susceptible to deserialization attacks.
- <li>
- KISS is our mantra! No auto-wiring. No code generation. No
dependency injection requirements. Just add it to your classpath and use it.
Extremely simple unit testing!
- <li>
- Enjoyable to use
- <li>
- Tiny - ~1MB
- <li>
- Exhaustively tested
- <li>
- Lots of up-to-date documentation and examples
- <li>
- Minimal library dependencies:
- <ul>
- <li><b>juneau-marshall</b>, <b>juneau-dto</b>,
<b>juneau-config</b> - No external dependencies. Entirely self-contained.
- <li><b>juneau-marshall-rdf</b> - Optional RDF support.
Requires Apache Jena 2.7.1+.
- <li><b>juneau-rest-server</b> - Any Servlet 3.1.0+
container.
- <li><b>juneau-rest-client</b> - Apache HttpClient 4.5+.
- <li><b>juneau-microservice</b> - Eclipse Jetty.
- </ul>
- <li>
- Built on top of Servlet and Apache HttpClient APIs that allow
you to use the newest HTTP/2 features
- such as request/response multiplexing and server push.
-</ul>
diff --git a/juneau-doc/docs/Topics/01.Introduction/02.Components.html
b/juneau-doc/docs/Topics/01.Overview.html
similarity index 66%
rename from juneau-doc/docs/Topics/01.Introduction/02.Components.html
rename to juneau-doc/docs/Topics/01.Overview.html
index b6cb8cf..038a918 100644
--- a/juneau-doc/docs/Topics/01.Introduction/02.Components.html
+++ b/juneau-doc/docs/Topics/01.Overview.html
@@ -13,13 +13,19 @@
***************************************************************************************************************************/
-->
-{title:'Components'}
+{title:'Overview'}
+<!--
===========================================================================================================
-->
+<!-- === ABOUT
=================================================================================================
-->
+<!--
===========================================================================================================
-->
+
+<h5 class='toc'>About</h5>
<p>
- We've strived to keep prerequisites to an absolute minimum in order to
make adoption as easy as possible.
+ Apache Juneau™ is a single cohesive Java ecosystem for marshalling Java
objects to a wide variety of
+ language types and creating annotation-based REST server and client
APIs.
</p>
<p>
- The library consists of the following artifacts found in the Maven
group <c>"org.apache.juneau"</c>:
+ The Juneau ecosystem consists of the following parts:
</p>
<table class='styled w800'>
<tr>
@@ -28,40 +34,26 @@
<tr class='dark bb'>
<td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-core</td>
<td class='code'><a class='doclink'
href='#juneau-marshall'>juneau-marshall</a></td>
- <td>Serializers and parsers for:
- <ul style='margin:0px 10px;'>
- <li>JSON
- <li>XML
- <li>HTML
- <li>UON
- <li>URL-Encoding
- <li>MessagePack
- <li>OpenAPI
- <li>SOAP/XML
- <li>CSV
- <li>BSON (coming soon)
- <li>YAML (coming soon)
- <li>Protobuf (coming soon)
- <li>Amazon Ion (coming soon)
+ <td>
+ <ul>
+ <li>Serializers and parsers for various
languages.
+ <li>Marshalling support for HTTP
headers/parts/requests/responses.
+ <li>Marshall-based assertions for simplified
unit testing.
</ul>
</td>
<td>
<ul style='margin:0px 10px;'>
<li>Java 8
+ <li>Apache HttpCore 4.4.13
</ul>
</td>
</tr>
<tr class='dark bb'>
<td class='code'><a class='doclink'
href='#juneau-marshall-rdf'>juneau-marshall-rdf</a></td>
<td>
- Serializers and parsers for:
- <ul style='margin:0px 10px;'>
- <li>RDF/XML
- <li>RDF/XML-Abbrev
- <li>N-Triple
- <li>Turtle
- <li>N3
- </ul>
+ <ul>
+ <li>Serializers and parsers for various RDF
languages.
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -73,29 +65,28 @@
<tr class='dark bb'>
<td class='code'><a class='doclink'
href='#juneau-dto'>juneau-dto</a></td>
<td>
- Data Transfer Objects for:
- <ul style='margin:0px 10px;'>
- <li>HTML5
- <li>Atom
- <li>Cognos
- <li>JSON-Schema
- <li>Swagger 2.0
- </ul>
+ <ul>
+ <li>Data Transfer Objects for HTML5, Atom,
Cognos, JSON-Schema, and Swagger
+ </ul>
</td>
<td><ul style='margin:0px 10px;'><li>Java 8+</li></ul></td>
</tr>
<tr class='dark bb'>
<td class='code'><a class='doclink'
href='#juneau-config'>juneau-config</a></td>
<td>
- Configuration file API
+ <ul>
+ <li>Configuration File API
+ </ul>
</td>
<td><ul style='margin:0px 10px;'><li>Java 8+</li></ul></td>
</tr>
<tr class='light bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-rest</td>
+ <td rowspan="6"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-rest</td>
<td class='code'><a class='doclink'
href='#juneau-rest-server'>juneau-rest-server</a></td>
<td>
- REST Servlet API
+ <ul>
+ <li>REST Servlet API
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -107,7 +98,9 @@
<tr class='light bb'>
<td class='code'><a class='doclink'
href='#juneau-rest-server-springboot'>juneau-rest-server-springboot</a></td>
<td>
- Spring Boot integration support
+ <ul>
+ <li>REST Spring Boot integration
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -119,7 +112,9 @@
<tr class='light bb'>
<td class='code'><a class='doclink'
href='#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></td>
<td>
- JAX-RS support
+ <ul>
+ <li>REST JAX-RS integration
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -131,7 +126,9 @@
<tr class='light bb'>
<td class='code'><a class='doclink'
href='#juneau-rest-client'>juneau-rest-client</a></td>
<td>
- REST Client API
+ <ul>
+ <li>REST Client API
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -140,46 +137,26 @@
</ul>
</td>
</tr>
- <tr class='dark bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-microservice</td>
- <td class='code'><a class='doclink'
href='#juneau-microservice-core'>juneau-microservice-core</a></td>
- <td>
- Microservice API
- </td>
- <td>
- <ul style='margin:0px 10px;'>
- <li>Java 8+
- </ul>
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='#juneau-microservice-jetty'>juneau-microservice-jetty</a></td>
- <td>
- Jetty Microservice API
- </td>
- <td>
- <ul style='margin:0px 10px;'>
- <li>Java 8+
- <li>Eclipse Jetty 9.4+
- </ul>
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='#my-jetty-microservice'>my-jetty-microservice</a></td>
+ <tr class='light bb'>
+ <td class='code'><a class='doclink'
href='#juneau-rest-client'>juneau-rest-mock</a></td>
<td>
- Developer template project for Jetty-based
microservices.
+ <ul>
+ <li>REST Testing API
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
<li>Java 8+
- <li>Eclipse Jetty 9.4+
+ <li>Apache HttpClient 4.5+
</ul>
</td>
</tr>
- <tr class='dark bb'>
+ <tr class='light bb'>
<td class='code'><a class='doclink'
href='#my-springboot-microservice'>my-springboot-microservice</a></td>
<td>
- Developer template project for Spring-Boot-based
microservices.
+ <ul>
+ <li>Spring Boot developer template
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -188,36 +165,26 @@
</ul>
</td>
</tr>
- <tr class='light bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-examples</td>
+ <tr class='dark bb'>
+ <td rowspan="2"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-examples</td>
<td class='code'><a class='doclink'
href='#juneau-examples-core'>juneau-examples-core</a></td>
<td>
- Core code examples
+ <ul>
+ <li>Core code examples
+ <ul>
</td>
<td></td>
</tr>
- <tr class='light bb'>
+ <tr class='dark bb'>
<td class='code'><a class='doclink'
href='#juneau-examples-rest'>juneau-examples-rest</a></td>
<td>
- REST code examples
+ <ul>
+ <li>REST code examples
+ <ul>
</td>
<td></td>
</tr>
<tr class='light bb'>
- <td class='code'><a class='doclink'
href='#juneau-examples-rest-jetty'>juneau-examples-rest-jetty</a></td>
- <td>
- REST code examples deployed using Jetty
- </td>
- <td></td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a></td>
- <td>
- REST code examples deployed using Spring Boot
- </td>
- <td></td>
- </tr>
- <tr class='dark bb'>
<td rowspan="1"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-all</td>
<td class='code'><c>juneau-all</c></td>
<td>
@@ -234,6 +201,7 @@
<ul style='margin:0px 10px;'>
<li>Java 8+
<li>Servlet 3.1+
+ <li>Apache HttpCore 4.4.13
<li>Apache HttpClient 4.5+
</ul>
</td>
@@ -270,3 +238,32 @@
<p>
Each of the components are also packaged as stand-alone OSGi modules.
</p>
+
+<!--
===========================================================================================================
-->
+<!-- === FEATURES
==============================================================================================
-->
+<!--
===========================================================================================================
-->
+
+<h5 class='toc'>Features</h5>
+<div class='topic'>
+ <ul class='spaced-list'>
+ <li>
+ Fast memory-efficient serialization.
+ <li>
+ Fast, safe, memory-efficient parsing. Parsers are not
susceptible to deserialization attacks.
+ <li>
+ KISS is our mantra! No auto-wiring. No code
generation. No dependency injection. Just add it to your classpath and use
it. Extremely simple unit testing!
+ <li>
+ Enjoyable to use
+ <li>
+ Tiny - ~1MB
+ <li>
+ Exhaustively tested
+ <li>
+ Lots of up-to-date documentation and examples
+ <li>
+ Minimal library dependencies.
+ <li>
+ Built on top of Servlet and Apache HttpClient APIs that
allow you to use the newest HTTP/2 features
+ such as request/response multiplexing and server push.
+ </ul>
+</div>
diff --git a/juneau-doc/docs/Topics/01.Overview/01.juneau-core.html
b/juneau-doc/docs/Topics/01.Overview/01.juneau-core.html
new file mode 100644
index 0000000..ec70277
--- /dev/null
+++ b/juneau-doc/docs/Topics/01.Overview/01.juneau-core.html
@@ -0,0 +1,325 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+
***************************************************************************************************************************/
+ -->
+
+{title:'juneau-core Overview', created:'9.0.0'}
+
+<h5 class='toc'>Marshalling APIs</h5>
+<div class='topic'>
+ <p>
+ The <c>juneau-marshall</c> library includes easy-to-use and
highly customizable serializers and parsers based around
+ a common API. It allows you to marshall Java POJOs directly to
and from a wide variety of language types
+ without the need for intermediate Document Object Models making
them extremely efficient.
+ </p>
+ <p>
+ Supported languages include:
+ <ul>
+ <li>JSON
+ <li>XML
+ <li>HTML
+ <li>UON
+ <li>URL-Encoding
+ <li>MessagePack
+ <li>OpenAPI
+ <li>SOAP/XML
+ <li>CSV
+ <li>YAML (coming soon)
+ <li>RDF/XML
+ <li>RDF/XML-Abbrev
+ <li>N-Triple
+ <li>Turtle
+ <li>N3
+ </ul>
+ </p>
+ <p>
+ The default serializers can often be used to serialize POJOs in
a single line of code:
+ </p>
+ <p class='bcode w800'>
+ <jc>// A simple bean</jc>
+ <jk>public class</jk> Person {
+ <jk>public</jk> String <jf>name</jf> = <js>"John Smith"</js>;
+ <jk>public int</jk> <jf>age</jf> = 21;
+ }
+
+ <jc>// Produces:
+ // "{"name":"John Smith","age":21}"</jc>
+ String <jv>json</jv> =
JsonSerializer.<jsf>DEFAULT</jsf>.serialize(<jk>new</jk> Person());
+ </p>
+ <p>
+ Parsing back into POJOs is equally simple for any of the
supported languages
+ Language fragments are also supported.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Parse a JSON object as a bean.</jc>
+ String <jv>json</jv> = <js>"{\"name\":\"John Smith\","\age\":21}"</js>;
+ Person <jv>person</jv> = <jv>parser</jv>.parse(<jv>json</jv>,
Person.<jk>class</jk>);
+ </p>
+ <p>
+ Marshalls are pairings of serializers and parsers in a single
class for even simpler code:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Serialize</jc>
+ String <jv>json</jv> = Json.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
+
+ <jc>// Parse</jc>
+ Person <jv>person</jv> = Json.<jsf>DEFAULT</jsf>.read(<jv>json</jv>,
Person.<jk>class</jk>);
+ </p>
+ <p>
+ Marshalling support is provided for a wide variety of POJO types
+ including:
+ </p>
+ <ul>
+ <li>Java primitives and primitive objects
+ <li>Java beans
+ <li>Java Collections Framework objects (e.g. Collections, Maps)
+ <li>Java arrays
+ <li>Java POJOs
+ </ul>
+ <p>
+ See {@doc PojoCategories} for an exhaustive list of categories
supported out-of-the-box.
+ </p>
+ <p>
+ Serializers and parsers are builder-based using fluent methods
allowing you to quickly create, clone, and modify them
+ in single lines of code.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Create a serializer from scratch programmatically using a
builder.</jc>
+ JsonSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .simple() <jc>// Simple mode</jc>
+ .sq() <jc>// Use single
quotes</jc>
+ .timeZone(TimeZone.<jsf>GMT</jsf>) <jc>// For
timezone-specific serialization</jc>
+ .locale(Locale.<jsf>JAPAN</jsf>) <jc>// For
locale-specific serialization</jc>
+ .sortCollections()
+ .sortProperties()
+ .keepNullProperties()
+ .trimStrings()
+ .beanMethodVisibility(<jsf>PROTECTED</jsf>) <jc>// Control
which fields/methods are serialized</jc>
+ .beanDictionary( <jc>// Adds type variables
for resolution during parsing</jc>
+ MyBeanA.<jk>class</jk>,
+ MyBeanB.<jk>class</jk>
+ )
+ .debug() <jc>// Debug mode</jc>
+ .build();
+ </p>
+ <p>
+ Many POJOs such as primitives, beans, collections, arrays, and
classes with various known constructors and methods are serializable
out-of-the-box.
+ For other objects, "transforms" allow you to perform various
mutations on them before serialization and after parsing.
+ </p>
+ <p>
+ {@doc PojoSwaps POJO swaps} allow you to replace
non-serializable POJOs with serializable equivalents.
+ The {@link oaj.transforms} package contains a variety of
predefined swaps.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Create a serializer from scratch programmatically using a
builder.</jc>
+ JsonSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .swaps( <jc>// Swap unserializable
classes with surrogate POJOs</jc>
+ IteratorSwap.<jk>class</jk>, <jc>//
Iterators swapped with lists</jc>
+ ByteArrayBase64Swap.<jk>class</jk>, <jc>// byte[]
swapped with base-64 encoded strings</jc>
+ CalendarSwap.ISO8601DT.<jk>class</jk> <jc>//
Calendars swapped with ISO8601-compliant strings</jc>
+ )
+ .build();
+ </p>
+ <p>
+ Beans and POJO classes can also be annotated with a variety of
annotations to customize how they are marshalled:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Sort bean properties by name.</jc>
+ <jc>// Exclude city/state from marshalling.</jc>
+ <ja>@Bean</ja>(sort=<jk>true</jk>,
excludeProperties=<js>"city,state"</js>})
+ <jk>public class</jk> Address { ... }
+ </p>
+ <p>
+ Any POJO that doesn't fit into the category of a
bean/collection/array/primitive and doesn't have a swap
+ associated with it is converted to simple strings.
+ By default, various instance and static methods and
constructors on POJO classes are automatically detected and supported
+ for marshalling a POJO to and from a string:
+ <br><code>valueOf(String)</code>, <code>parse(String)</code>,
<code>parseString(String)</code>, <code>forName(String)</code>,
<code>forString(String)</code>,
+ <code>fromString(String)</code>, <code>T(String)</code>,
<code>Object swap(BeanSession)</code>, <code>T unswap(BeanSession,
T.class)</code>
+ </p>
+ <p>
+ Serializers and parsers can also be configured using
annotations.
+ </p>
+ <p class='bcode w800'>
+ <ja>@BeanConfig</ja>(sort=<jk>true</jk>)
+ <ja>@SerializerConfig</ja>(quoteChar=<js>"'"</js>)
+ <ja>@RdfConfig</ja>(rdfxml_tab=<js>"5"</js>,
addRootProperty=<js>"true"</js>)
+ <jk>public class</jk> MyAnnotatedClass {...}
+
+ <jc>// Create a serializer configured using annotations.</jc>
+ JsonSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .applyAnnotations(MyAnnotatedClass.<jk>class</jk>)
+ .build();
+ </p>
+ <p>
+ Config annotations are extensively used in the REST Servlet
APIs to configure how POJOs are marshalled through REST interfaces.
+ </p>
+</div>
+<h5 class='toc'>UON Marshalling</h5>
+<div class='topic'>
+ <p>
+ The Marshalling API also supports UON (URL-Encoded Object
Notation).
+ It allows JSON-like data structures (OBJECT, ARRAY, NUMBER,
BOOLEAN, STRING, NULL) in HTTP constructs (query parameters, form parameters,
+ headers, URL parts) without violating RFC2396.
+ This allows POJOs to be converted directly into these HTTP
constructs which is not possible in other languages such as JSON.
+ </p>
+ <p class='bcode w800'>
+ (
+ id=1,
+ name=<js>'John+Smith'</js>,
+ uri=<js>http://sample/addressBook/person/1</js>,
+ addressBookUri=<js>http://sample/addressBook</js>,
+ birthDate=<js>1946-08-12T00:00:00Z</js>,
+ addresses=@(
+ (
+
uri=<js>http://sample/addressBook/address/1</js>,
+
personUri=<js>http://sample/addressBook/person/1</js>,
+ id=<js>1</js>,
+ street=<js>'100+Main+Street'</js>,
+ city=<js>Anywhereville</js>,
+ state=<js>NY</js>,
+ zip=<js>12345</js>,
+ isCurrent=<jk>true</jk>
+ )
+ )
+ )
+ </p>
+ <p>
+ See {@doc UonDetails} for more information.
+ </p>
+</div>
+<h5 class='toc'>OpenAPI Marshalling</h5>
+<div class='topic'>
+ <p>
+ The Marshalling API also supports schema-based OpenAPI
serialization.
+ It allows HTTP parts to be marshalled to-and-from POJOs based
on OpenAPI schema definitions.
+ </p>
+ <p class='bpcode w800'>
+ <jk>import static</jk> org.apache.juneau.httpart.HttpPartSchema.*;
+
+ <jc>// Schema - Pipe-delimited list of comma-delimited longs.</jc>
+ HttpPartSchema <jv>schema</jv> = <jsm>tArrayPipes</jsm>().items(
+ <jsm>tArrayCsv</jsm>().items(
+ <jsm>tInt64</jsm>()
+ )
+ ).build();
+
+ <jc>// Our value to serialize</jc>
+ Object <jv>value</jv> = <jk>new long</jk>[][]{{1,2,3},{4,5,6},{7,8,9}};
+
+ <jc>// Produces "1,2,3|4,5,6|7,8,9"</jc>
+ String <jv>output</jv> =
OpenApiSerializer.<jsf>DEFAULT</jsf>.serialize(HttpPartType.<jsf>HEADER</jsf>,
<jv>schema</jv>, <jv>value</jv>);
+ </p>
+ <p>
+ Schema-based serialization is used heavily in both the server
and client REST APIs.
+ </p>
+ <p class='bcode w800'>
+ <jc>// REST server method with HTTP parts using schema validation.</jc>
+ <ja>@RestGet</ja>
+ <jk>public void</jk> doGet(
+ <ja>@Query</ja>(name=<js>"myParam"</js>, min=1, max=32)
<jk>int</jk> <jv>myParam</jv>,
+ <ja>@Header</ja>(<js>"MyHeader"</js>, pattern=<js>"foo.*"</js>)
String <jv>p2</jv>
+ ) {...}
+ </p>
+</div>
+<h5 class='toc'>Convenience APIs</h5>
+<div class='topic'>
+ <p>
+ <p>
+ Lots of shortcuts are provided throughout the API to simplify
tasks, and the APIs are often useful for debugging and logging purposes as well:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Create JSON strings from scratch using fluent-style code.</jc>
+ String <jv>jsonObject</jv> = <jk>new</jk>
OMap().append(<js>"foo"</js>,<js>"bar"</js>).toString();
+ String <jv>jsonArray</jv> = <jk>new</jk>
OList().append(<js>"foo"</js>).append(123).append(<jk>null</jk>).toString();
+
+ <jc>// Create maps and beans directly from JSON.</jc>
+ Map<String,Object> <jv>myMap</jv> = <jk>new</jk>
OMap(<js>"{foo:'bar'}"</js>);
+ List<Object> <jv>myList</jv> = <jk>new</jk>
OList(<js>"['foo',123,null]"</js>);
+
+ <jc>// Load a POJO from a JSON file.</jc>
+ MyPojo <jv>myPojo</jv> =
JsonParser.<jsf>DEFAULT</jsf>.parse(<jk>new</jk> File(<js>"myPojo.json"</js>));
+
+ <jc>// Serialize POJOs and ignore exceptions (great for logging)</jc>
+ String <jv>json</jv> =
SimpleJson.<jsf>DEFAULT</jsf>.toString(<jv>myPojo</jv>);
+
+ <jc>// Dump a POJO to the console.</jc>
+ SimpleJson.<jsf>DEFAULT</jsf>.println(<jv>myPojo</jv>);
+
+ String <jv>message</jv> = <jk>new</jk> StringMessage(<js>"My POJO in
{0}: {1}"</js>, <js>"JSON"</js>, <jk>new</jk>
StringObject(<jv>myPojo</jv>)).toString();
+
+ <jc>// Create a 'REST-like' wrapper around a POJO.</jc>
+ <jc>// Allows you to manipulate POJO trees using URIs and
GET/PUT/POST/DELETE commands.</jc>
+ PojoRest <jv>pojoRest</jv> = <jk>new</jk> PojoRest(<jv>myPojo</jv>);
+ <jv>pojoRest</jv>.get(String.<jk>class</jk>,
<js>"addressBook/0/name"</js>);
+ <jv>pojoRest</jv>.put(<js>"addressBook/0/name"</js>, <js>"John
Smith"</js>);
+ </p>
+</div>
+<h5 class='toc'>Serializer and Parser Groups</h5>
+<div class='topic'>
+ <p>
+ <code>SerializerGroup</code> and <code>ParserGroup</code>
classes allow serializers and parsers
+ to be retrieved by W3C-compliant HTTP <code>Accept</code> and
<code>Content-Type</code> values:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Construct a new serializer group with configuration parameters
that get applied to all serializers.</jc>
+ SerializerGroup <jv>serializerGroup</jv> = SerializerGroup
+ .<jsm>create</jsm>()
+ .add(JsonSerializer.<jk>class</jk>,
UrlEncodingSerializer.<jk>class</jk>);
+ .forEach(<jv>x</jv> ->
<jv>x</jv>.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>))
+ .forEachWS(<jv>x</jv> -> <jv>x</jv>.useWhitespace())
+ .build();
+
+ <jc>// Find the appropriate serializer by Accept type and serialize our
POJO to the specified writer.</jc>
+ <jc>// Fully RFC2616 compliant.</jc>
+ <jv>serializerGroup</jv>
+ .getSerializer(<js>"text/invalid, text/json;q=0.8,
text/*;q:0.6, *\/*;q=0.0"</js>)
+ .serialize(<jv>person</jv>, <jv>myWriter</jv>);
+
+ <jc>// Construct a new parser group with configuration parameters that
get applied to all parsers.</jc>
+ ParserGroup <jv>parserGroup</jv> = ParserGroup
+ .<jsm>create</jsm>()
+ .add(JsonParser.<jk>class</jk>,
UrlEncodingParser.<jk>class</jk>);
+ .forEach(<jv>x</jv> ->
<jv>x</jv>.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>))
+ .build();
+
+ Person <jv>person</jv> = <jv>parserGroup</jv>
+ .getParser(<js>"text/json"</js>)
+ .parse(<jv>myReader</jv>, Person.<jk>class</jk>);
+ </p>
+</div>
+<h5 class='toc'>SVL Variables</h5>
+<div class='topic'>
+ <p>
+ The <code>org.apache.juneau.svl</code> package defines an API
for a language called "Simple Variable Language".
+ In a nutshell, Simple Variable Language (or SVL) is text that
contains variables of the form
+ <js>"$varName{varKey}"</js>.
+ </p>
+ <p>
+ Variables can be recursively nested within the varKey (e.g.
<js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>).
+ Variables can also return values that themselves contain more
variables.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Use the default variable resolver to resolve a string that
contains $S (system property) variables</jc>
+ String <jv>myProperty</jv> =
VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"The Java home directory is
$S{java.home}"</js>);
+ </p>
+ <p>
+ The SVL variables are used widely throughout various
annotations defined in Juneau allowing many features to be configured
+ via external sources such as configuration files or environment
variables/system properties. The SVL APIs are
+ extensible allowing for the addition of new types of variables.
+ </p>
+</div>
+
diff --git a/juneau-doc/docs/Topics/01.Overview/02.juneau-rest.html
b/juneau-doc/docs/Topics/01.Overview/02.juneau-rest.html
new file mode 100644
index 0000000..df71f60
--- /dev/null
+++ b/juneau-doc/docs/Topics/01.Overview/02.juneau-rest.html
@@ -0,0 +1,19 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+
***************************************************************************************************************************/
+ -->
+
+{title:'juneau-rest Overview', created:'9.0.0'}
+
+<div>
+</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/01.Overview/03.juneau-examples.html
b/juneau-doc/docs/Topics/01.Overview/03.juneau-examples.html
new file mode 100644
index 0000000..510e5a7
--- /dev/null
+++ b/juneau-doc/docs/Topics/01.Overview/03.juneau-examples.html
@@ -0,0 +1,19 @@
+<!--
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+
***************************************************************************************************************************/
+ -->
+
+{title:'juneau-examples', created:'9.0.0'}
+
+<div>
+</div>
\ No newline at end of file
diff --git
a/juneau-doc/docs/Topics/02.juneau-marshall/07.HttpPartSerializers.html
b/juneau-doc/docs/Topics/02.juneau-marshall/07.HttpPartSerializers.html
index 0ad0378..2bfe699 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/07.HttpPartSerializers.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/07.HttpPartSerializers.html
@@ -22,14 +22,12 @@
<p class='bpcode w800'>
<jc>// Schema information about our part.</jc>
HttpPartSchema <jv>schema</jv> = HttpPartSchema
- .<jsm>create</jsm>(<js>"array"</js>)
- .collectionFormat(<js>"pipes"</js>)
+ .<jsm>tArrayPipes</jsm>()
.items(
HttpPartSchema
- .<jsm>create</jsm>(<js>"array"</js>)
- .collectionFormat(<js>"csv"</js>)
+ .<jsm>tArrayCsv</jsm>()
.items(
-
HttpPartSchema.<jsm>create</jsm>(<js>"integer"</js>,<js>"int64"</js>)
+
HttpPartSchema.<jsm>tInt64</jsm>(<js>"integer"</js>,<js>"int64"</js>)
)
)
.build();
diff --git a/juneau-doc/src/main/javadoc/overview.html
b/juneau-doc/src/main/javadoc/overview.html
index 9ef07ba..2ddd7cd 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -159,10 +159,11 @@
<a href='#TOC' id='TOC'></a><h5 class='toc'>Table of Contents</h5>
<ol class='toc'>
- <li><p class='toc2'><a class='doclink'
href='#Introduction'>Introduction</a></p>
+ <li><p class='toc2'><a class='doclink' href='#Overview'>Overview</a></p>
<ol>
- <li><p><a class='doclink'
href='#Introduction.Features'>Features</a><span class='update'>updated:
8.1.0</span></p>
- <li><p><a class='doclink'
href='#Introduction.Components'>Components</a></p>
+ <li><p><a class='doclink'
href='#Overview.juneau-core'>juneau-core</a><span class='update'>created:
<b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='#Overview.juneau-rest'>juneau-rest</a><span class='update'>created:
<b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='#Overview.juneau-examples'>juneau-examples</a><span
class='update'>created: <b>9.0.0</b></span></p>
</ol>
<li><p class='toc2'><a class='doclink'
href='#juneau-marshall'>juneau-marshall</a></p>
<ol>
@@ -580,166 +581,19 @@
<!--
====================================================================================================
-->
-<h2 class='topic' onclick='toggle(this)'><a href='#Introduction'
id='Introduction'>1 - Introduction</a></h2>
-<div class='topic'><!-- START: 1 - Introduction -->
-<p>
- Apache Juneau™ is a single cohesive Java ecosystem consisting of
the following parts:
-</p>
-<table class='styled w800'>
- <tr>
- <th>Group</th><th>Component</th><th>Description</th>
- </tr>
-
- <tr class='dark bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'>Juneau Core</td>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-marshall'>juneau-marshall</a></td>
- <td>
- A universal toolkit for marshalling POJOs to a wide
variety of content types using a common framework with no external library
dependencies.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-marshall-rdf'>juneau-marshall-rdf</a></td>
- <td>
- Extended marshalling support for RDF languages.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-dto'>juneau-dto</a></td>
- <td>
- A variety of predefined DTOs for serializing and
parsing languages such as HTML5, Swagger and ATOM.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-config'>juneau-config</a></td>
- <td>
- A sophisticated configuration file API.
- </td>
- </tr>
-
- <tr class='light bb'>
- <td rowspan="5"
style='text-align:center;font-weight:bold;padding:20px;'>Juneau REST</td>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-server'>juneau-rest-server</a></td>
- <td>
- A universal REST server API for creating Swagger-based
self-documenting REST interfaces using POJOs, simply deployed as
- one or more top-level servlets in any Servlet 3.1.0+
container.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-server-springboot'>juneau-rest-server-springboot</a></td>
- <td>
- Spring boot integration support.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></td>
- <td>
- JAX/RS integration support.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-client'>juneau-rest-client</a></td>
- <td>
- A universal REST client API for interacting with Juneau
or 3rd-party REST interfaces using POJOs and proxy interfaces.
- </td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-rest-mock'>juneau-rest-mock</a></td>
- <td>
- Mocking APIs for server-less end-to-end testing of REST
server and client APIs.
- </td>
- </tr>
-
- <tr class='dark bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'>Examples</td>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-core'>juneau-examples-core</a></td>
- <td>
- Juneau Core API examples.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-rest'>juneau-examples-rest</a></td>
- <td>
- Juneau REST API examples.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-rest-jetty'>juneau-examples-rest-jetty</a></td>
- <td>
- Juneau REST API examples using Jetty deployment.
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='http://juneau.apache.org/site/apidocs-{@property
juneauVersion}/overview-summary.html#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a></td>
- <td>
- Juneau REST API examples using Spring Boot deployment.
- </td>
- </tr>
-
-</table>
-<p>
- Questions via email to <a class='doclink'
href='mailto:[email protected]?Subject=Apache%20Juneau%20question'>[email protected]</a>
are always welcome.
-</p>
-<p>
- Juneau is packed with features that may not be obvious at first.
- Users are encouraged to ask for code reviews by providing links to
specific source files such as through GitHub.
- Not only can we help you with feedback, but it helps us understand
usage patterns to further improve the product.
-</p>
-
-<h5 class='topic'>History</h5>
-<p>
- Juneau started off as a popular internal IBM toolkit called Juno.
- Originally used for serializing POJOs to and from JSON (at a time when
the concept was new), it later expanded in
- scope to include a variety of content types, and then later REST
servlet, client, and microservice APIs.
- It's use grew to more than 50 projects and was one of the most popular
community source projects within IBM.
-</p>
-<p>
- In June of 2016, the code was donated to the Apache Foundation under
the project <l>Apache Juneau</l> where it
- has continued to evolve to where it is today.
-</p>
-
-<!--
====================================================================================================
-->
-
-<h3 class='topic' onclick='toggle(this)'><a href='#Introduction.Features'
id='Introduction.Features'>1.1 - Features</a><span class='update'>updated:
8.1.0</span></h3>
-<div class='topic'><!-- START: 1.1 - Introduction.Features -->
-<ul class='spaced-list'>
- <li>
- Fast memory-efficient serialization.
- <li>
- Fast, safe, memory-efficient parsing. Parsers are not
susceptible to deserialization attacks.
- <li>
- KISS is our mantra! No auto-wiring. No code generation. No
dependency injection requirements. Just add it to your classpath and use it.
Extremely simple unit testing!
- <li>
- Enjoyable to use
- <li>
- Tiny - ~1MB
- <li>
- Exhaustively tested
- <li>
- Lots of up-to-date documentation and examples
- <li>
- Minimal library dependencies:
- <ul>
- <li><b>juneau-marshall</b>, <b>juneau-dto</b>,
<b>juneau-config</b> - No external dependencies. Entirely self-contained.
- <li><b>juneau-marshall-rdf</b> - Optional RDF support.
Requires Apache Jena 2.7.1+.
- <li><b>juneau-rest-server</b> - Any Servlet 3.1.0+
container.
- <li><b>juneau-rest-client</b> - Apache HttpClient 4.5+.
- <li><b>juneau-microservice</b> - Eclipse Jetty.
- </ul>
- <li>
- Built on top of Servlet and Apache HttpClient APIs that allow
you to use the newest HTTP/2 features
- such as request/response multiplexing and server push.
-</ul>
-</div><!-- END: 1.1 - Introduction.Features -->
-
-<!--
====================================================================================================
-->
+<h2 class='topic' onclick='toggle(this)'><a href='#Overview' id='Overview'>1 -
Overview</a></h2>
+<div class='topic'><!-- START: 1 - Overview -->
+<!--
===========================================================================================================
-->
+<!-- === ABOUT
=================================================================================================
-->
+<!--
===========================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a href='#Introduction.Components'
id='Introduction.Components'>1.2 - Components</a></h3>
-<div class='topic'><!-- START: 1.2 - Introduction.Components -->
+<h5 class='toc'>About</h5>
<p>
- We've strived to keep prerequisites to an absolute minimum in order to
make adoption as easy as possible.
+ Apache Juneau™ is a single cohesive Java ecosystem for marshalling Java
objects to a wide variety of
+ language types and creating annotation-based REST server and client
APIs.
</p>
<p>
- The library consists of the following artifacts found in the Maven
group <c>"org.apache.juneau"</c>:
+ The Juneau ecosystem consists of the following parts:
</p>
<table class='styled w800'>
<tr>
@@ -748,40 +602,26 @@
<tr class='dark bb'>
<td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-core</td>
<td class='code'><a class='doclink'
href='#juneau-marshall'>juneau-marshall</a></td>
- <td>Serializers and parsers for:
- <ul style='margin:0px 10px;'>
- <li>JSON
- <li>XML
- <li>HTML
- <li>UON
- <li>URL-Encoding
- <li>MessagePack
- <li>OpenAPI
- <li>SOAP/XML
- <li>CSV
- <li>BSON (coming soon)
- <li>YAML (coming soon)
- <li>Protobuf (coming soon)
- <li>Amazon Ion (coming soon)
+ <td>
+ <ul>
+ <li>Serializers and parsers for various
languages.
+ <li>Marshalling support for HTTP
headers/parts/requests/responses.
+ <li>Marshall-based assertions for simplified
unit testing.
</ul>
</td>
<td>
<ul style='margin:0px 10px;'>
<li>Java 8
+ <li>Apache HttpCore 4.4.13
</ul>
</td>
</tr>
<tr class='dark bb'>
<td class='code'><a class='doclink'
href='#juneau-marshall-rdf'>juneau-marshall-rdf</a></td>
<td>
- Serializers and parsers for:
- <ul style='margin:0px 10px;'>
- <li>RDF/XML
- <li>RDF/XML-Abbrev
- <li>N-Triple
- <li>Turtle
- <li>N3
- </ul>
+ <ul>
+ <li>Serializers and parsers for various RDF
languages.
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -793,29 +633,28 @@
<tr class='dark bb'>
<td class='code'><a class='doclink'
href='#juneau-dto'>juneau-dto</a></td>
<td>
- Data Transfer Objects for:
- <ul style='margin:0px 10px;'>
- <li>HTML5
- <li>Atom
- <li>Cognos
- <li>JSON-Schema
- <li>Swagger 2.0
- </ul>
+ <ul>
+ <li>Data Transfer Objects for HTML5, Atom,
Cognos, JSON-Schema, and Swagger
+ </ul>
</td>
<td><ul style='margin:0px 10px;'><li>Java 8+</li></ul></td>
</tr>
<tr class='dark bb'>
<td class='code'><a class='doclink'
href='#juneau-config'>juneau-config</a></td>
<td>
- Configuration file API
+ <ul>
+ <li>Configuration File API
+ </ul>
</td>
<td><ul style='margin:0px 10px;'><li>Java 8+</li></ul></td>
</tr>
<tr class='light bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-rest</td>
+ <td rowspan="6"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-rest</td>
<td class='code'><a class='doclink'
href='#juneau-rest-server'>juneau-rest-server</a></td>
<td>
- REST Servlet API
+ <ul>
+ <li>REST Servlet API
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -827,7 +666,9 @@
<tr class='light bb'>
<td class='code'><a class='doclink'
href='#juneau-rest-server-springboot'>juneau-rest-server-springboot</a></td>
<td>
- Spring Boot integration support
+ <ul>
+ <li>REST Spring Boot integration
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -839,7 +680,9 @@
<tr class='light bb'>
<td class='code'><a class='doclink'
href='#juneau-rest-server-jaxrs'>juneau-rest-server-jaxrs</a></td>
<td>
- JAX-RS support
+ <ul>
+ <li>REST JAX-RS integration
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -851,7 +694,9 @@
<tr class='light bb'>
<td class='code'><a class='doclink'
href='#juneau-rest-client'>juneau-rest-client</a></td>
<td>
- REST Client API
+ <ul>
+ <li>REST Client API
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -860,46 +705,26 @@
</ul>
</td>
</tr>
- <tr class='dark bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-microservice</td>
- <td class='code'><a class='doclink'
href='#juneau-microservice-core'>juneau-microservice-core</a></td>
- <td>
- Microservice API
- </td>
- <td>
- <ul style='margin:0px 10px;'>
- <li>Java 8+
- </ul>
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='#juneau-microservice-jetty'>juneau-microservice-jetty</a></td>
- <td>
- Jetty Microservice API
- </td>
- <td>
- <ul style='margin:0px 10px;'>
- <li>Java 8+
- <li>Eclipse Jetty 9.4+
- </ul>
- </td>
- </tr>
- <tr class='dark bb'>
- <td class='code'><a class='doclink'
href='#my-jetty-microservice'>my-jetty-microservice</a></td>
+ <tr class='light bb'>
+ <td class='code'><a class='doclink'
href='#juneau-rest-client'>juneau-rest-mock</a></td>
<td>
- Developer template project for Jetty-based
microservices.
+ <ul>
+ <li>REST Testing API
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
<li>Java 8+
- <li>Eclipse Jetty 9.4+
+ <li>Apache HttpClient 4.5+
</ul>
</td>
</tr>
<tr class='dark bb'>
<td class='code'><a class='doclink'
href='#my-springboot-microservice'>my-springboot-microservice</a></td>
<td>
- Developer template project for Spring-Boot-based
microservices.
+ <ul>
+ <li>Spring Boot developer template
+ <ul>
</td>
<td>
<ul style='margin:0px 10px;'>
@@ -909,31 +734,21 @@
</td>
</tr>
<tr class='light bb'>
- <td rowspan="4"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-examples</td>
+ <td rowspan="2"
style='text-align:center;font-weight:bold;padding:20px;'
class='code'>juneau-examples</td>
<td class='code'><a class='doclink'
href='#juneau-examples-core'>juneau-examples-core</a></td>
<td>
- Core code examples
+ <ul>
+ <li>Core code examples
+ <ul>
</td>
<td></td>
</tr>
<tr class='light bb'>
<td class='code'><a class='doclink'
href='#juneau-examples-rest'>juneau-examples-rest</a></td>
<td>
- REST code examples
- </td>
- <td></td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='#juneau-examples-rest-jetty'>juneau-examples-rest-jetty</a></td>
- <td>
- REST code examples deployed using Jetty
- </td>
- <td></td>
- </tr>
- <tr class='light bb'>
- <td class='code'><a class='doclink'
href='#juneau-examples-rest-springboot'>juneau-examples-rest-springboot</a></td>
- <td>
- REST code examples deployed using Spring Boot
+ <ul>
+ <li>REST code examples
+ <ul>
</td>
<td></td>
</tr>
@@ -954,6 +769,7 @@
<ul style='margin:0px 10px;'>
<li>Java 8+
<li>Servlet 3.1+
+ <li>Apache HttpCore 4.4.13
<li>Apache HttpClient 4.5+
</ul>
</td>
@@ -990,8 +806,443 @@
<p>
Each of the components are also packaged as stand-alone OSGi modules.
</p>
-</div><!-- END: 1.2 - Introduction.Components -->
-</div><!-- END: 1 - Introduction -->
+
+<!--
===========================================================================================================
-->
+<!-- === FEATURES
==============================================================================================
-->
+<!--
===========================================================================================================
-->
+
+<h5 class='toc'>Features</h5>
+<div class='topic'>
+ <ul class='spaced-list'>
+ <li>
+ Fast memory-efficient serialization.
+ <li>
+ Fast, safe, memory-efficient parsing. Parsers are not
susceptible to deserialization attacks.
+ <li>
+ KISS is our mantra! No auto-wiring. No code
generation. No dependency injection. Just add it to your classpath and use
it. Extremely simple unit testing!
+ <li>
+ Enjoyable to use
+ <li>
+ Tiny - ~1MB
+ <li>
+ Exhaustively tested
+ <li>
+ Lots of up-to-date documentation and examples
+ <li>
+ Minimal library dependencies.
+ <li>
+ Built on top of Servlet and Apache HttpClient APIs that
allow you to use the newest HTTP/2 features
+ such as request/response multiplexing and server push.
+ </ul>
+</div>
+
+<!--
====================================================================================================
-->
+
+<h3 class='topic' onclick='toggle(this)'><a href='#Overview.juneau-core'
id='Overview.juneau-core'>1.1 - juneau-core</a><span class='update'>created:
<b>9.0.0</b></span></h3>
+<div class='topic'><!-- START: 1.1 - Overview.juneau-core -->
+<h5 class='toc'>Marshalling APIs</h5>
+<div class='topic'>
+ <p>
+ The <c>juneau-marshall</c> library includes easy-to-use and
highly customizable serializers and parsers based around
+ a common API. It allows you to marshall Java POJOs directly to
and from a wide variety of language types
+ without the need for intermediate Document Object Models making
them extremely efficient.
+ </p>
+ <p>
+ Supported languages include:
+ <ul>
+ <li>JSON
+ <li>XML
+ <li>HTML
+ <li>UON
+ <li>URL-Encoding
+ <li>MessagePack
+ <li>OpenAPI
+ <li>SOAP/XML
+ <li>CSV
+ <li>YAML (coming soon)
+ <li>RDF/XML
+ <li>RDF/XML-Abbrev
+ <li>N-Triple
+ <li>Turtle
+ <li>N3
+ </ul>
+ </p>
+ <p>
+ The default serializers can often be used to serialize POJOs in
a single line of code:
+ </p>
+ <p class='bcode w800'>
+ <jc>// A simple bean</jc>
+ <jk>public class</jk> Person {
+ <jk>public</jk> String <jf>name</jf> = <js>"John Smith"</js>;
+ <jk>public int</jk> <jf>age</jf> = 21;
+ }
+
+ <jc>// Produces:
+ // "{"name":"John Smith","age":21}"</jc>
+ String <jv>json</jv> =
JsonSerializer.<jsf>DEFAULT</jsf>.serialize(<jk>new</jk> Person());
+ </p>
+ <p>
+ Parsing back into POJOs is equally simple for any of the
supported languages
+ Language fragments are also supported.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Parse a JSON object as a bean.</jc>
+ String <jv>json</jv> = <js>"{\"name\":\"John Smith\","\age\":21}"</js>;
+ Person <jv>person</jv> = <jv>parser</jv>.parse(<jv>json</jv>,
Person.<jk>class</jk>);
+ </p>
+ <p>
+ Marshalls are pairings of serializers and parsers in a single
class for even simpler code:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Serialize</jc>
+ String <jv>json</jv> = Json.<jsf>DEFAULT</jsf>.write(<jv>person</jv>);
+
+ <jc>// Parse</jc>
+ Person <jv>person</jv> = Json.<jsf>DEFAULT</jsf>.read(<jv>json</jv>,
Person.<jk>class</jk>);
+ </p>
+ <p>
+ Marshalling support is provided for a wide variety of POJO types
+ including:
+ </p>
+ <ul>
+ <li>Java primitives and primitive objects
+ <li>Java beans
+ <li>Java Collections Framework objects (e.g. Collections, Maps)
+ <li>Java arrays
+ <li>Java POJOs
+ </ul>
+ <p>
+ See {@doc PojoCategories} for an exhaustive list of categories
supported out-of-the-box.
+ </p>
+ <p>
+ Serializers and parsers are builder-based using fluent methods
allowing you to quickly create, clone, and modify them
+ in single lines of code.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Create a serializer from scratch programmatically using a
builder.</jc>
+ JsonSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .simple() <jc>// Simple mode</jc>
+ .sq() <jc>// Use single
quotes</jc>
+ .timeZone(TimeZone.<jsf>GMT</jsf>) <jc>// For
timezone-specific serialization</jc>
+ .locale(Locale.<jsf>JAPAN</jsf>) <jc>// For locale-specific
serialization</jc>
+ .sortCollections()
+ .sortProperties()
+ .keepNullProperties()
+ .trimStrings()
+ .beanMethodVisibility(<jsf>PROTECTED</jsf>) <jc>// Control
which fields/methods are serialized</jc>
+ .beanDictionary( <jc>// Adds type variables
for resolution during parsing</jc>
+ MyBeanA.<jk>class</jk>,
+ MyBeanB.<jk>class</jk>
+ )
+ .debug() <jc>// Debug mode</jc>
+ .build();
+ </p>
+ <p>
+ Many POJOs such as primitives, beans, collections, arrays, and
classes with various known constructors and methods are serializable
out-of-the-box.
+ For other objects, "transforms" allow you to perform various
mutations on them before serialization and after parsing.
+ </p>
+ <p>
+ {@doc PojoSwaps POJO swaps} allow you to replace
non-serializable POJOs with serializable equivalents.
+ The {@link org.apache.juneau.swaps} package contains a variety
of predefined swaps.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Create a serializer from scratch programmatically using a
builder.</jc>
+ JsonSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .swaps( <jc>// Swap unserializable
classes with surrogate POJOs</jc>
+ IteratorSwap.<jk>class</jk>, <jc>// Iterators
swapped with lists</jc>
+ ByteArrayBase64Swap.<jk>class</jk>, <jc>// byte[]
swapped with base-64 encoded strings</jc>
+ CalendarSwap.ISO8601DT.<jk>class</jk> <jc>// Calendars
swapped with ISO8601-compliant strings</jc>
+ )
+ .build();
+ </p>
+ <p>
+ Beans and POJO classes can be annotated with a variety of
annotations to customize how they are marshalled:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Sort bean properties by name.</jc>
+ <jc>// Exclude city/state from marshalling.</jc>
+ <ja>@Bean</ja>(sort=<jk>true</jk>, xp=<js>"city,state"</js>})
+ <jk>public class</jk> Address { ... }
+ </p>
+ <p>
+ By default, various instance and static methods and
constructors on POJO classes are automatically detected and supported:
+ <br><code>valueOf(String)</code>, <code>parse(String)</code>,
<code>parseString(String)</code>, <code>forName(String)</code>,
<code>forString(String)</code>,
+ <code>fromString(String)</code>, <code>T(String)</code>,
<code>Object swap(BeanSession)</code>, <code>T unswap(BeanSession,
T.class)</code>
+ </p>
+ <p>
+ Serializers and parsers can also be configured using
annotations.
+ This is extensively used in the REST Servlet APIs to configure
how POJOs are marshalled through REST interfaces.
+ </p>
+ <p class='bcode w800'>
+ <ja>@BeanConfig</ja>(sort=<jk>true</jk>)
+ <ja>@SerializerConfig</ja>(quoteChar=<js>"'"</js>)
+ <ja>@RdfConfig</ja>(rdfxml_tab=<js>"5"</js>,
addRootProperty=<js>"true"</js>)
+ <jk>public class</jk> MyAnnotatedClass {...}
+
+ <jc>// Create a serializer configured using annotations.</jc>
+ JsonSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .applyAnnotations(MyAnnotatedClass.<jk>class</jk>)
+ .build();
+ </p>
+ <p>
+ The Marshalling API also supports UON (URL-Encoded Object
Notation).
+ It allows JSON-like data structures (OBJECT, ARRAY, NUMBER,
BOOLEAN, STRING, NULL) in HTTP constructs (query parameters, form parameters,
+ headers, URL parts) without violating RFC2396.
+ This allows POJOs to be converted directly into these HTTP
constructs which is not possible in other languages such as JSON.
+ </p>
+ <p class='bcode w800'>
+ (
+ id=1,
+ name=<js>'John+Smith'</js>,
+ uri=<js>http://sample/addressBook/person/1</js>,
+ addressBookUri=<js>http://sample/addressBook</js>,
+ birthDate=<js>1946-08-12T00:00:00Z</js>,
+ addresses=@(
+ (
+
uri=<js>http://sample/addressBook/address/1</js>,
+
personUri=<js>http://sample/addressBook/person/1</js>,
+ id=<js>1</js>,
+ street=<js>'100+Main+Street'</js>,
+ city=<js>Anywhereville</js>,
+ state=<js>NY</js>,
+ zip=<js>12345</js>,
+ isCurrent=<jk>true</jk>
+ )
+ )
+ )
+ </p>
+ <p>
+ See {@doc UonDetails} for more information.
+ </p>
+ <p>
+ The Marshalling API also supports schema-based OpenAPI
serialization.
+ It allows HTTP parts to be marshalled to-and-from POJOs based
on OpenAPI schema definitions.
+ </p>
+ <p class='bpcode w800'>
+ <jk>import static</jk> org.apache.juneau.httpart.HttpPartSchema.*;
+
+ <jc>// Schema - Pipe-delimited list of comma-delimited longs.</jc>
+ HttpPartSchema <jv>schema</jv> = <jsm>tArrayPipes</jsm>().items(
+ <jsm>tArrayCsv</jsm>().items(
+ <jsm>tInt64</jsm>()
+ )
+ ).build();
+
+ <jc>// Our value to serialize</jc>
+ Object <jv>value</jv> = <jk>new long</jk>[][]{{1,2,3},{4,5,6},{7,8,9}};
+
+ <jc>// Produces "1,2,3|4,5,6|7,8,9"</jc>
+ String <jv>output</jv> =
OpenApiSerializer.<jsf>DEFAULT</jsf>.serialize(HttpPartType.<jsf>HEADER</jsf>,
<jv>schema</jv>, <jv>value</jv>);
+ </p>
+ <p>
+ Schema-based serialization is used heavily in both the server
and client REST APIs.
+ </p>
+ <p class='bcode w800'>
+ <jc>// REST server method with HTTP parts using schema
validation.</jc>jc>
+ <ja>@RestGet</ja>
+ <jk>public void</jk> doGet(
+ <ja>@Query</ja>(name=<js>"myParam"</js>, min=1, max=32)
<jk>int</jk> <jv>myParam</jv>,
+ <ja>@Header</ja>(<js>"MyHeader"</js>, pattern=<js>"foo.*"</js>)
String <jv>p2</jv>
+ ) {...}
+ </p>
+
+
+
+
+ <p>
+ Lots of shortcuts are provided throughout the API to simplify
tasks, and the APIs are often useful for debugging and logging purposes as well:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Create JSON strings from scratch using fluent-style code.</jc>
+ String <jv>jsonObject</jv> = <jk>new</jk>
OMap().append(<js>"foo"</js>,<js>"bar"</js>).toString();
+ String <jv>jsonArray</jv> = <jk>new</jk>
OList().append(<js>"foo"</js>).append(123).append(<jk>null</jk>).toString();
+
+ <jc>// Create maps and beans directly from JSON.</jc>
+ Map<String,Object> <jv>myMap</jv> = <jk>new</jk>
OMap(<js>"{foo:'bar'}"</js>);
+ List<Object> <jv>myList</jv> = <jk>new</jk>
OList(<js>"['foo',123,null]"</js>);
+
+ <jc>// Load a POJO from a JSON file.</jc>
+ MyPojo <jv>myPojo</jv> =
JsonParser.<jsf>DEFAULT</jsf>.parse(<jk>new</jk> File(<js>"myPojo.json"</js>));
+
+ <jc>// Serialize POJOs and ignore exceptions (great for logging)</jc>
+ String <jv>json</jv> =
SimpleJson.<jsf>DEFAULT</jsf>.toString(<jv>myPojo</jv>);
+
+ <jc>// Dump a POJO to the console.</jc>
+ SimpleJson.<jsf>DEFAULT</jsf>.println(<jv>myPojo</jv>);
+
+ String <jv>message</jv> = <jk>new</jk> StringMessage(<js>"My POJO in
{0}: {1}"</js>, <js>"JSON"</js>, <jk>new</jk>
StringObject(<jv>myPojo</jv>)).toString();
+
+ <jc>// Create a 'REST-like' wrapper around a POJO.</jc>
+ <jc>// Allows you to manipulate POJO trees using URIs and
GET/PUT/POST/DELETE commands.</jc>
+ PojoRest <jv>pojoRest</jv> = <jk>new</jk> PojoRest(<jv>myPojo</jv>);
+ <jv>pojoRest</jv>.get(String.<jk>class</jk>,
<js>"addressBook/0/name"</js>);
+ <jv>pojoRest</jv>.put(<js>"addressBook/0/name"</js>, <js>"John
Smith"</js>);
+ </p>
+</div>
+<h5 class='toc'>Serializer and Parser Groups</h5>
+<div class='topic'>
+ <p>
+ <code>SerializerGroup</code> and <code>ParserGroup</code>
classes allow serializers and parsers
+ to be retrieved by W3C-compliant HTTP <code>Accept</code> and
<code>Content-Type</code> values:
+ </p>
+ <p class='bcode w800'>
+ <jc>// Construct a new serializer group with configuration parameters
that get applied to all serializers.</jc>
+ SerializerGroup <jv>serializerGroup</jv> = SerializerGroup
+ .<jsm>create</jsm>()
+ .add(JsonSerializer.<jk>class</jk>,
UrlEncodingSerializer.<jk>class</jk>);
+ .forEach(<jv>x</jv> ->
<jv>x</jv>.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>))
+ .forEachWS(<jv>x</jv> -> <jv>x</jv>.useWhitespace())
+ .build();
+
+ <jc>// Find the appropriate serializer by Accept type and serialize our
POJO to the specified writer.</jc>
+ <jc>// Fully RFC2616 compliant.</jc>
+ <jv>serializerGroup</jv>
+ .getSerializer(<js>"text/invalid, text/json;q=0.8,
text/*;q:0.6, *\/*;q=0.0"</js>)
+ .serialize(<jv>person</jv>, <jv>myWriter</jv>);
+
+ <jc>// Construct a new parser group with configuration parameters that
get applied to all parsers.</jc>
+ ParserGroup <jv>parserGroup</jv> = ParserGroup
+ .<jsm>create</jsm>()
+ .add(JsonParser.<jk>class</jk>,
UrlEncodingParser.<jk>class</jk>);
+ .forEach(<jv>x</jv> ->
<jv>x</jv>.swaps(CalendarSwap.ISO8601DT.<jk>class</jk>))
+ .build();
+
+ Person <jv>person</jv> = <jv>parserGroup</jv>
+ .getParser(<js>"text/json"</js>)
+ .parse(<jv>myReader</jv>, Person.<jk>class</jk>);
+ </p>
+</div>
+<h5 class='toc'>SVL Variables</h5>
+<div class='topic'>
+ <p>
+ The <code>org.apache.juneau.svl</code> package defines an API
for a language called "Simple Variable Language".
+ In a nutshell, Simple Variable Language (or SVL) is text that
contains variables of the form
+ <js>"$varName{varKey}"</js>.
+ </p>
+ <p>
+ Variables can be recursively nested within the varKey (e.g.
<js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>).
+ Variables can also return values that themselves contain more
variables.
+ </p>
+ <p class='bcode w800'>
+ <jc>// Use the default variable resolver to resolve a string that
contains $S (system property) variables</jc>
+ String <jv>myProperty</jv> =
VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"The Java home directory is
$S{java.home}"</js>);
+ </p>
+ <p>
+ The SVL variables are used widely throughout various
annotations defined in Juneau allowing many features to be configured
+ via external sources such as configuration files or environment
variables/system properties. The SVL APIs are
+ extensible allowing for the addition of new types of variables.
+ </p>
+
+ </div>
+
+ <!--
=======================================================================================================
-->
+ <!-- === JUNEAU-MARSHALL-RDF
===============================================================================
-->
+ <!--
=======================================================================================================
-->
+
+ <h5 class='toc' id='juneau-marshall-rdf'>juneau-marshall-rdf</h5>
+ <div class='topic'>
+ <h5 class='figure'>Maven Dependency</h5>
+ <p class='bcode w500'>
+ <xt><dependency></xt>
+
<xt><groupId></xt>org.apache.juneau<xt></groupId></xt>
+
<xt><artifactId></xt>juneau-marshall-rdf<xt></artifactId></xt>
+ <xt><version></xt>8.2.0<xt></version></xt>
+ <xt></dependency></xt>
+ </p>
+
+ <h5 class='figure'>Java Library</h5>
+ <p class='bcode w500'>
+ juneau-marshall-rdf-8.2.0.jar
+ </p>
+
+ <h5 class='figure'>OSGi Module</h5>
+ <p class='bcode w500'>
+ org.apache.juneau.marshall.rdf_8.2.0.jar
+ </p>
+
+ <p>
+ The <code>juneau-marshall-rdf</code> library provides
additional serializers and parsers for RDF.
+ These rely on the Apache Jena library to provide
support for the following languages:
+ </p>
+ <ul>
+ <li>RDF/XML
+ <li>RDF/XML-Abbrev
+ <li>N-Triple
+ <li>Turtle
+ <li>N3
+ </ul>
+ <p>
+ The serializers and parsers work identically to those
in <code>juneau-marshall</code>, but are
+ packaged separately so that you don't need to pull in
the Jena dependency unless you need it.
+ </p>
+
+ <p class='bcode w800'>
+ <jc>// A simple bean</jc>
+ <jk>public class</jk> Person {
+ <jk>public</jk> String <jf>name</jf> = <js>"This is RDF
format."</js>;
+ <jk>public</jk> String <jf>id</jf> = <js>"foo"</js>;
+ }
+
+ <jc>// Serialize a bean to various RDF languages</jc>
+ Person <jv>person</jv> = <jk>new</jk> Person();
+
+ <jc>// Produces:
+ // <rdf:RDF
+ // xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ // xmlns:jp="http://www.apache.org/juneaubp/"
+ // xmlns:j="http://www.apache.org/juneau/">
+ // <rdf:Description>
+ // <jp:name>This is RDF format.</jp:name>
+ // <jp:id>foo</jp:id>
+ // </rdf:Description>
+ // </rdf:RDF></jc>
+ String <jv>rdfXml</jv> =
RdfXmlAbbrevSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
+
+ <jc>// Produces:
+ // @prefix jp: <http://www.apache.org/juneaubp/> .
+ // @prefix j: <http://www.apache.org/juneau/> .
+ // [] jp:id "foo" ;
+ // jp:name "This is RDF format." .</jc>
+ String <jv>rdfN3</jv> =
N3Serializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
+
+ <jc>// Produces:
+ // _:A3bf53c85X3aX157cf407e2dX3aXX2dX7ffd
<http://www.apache.org/juneaubp/name> "This is RDF format." .
+ // _:A3bf53c85X3aX157cf407e2dX3aXX2dX7ffd
<http://www.apache.org/juneaubp/age> "rdf" .</jc>
+ String <jv>rdfNTriple</jv> =
NTripleSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
+
+ <jc>// Produces:
+ // @prefix jp: <http://www.apache.org/juneaubp/> .
+ // @prefix j: <http://www.apache.org/juneau/> .
+ // [] jp:id "foo" ;
+ // jp:name "This is RDF format." .</jc>
+ String <jv>rdfTurtle</jv> =
TurtleSerializer.<jsf>DEFAULT</jsf>.serialize(<jv>person</jv>);
+ </p>
+
+ <ul class='seealso'>
+ <li><a class='doclink'
href='http://juneau.apache.org/site/apidocs-8.2.0/overview-summary.html#juneau-marshall-rdf'>juneau-marshall-rdf</a>
+ </ul>
+ </div>
+</div><!-- END: 1.1 - Overview.juneau-core -->
+
+<!--
====================================================================================================
-->
+
+<h3 class='topic' onclick='toggle(this)'><a href='#Overview.juneau-rest'
id='Overview.juneau-rest'>1.2 - juneau-rest</a><span class='update'>created:
<b>9.0.0</b></span></h3>
+<div class='topic'><!-- START: 1.2 - Overview.juneau-rest -->
+<div>
+</div>
+</div><!-- END: 1.2 - Overview.juneau-rest -->
+
+<!--
====================================================================================================
-->
+
+<h3 class='topic' onclick='toggle(this)'><a href='#Overview.juneau-examples'
id='Overview.juneau-examples'>1.3 - juneau-examples</a><span
class='update'>created: <b>9.0.0</b></span></h3>
+<div class='topic'><!-- START: 1.3 - Overview.juneau-examples -->
+<div>
+</div>
+</div><!-- END: 1.3 - Overview.juneau-examples -->
+</div><!-- END: 1 - Overview -->
<!--
====================================================================================================
-->
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt
b/juneau-doc/src/main/javadoc/resources/docs.txt
index 5f0fd1e..33f405e 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -16,7 +16,6 @@ BeanpAnnotation =
#juneau-marshall.JavaBeansSupport.BeanpAnnotation, Overview >
BestPractices = #juneau-marshall.BestPractices, Overview > juneau-marshall >
Best Practices
BypassSerialization = #juneau-marshall.JavaBeansSupport.BypassSerialization,
Overview > juneau-marshall > Java Beans Support > Bypass Serialization using
Readers and InputStreams
ClosingConfigs = #juneau-config.ClosingConfigs, Overview > juneau-config >
Closing Configs
-Components = #Introduction.Components, Overview > Introduction > Components
ConfigArrays = #juneau-config.ConfigEntryTypes.ConfigArrays, Overview >
juneau-config > Entry Types > Arrays
ConfigBinaryData = #juneau-config.ConfigEntryTypes.ConfigBinaryData, Overview
> juneau-config > Entry Types > Binary Data
ConfigBulkSettingValues =
#juneau-config.ConfigSettingValues.ConfigBulkSettingValues, Overview >
juneau-config > Setting Values > Setting Values in Bulk
@@ -98,7 +97,6 @@ ExtSwaggerResponsesObject =
https://swagger.io/specification/v2#responsesObject,
ExtSwaggerSchemaObject = https://swagger.io/specification/v2#schemaObject,
Swagger Schema Object
ExtSwaggerSecuritySchemeObject =
https://swagger.io/specification/v2#securitySchemeObject, Swagger
SecurityScheme Object
ExtSwaggerTagObject = https://swagger.io/specification/v2#tagObject, Swagger
Tag Object
-Features = #Introduction.Features, Overview > Introduction > Features
FluentAssertions = #juneau-marshall.FluentAssertions, Overview >
juneau-marshall > Fluent Assertions
Generics = #juneau-marshall.Generics, Overview > juneau-marshall > Generics
Glossaries = #Glossaries, Overview > Glossaries
@@ -118,7 +116,6 @@ HtmlSerializers =
#juneau-marshall.HtmlDetails.HtmlSerializers, Overview > junea
HttpPartParsers = #juneau-marshall.HttpPartParsers, Overview > juneau-marshall
> HTTP Part Parsers
HttpPartSerializers = #juneau-marshall.HttpPartSerializers, Overview >
juneau-marshall > HTTP Part Serializers
InterfaceFilters = #juneau-marshall.JavaBeansSupport.InterfaceFilters,
Overview > juneau-marshall > Java Beans Support > Interface Filters
-Introduction = #Introduction, Overview > Introduction
JacksonComparison = #juneau-marshall.JacksonComparison, Overview >
juneau-marshall > Comparison with Jackson
JavaBeansSupport = #juneau-marshall.JavaBeansSupport, Overview >
juneau-marshall > Java Beans Support
JaxrsBaseProvider = #juneau-rest-server-jaxrs.JaxrsBaseProvider, Overview >
juneau-rest-server-jaxrs > Juneau JAX-RS Provider
@@ -166,6 +163,7 @@ OpenApiDetails = #juneau-marshall.OpenApiDetails, Overview
> juneau-marshall > O
OpenApiMethodology = #juneau-marshall.OpenApiDetails.OpenApiMethodology,
Overview > juneau-marshall > OpenAPI Details > OpenAPI Methodology
OpenApiParsers = #juneau-marshall.OpenApiDetails.OpenApiParsers, Overview >
juneau-marshall > OpenAPI Details > OpenAPI Parsers
OpenApiSerializers = #juneau-marshall.OpenApiDetails.OpenApiSerializers,
Overview > juneau-marshall > OpenAPI Details > OpenAPI Serializers
+Overview = #Overview, Overview > Overview
ParentPropertyAnnotation =
#juneau-marshall.JavaBeansSupport.ParentPropertyAnnotation, Overview >
juneau-marshall > Java Beans Support > @ParentProperty Annotation
Parsers = #juneau-marshall.Parsers, Overview > juneau-marshall > Parsers
ParsingIntoGenericModels = #juneau-marshall.ParsingIntoGenericModels, Overview
> juneau-marshall > Parsing into Generic Models
@@ -358,7 +356,9 @@ XmlNamespaces = #juneau-marshall.XmlDetails.XmlNamespaces,
Overview > juneau-mar
XmlParsers = #juneau-marshall.XmlDetails.XmlParsers, Overview >
juneau-marshall > XML Details > XML Parsers
XmlSerializers = #juneau-marshall.XmlDetails.XmlSerializers, Overview >
juneau-marshall > XML Details > XML Serializers
juneau-config = #juneau-config, Overview > juneau-config
+juneau-core = #Overview.juneau-core, Overview > Overview > juneau-core
juneau-dto = #juneau-dto, Overview > juneau-dto
+juneau-examples = #Overview.juneau-examples, Overview > Overview >
juneau-examples
juneau-examples-core = #juneau-examples-core, Overview > juneau-examples-core
juneau-examples-rest = #juneau-examples-rest, Overview > juneau-examples-rest
juneau-examples-rest-jetty = #juneau-examples-rest-jetty, Overview >
juneau-examples-rest-jetty
@@ -368,6 +368,7 @@ juneau-marshall-rdf = #juneau-marshall-rdf, Overview >
juneau-marshall-rdf
juneau-microservice-core = #juneau-microservice-core, Overview >
juneau-microservice-core
juneau-microservice-jetty = #juneau-microservice-jetty, Overview >
juneau-microservice-jetty
juneau-petstore = #juneau-petstore, Overview > juneau-pestore
+juneau-rest = #Overview.juneau-rest, Overview > Overview > juneau-rest
juneau-rest-client = #juneau-rest-client, Overview > juneau-rest-client
juneau-rest-mock = #juneau-rest-mock, Overview > juneau-rest-mock
juneau-rest-server = #juneau-rest-server, Overview > juneau-rest-server
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index 580b2f1..ac24a55 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -13,10 +13,11 @@
***************************************************************************************************************************/
-->
<ol class='toc'>
- <li><p class='toc2'><a class='doclink'
href='{OVERVIEW_URL}#Introduction'>Introduction</a></p>
+ <li><p class='toc2'><a class='doclink'
href='{OVERVIEW_URL}#Overview'>Overview</a></p>
<ol>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#Introduction.Features'>Features</a><span
class='update'>updated: 8.1.0</span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#Introduction.Components'>Components</a></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#Overview.juneau-core'>juneau-core</a><span
class='update'>created: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#Overview.juneau-rest'>juneau-rest</a><span
class='update'>created: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#Overview.juneau-examples'>juneau-examples</a><span
class='update'>created: <b>9.0.0</b></span></p>
</ol>
<li><p class='toc2'><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall'>juneau-marshall</a></p>
<ol>
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/package-info.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/package-info.java
new file mode 100644
index 0000000..d22e557
--- /dev/null
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/package-info.java
@@ -0,0 +1,18 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+
***************************************************************************************************************************/
+
+/**
+ * REST Client Assertions
+ */
+package org.apache.juneau.rest.client.assertion;
\ No newline at end of file
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/package-info.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/package-info.java
new file mode 100644
index 0000000..c9664d1
--- /dev/null
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/package-info.java
@@ -0,0 +1,18 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+
***************************************************************************************************************************/
+
+/**
+ * REST Method Argument Beans
+ */
+package org.apache.juneau.rest.args;
\ No newline at end of file
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/package-info.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/package-info.java
new file mode 100644
index 0000000..f08a80d
--- /dev/null
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/package-info.java
@@ -0,0 +1,18 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+
***************************************************************************************************************************/
+
+/**
+ * REST Assertions
+ */
+package org.apache.juneau.rest.assertions;
\ No newline at end of file
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/package-info.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/package-info.java
new file mode 100644
index 0000000..9dd4296
--- /dev/null
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/package-info.java
@@ -0,0 +1,18 @@
+/***************************************************************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+
***************************************************************************************************************************/
+
+/**
+ * REST Logging API
+ */
+package org.apache.juneau.rest.logging;
\ No newline at end of file
diff --git a/launches/juneau-build-javadoc.sh b/launches/juneau-build-javadoc.sh
index c91462f..ff4c7ec 100755
--- a/launches/juneau-build-javadoc.sh
+++ b/launches/juneau-build-javadoc.sh
@@ -30,6 +30,7 @@ mkdir ../juneau-website/content/site/apidocs-$JUNEAU_VERSION
cp -r ./target/site/apidocs/*
../juneau-website/content/site/apidocs-$JUNEAU_VERSION
find ../juneau-website/content/site/apidocs-$JUNEAU_VERSION -type f -name
'*.html' -exec sed -i '' s/-SNAPSHOT// {} +
+tput bel
echo
'*******************************************************************************'
echo '***** SUCCESS
*****************************************************************'
echo
'*******************************************************************************'