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 b0d6392 Javadocs
b0d6392 is described below
commit b0d639295d31f62874526ae87a22812204f20cec
Author: JamesBognar <[email protected]>
AuthorDate: Sat Oct 30 15:05:02 2021 -0400
Javadocs
---
juneau-doc/docs/Topics/01.Overview.html | 4 +-
.../docs/Topics/01.Overview/01.CoreOverview.html | 22 +-
.../docs/Topics/01.Overview/02.DtoOverview.html | 10 +-
.../docs/Topics/01.Overview/03.ConfigOverview.html | 2 +-
.../docs/Topics/01.Overview/04.RestOverview.html | 2 +-
.../Topics/01.Overview/05.RestServerOverview.html | 12 +-
.../Topics/01.Overview/06.RestClientOverview.html | 4 +-
.../12.DynamicallyAppliedAnnotations.html | 18 +-
.../02.juneau-marshall/13.BeanDictionaries.html | 17 +-
.../Topics/02.juneau-marshall/14.VirtualBeans.html | 6 +-
.../Topics/02.juneau-marshall/15.Recursion.html | 12 +-
.../17.ReadingContinuousStreams.html | 10 +-
.../02.juneau-marshall/18.MarshallingUris.html | 104 ++++-----
.../02.juneau-marshall/19.JacksonComparison.html | 9 +-
juneau-doc/src/main/javadoc/overview.html | 258 ++++++++++-----------
.../src/main/javadoc/resources/fragments/toc.html | 24 +-
.../src/main/javadoc/resources/juneau-doc.css | 59 +++--
17 files changed, 274 insertions(+), 299 deletions(-)
diff --git a/juneau-doc/docs/Topics/01.Overview.html
b/juneau-doc/docs/Topics/01.Overview.html
index aacfcc0..4493b37 100644
--- a/juneau-doc/docs/Topics/01.Overview.html
+++ b/juneau-doc/docs/Topics/01.Overview.html
@@ -19,7 +19,7 @@
<!-- === ABOUT
=================================================================================================
-->
<!--
===========================================================================================================
-->
-<h5 class='toc'>About</h5>
+<h5 class='topic'>About</h5>
<p>
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.
@@ -243,7 +243,7 @@
<!-- === FEATURES
==============================================================================================
-->
<!--
===========================================================================================================
-->
-<h5 class='toc'>Features</h5>
+<h5 class='topic'>Features</h5>
<div class='topic'>
<ul class='spaced-list'>
<li>
diff --git a/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html
b/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html
index fac6305..c3c0ca3 100644
--- a/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html
+++ b/juneau-doc/docs/Topics/01.Overview/01.CoreOverview.html
@@ -15,7 +15,7 @@
{title:'Core Overview', created:'9.0.0'}
-<h5 class='toc'>Marshalling APIs</h5>
+<h5 class='topic'>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
@@ -91,7 +91,7 @@
</ul>
</div>
-<h5 class='toc'>Marshaller Builders</h5>
+<h5 class='topic'>Marshaller Builders</h5>
<div class='topic'>
<p>
Serializers and parsers are builder-based using fluent methods
allowing you to quickly create, clone, and modify them
@@ -147,7 +147,7 @@
</ul>
</div>
-<h5 class='toc'>Bean Annotations</h5>
+<h5 class='topic'>Bean Annotations</h5>
<div class='topic'>
<p>
Beans and POJO classes, methods, fields, and constructors can
also be annotated with a variety of annotations to customize how they are
marshalled:
@@ -172,7 +172,7 @@
</ul>
</div>
-<h5 class='toc'>Configuration Annotations</h5>
+<h5 class='topic'>Configuration Annotations</h5>
<div class='topic'>
<p>
Serializers and parsers can also be configured using
annotations.
@@ -216,7 +216,7 @@
</ul>
</div>
-<h5 class='toc'>Simplified JSON Marshalling</h5>
+<h5 class='topic'>Simplified JSON Marshalling</h5>
<div class='topic'>
<p>
The {@link oaj.json.SimpleJsonSerializer} class can be used to
serialized POJOs into Simplified JSON notation.
@@ -276,7 +276,7 @@
</ul>
</div>
-<h5 class='toc'>UON Marshalling</h5>
+<h5 class='topic'>UON Marshalling</h5>
<div class='topic'>
<p>
The Marshalling API also supports UON (URL-Encoded Object
Notation).
@@ -309,7 +309,7 @@
<li class='link'>{@doc UonDetails UON Details} for more
information.
</ul>
</div>
-<h5 class='toc'>OpenAPI Marshalling</h5>
+<h5 class='topic'>OpenAPI Marshalling</h5>
<div class='topic'>
<p>
The Marshalling API also supports schema-based OpenAPI
serialization.
@@ -348,7 +348,7 @@
</ul>
</div>
-<h5 class='toc'>OMap/OList</h5>
+<h5 class='topic'>OMap/OList</h5>
<div class='topic'>
<p>
The {@link oaj.collections.OMap} and {@link
oaj.collections.OList} collections classes allow you
@@ -377,7 +377,7 @@
</ul>
</div>
-<h5 class='toc'>Serializer and Parser Sets</h5>
+<h5 class='topic'>Serializer and Parser Sets</h5>
<div class='topic'>
<p>
<code>SerializerSet</code> and <code>ParserSet</code> classes
allow serializers and parsers
@@ -414,7 +414,7 @@
</ul>
</div>
-<h5 class='toc'>SVL Variables</h5>
+<h5 class='topic'>SVL Variables</h5>
<div class='topic'>
<p>
The {@link oaj.svl} package defines an API for a language
called "Simple Variable Language".
@@ -440,7 +440,7 @@
</ul>
</div>
-<h5 class='toc'>Assertions API</h5>
+<h5 class='topic'>Assertions API</h5>
<div class='topic'>
<p>
The {@link oaj.assertions} package in Juneau is a powerful API
for performing fluent style assertions.
diff --git a/juneau-doc/docs/Topics/01.Overview/02.DtoOverview.html
b/juneau-doc/docs/Topics/01.Overview/02.DtoOverview.html
index 8b367a8..c8aa4c3 100644
--- a/juneau-doc/docs/Topics/01.Overview/02.DtoOverview.html
+++ b/juneau-doc/docs/Topics/01.Overview/02.DtoOverview.html
@@ -15,7 +15,7 @@
{title:'DTO Library Overview', created:'9.0.0'}
-<h5 class='toc'>DTO Libraries</h5>
+<h5 class='topic'>DTO Libraries</h5>
<div class='topic'>
<p>
The <c>juneau-dto</c> library contains several predefined POJOs
for generating commonly-used document types that
@@ -23,7 +23,7 @@
</p>
</div>
-<h5 class='toc'>HTML5</h5>
+<h5 class='topic'>HTML5</h5>
<div class='topic'>
<p>
The Juneau HTML5 DTOs are simply beans with fluent-style
setters that allow you to quickly construct HTML
@@ -70,7 +70,7 @@
</ul>
</div>
-<h5 class='toc'>ATOM</h5>
+<h5 class='topic'>ATOM</h5>
<div class='topic'>
<p>
The Juneau ATOM feed DTOs are simply beans with fluent-style
setters.
@@ -124,7 +124,7 @@
</ul>
</div>
-<h5 class='toc'>Swagger</h5>
+<h5 class='topic'>Swagger</h5>
<div class='topic'>
<p>
The Juneau Swagger DTOs are simply beans with fluent-style
setters that allow you to quickly construct
@@ -185,7 +185,7 @@
</ul>
</div>
-<h5 class='toc'>SwaggerUI</h5>
+<h5 class='topic'>SwaggerUI</h5>
<div class='topic'>
<p>
The {@link oaj.dto.swagger.ui.SwaggerUI} class is a DTO class
for generating Swagger user interfaces
diff --git a/juneau-doc/docs/Topics/01.Overview/03.ConfigOverview.html
b/juneau-doc/docs/Topics/01.Overview/03.ConfigOverview.html
index 6a49505..7b1aa7f 100644
--- a/juneau-doc/docs/Topics/01.Overview/03.ConfigOverview.html
+++ b/juneau-doc/docs/Topics/01.Overview/03.ConfigOverview.html
@@ -15,7 +15,7 @@
{title:'Config API Overview', created:'9.0.0'}
-<h5 class='toc'>Config API</h5>
+<h5 class='topic'>Config API</h5>
<div class='topic'>
<p>
The <c>juneau-config</c> library contains a powerful API for
creating and using INI-style config files.
diff --git a/juneau-doc/docs/Topics/01.Overview/04.RestOverview.html
b/juneau-doc/docs/Topics/01.Overview/04.RestOverview.html
index db72e41..a7a0a83 100644
--- a/juneau-doc/docs/Topics/01.Overview/04.RestOverview.html
+++ b/juneau-doc/docs/Topics/01.Overview/04.RestOverview.html
@@ -15,7 +15,7 @@
{title:'REST Overview', created:'9.0.0'}
-<h5 class='toc'>REST Server/Client APIs</h5>
+<h5 class='topic'>REST Server/Client APIs</h5>
<div class='topic'>
<p>
The {@doc juneau-rest-server juneau-rest-server} and {@doc
juneau-rest-client juneau-rest-client} libraries
diff --git a/juneau-doc/docs/Topics/01.Overview/05.RestServerOverview.html
b/juneau-doc/docs/Topics/01.Overview/05.RestServerOverview.html
index 8012dab..d53b26e 100644
--- a/juneau-doc/docs/Topics/01.Overview/05.RestServerOverview.html
+++ b/juneau-doc/docs/Topics/01.Overview/05.RestServerOverview.html
@@ -15,7 +15,7 @@
{title:'REST Server Overview', created:'9.0.0'}
-<h5 class='toc'>@Rest-Annotated Resources</h5>
+<h5 class='topic'>@Rest-Annotated Resources</h5>
<div class='topic'>
<p>
A REST resource is simply a Java class annotated with {@link
oajr.annotation.Rest}.
@@ -72,7 +72,7 @@
</ul>
</div>
-<h5 class='toc'>REST Children</h5>
+<h5 class='topic'>REST Children</h5>
<div class='topic'>
<p>
Child Resources are REST servlets or objects that are linked to
parent resources through the
@@ -111,7 +111,7 @@
</ul>
</div>
-<h5 class='toc'>REST Group Pages</h5>
+<h5 class='topic'>REST Group Pages</h5>
<div class='topic'>
<p>
The {@link oajr.BasicRestServletGroup} class provides a default
"router" page for
@@ -154,7 +154,7 @@
</ul>
</div>
-<h5 class='toc'>REST Resource Methods</h5>
+<h5 class='topic'>REST Resource Methods</h5>
<div class='topic'>
<p>
The real power behind the REST server API is the ability to
define Java methods as REST endpoints.
@@ -229,7 +229,7 @@
</ul>
</div>
-<h5 class='toc'>Deploying as a Servlet</h5>
+<h5 class='topic'>Deploying as a Servlet</h5>
<div class='topic'>
<p>
The {@link oajr.RestServlet} class is the entry point for your
REST resources.
@@ -251,7 +251,7 @@
</ul>
</div>
-<h5 class='toc'>Deploying in Spring Boot</h5>
+<h5 class='topic'>Deploying in Spring Boot</h5>
<div class='topic'>
<p>
The {@link oajr.springboot.SpringRestServlet} class is
typically entry point for your REST resources
diff --git a/juneau-doc/docs/Topics/01.Overview/06.RestClientOverview.html
b/juneau-doc/docs/Topics/01.Overview/06.RestClientOverview.html
index a17ee28..516868d 100644
--- a/juneau-doc/docs/Topics/01.Overview/06.RestClientOverview.html
+++ b/juneau-doc/docs/Topics/01.Overview/06.RestClientOverview.html
@@ -15,7 +15,7 @@
{title:'REST Client Overview', created:'9.0.0'}
-<h5 class='toc'>REST Client</h5>
+<h5 class='topic'>REST Client</h5>
<div class='topic'>
<p>
Built upon the feature-rich Apache HttpClient library, the
Juneau RestClient API adds support for fluent-style
@@ -39,7 +39,7 @@
</ul>
</div>
-<h5 class='toc'>REST Testing Framework</h5>
+<h5 class='topic'>REST Testing Framework</h5>
<div class='topic'>
<p>
The {@link oajr.mock.MockRestClient} class is used for
performing serverless unit testing of {@link oajr.annotation.Rest
@Rest}-annotated
diff --git
a/juneau-doc/docs/Topics/02.juneau-marshall/12.DynamicallyAppliedAnnotations.html
b/juneau-doc/docs/Topics/02.juneau-marshall/12.DynamicallyAppliedAnnotations.html
index e8f80f6..e240183 100644
---
a/juneau-doc/docs/Topics/02.juneau-marshall/12.DynamicallyAppliedAnnotations.html
+++
b/juneau-doc/docs/Topics/02.juneau-marshall/12.DynamicallyAppliedAnnotations.html
@@ -13,7 +13,7 @@
***************************************************************************************************************************/
-->
-{title:'Dynamically Applied Annotations', created:'8.1.3'}
+{title:'Dynamically Applied Annotations', created:'8.1.3', updated:'9.0.0'}
<p>
In the section {@doc Transforms}, you were introduced to annotations
that can be applied to bean
@@ -26,17 +26,21 @@
<jk>public class</jk> Address { ... }
</p>
<p>
- An alternate way of applying these annotations is using the
<ja>@XConfig</ja> annotations introduced in section
- {@doc ConfigurableAnnotations}.
+ An alternate way of applying these annotations is to attach them to
unrelated classes and methods and then
+ tell your serializer or parser where to find them.
</p>
<p class='bpcode w800'>
<jc>// Unannotated class.</jc>
<jk>public class</jk> Address { ... }
- <ja>@Bean</ja>(on=<js>"Address"</js>,
properties=<js>"street,city,state"</js>)
+ <ja>@Bean</ja>(onClass=Address.<jk>class</jk>,
properties=<js>"street,city,state"</js>)
<jk>public static class</jk> DummyClass {}
- WriterSerializer <jv>serializer</jv> =
JsonSerializer.<jsm>create</jsm>().applyAnnotations(DummyClass.<jk>class</jk>).build();
+ WriterSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .applyAnnotations(DummyClass.<jk>class</jk>)
+ .build();
+
String <jv>json</jv> =
<jv>serializer</jv>.toString(<jv>addressBean</jv>);
</p>
<p>
@@ -50,11 +54,11 @@
</p>
<p class='bpcode w800'>
<ja>@RestGet</ja>
- <ja>@Bean</ja>(on=<js>"Address"</js>,
properties=<js>"street,city,state"</js>)
+ <ja>@Bean</ja>(onClass=Address.<jk>class</jk>,
properties=<js>"street,city,state"</js>)
<jk>public</jk> List<Address> getAddresses() {}
</p>
<p>
- Any Juneau annotation that has an <c>on()</c> method can be applied
dynamically this way.
+ Any Juneau annotation that has an <c>on()/onClass()</c> method can be
applied dynamically this way.
These include:
</p>
<ul>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries.html
b/juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries.html
index 8d614dd..893e8bb 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/13.BeanDictionaries.html
@@ -13,7 +13,7 @@
***************************************************************************************************************************/
-->
-{title:'Bean Names and Dictionaries'}
+{title:'Bean Names and Dictionaries', updated:'9.0.0'}
<p>
While parsing into beans, Juneau attempts to determine the class types
of bean properties through
@@ -90,8 +90,6 @@
- On individual bean properties through the annotation.
<li class='ja'>{@link oaj.annotation.Bean#dictionary()
Bean(dictionary)}
- On all properties on a bean and all subclasses.
- <li class='jf'>{@del oaj.BeanContext#BEAN_beanDictionary}
- - Configuration property on serializers and parsers.
<li class='jm'>{@link oaj.BeanContext.Builder#beanDictionary(Class...)}
- Builder method on serializers and parsers.
</ul>
@@ -111,13 +109,6 @@
.dictionary(Foo.<jk>class</jk>, Bar.<jk>class</jk>)
.build();
- <jc>// Same, but use property.</jc>
- ReaderParser <jv>parser</jv> = JsonParser
- .<jsm>create</jsm>()
- .addTo(<jsf>BEAN_beanDictionary</jsf>, Foo.<jk>class</jk>)
- .addTo(<jsf>BEAN_beanDictionary</jsf>, Bar.<jk>class</jk>)
- .build();
-
<jc>// Use the predefined HTML5 bean dictionary which is a
BeanDictionaryList.</jc>
ReaderParser <jv>parser</jv> = HtmlParser
.<jsm>create</jsm>()
@@ -130,8 +121,6 @@
<ul class='javatree'>
<li class='ja'>{@link oaj.annotation.Bean#typePropertyName()
Bean(typePropertyName)}
- On individual beans through the annotation.
- <li class='jf'>{@del oaj.BeanContext#BEAN_typePropertyName}
- - Configuration property on serializers and parsers.
<li class='jm'>{@link oaj.BeanContext.Builder#typePropertyName(String)}
- Builder method on serializers and parsers.
</ul>
@@ -165,6 +154,6 @@
<div class='info'>
Serialized type names are DISABLED by default.
They must be enabled on the serializer using the
- {@del oaj.serializer.Serializer#SERIALIZER_addBeanTypes}
- configuration property.
+ {@link oaj.serializer.Serializer.Builder#addBeanTypes()}
+ setting.
</div>
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/14.VirtualBeans.html
b/juneau-doc/docs/Topics/02.juneau-marshall/14.VirtualBeans.html
index 5342f2a..6624771 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/14.VirtualBeans.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/14.VirtualBeans.html
@@ -13,7 +13,7 @@
***************************************************************************************************************************/
-->
-{title:'Virtual Beans', flags:'todo'}
+{title:'Virtual Beans', updated:'9.0.0'}
<p>
The {@link oaj.BeanContext.Builder#disableInterfaceProxies()} setting
(enabled by default) allows
@@ -52,12 +52,12 @@
Getter and setter values can be any {@doc PojoCategories parsable}
values, even other virtual beans.
</p>
<p>
- Under-the-covers, a virtual bean is simply a proxy interface on top of
an existing <c>BeanMap</c>
+ Under-the-covers, a virtual bean is simply a proxy interface on top of
an existing {@link oaj.BeanMap}
instance. From a programmatic point-of-view, they're indistinguishable
from real beans, and can be
manipulated and serialized like any other bean.
</p>
<p>
- Virtual beans can also be created programmatically using the
<c>BeanContext</c> class:
+ Virtual beans can also be created programmatically using the {@link
oaj.BeanContext} class:
</p>
<p class='bpcode w800'>
Address <jv>address</jv> =
BeanContext.<jsf>DEFAULT</jsf>.createSession().newBean(Address.<jk>class</jk>);
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/15.Recursion.html
b/juneau-doc/docs/Topics/02.juneau-marshall/15.Recursion.html
index a1e0db9..5321ded 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/15.Recursion.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/15.Recursion.html
@@ -13,18 +13,18 @@
***************************************************************************************************************************/
-->
-{title:'Non-Tree Models and Recursion Detection'}
+{title:'Non-Tree Models and Recursion Detection', updated:'9.0.0'}
<p>
The Juneau Serializer API is designed to be used against POJO tree
structures.
It expects that there not be loops in the POJO model (e.g. children
with references to parents, etc...).
If you try to serialize models with loops, you will usually cause a
<c>StackOverflowError</c> to
- be thrown (if {@del oaj.BeanTraverseContext#BEANTRAVERSE_maxDepth} is
not reached
+ be thrown (if {@link oaj.BeanTraverseContext.Builder#maxDepth(int)} is
not reached
first).
</p>
<p>
If you still want to use the Juneau serializers on such models, Juneau
provides the
- {@del oaj.BeanTraverseContext#BEANTRAVERSE_detectRecursions} setting.
+ {@link oaj.BeanTraverseContext.Builder#detectRecursions()} setting.
It tells the serializer to look for instances of an object in the
current branch of the tree and skip
serialization when a duplicate is encountered.
</p>
@@ -49,7 +49,11 @@
</p>
<p class='bpcode w800'>
<jc>// Clone an existing serializer and set property for detecting
recursions.</jc>
- JsonSerializer <jv>serializer</jv> =
SimpleJsonSerializer.<jsf>DEFAULT_READABLE</jsf>.copy().detectRecursions(<jk>true</jk>).build();
+ JsonSerializer <jv>serializer</jv> = SimpleJsonSerializer
+ .<jsf>DEFAULT_READABLE</jsf>
+ .copy()
+ .detectRecursions()
+ .build();
<jc>// Create a recursive loop.</jc>
A <jv>a</jv> = <jk>new</jk> A();
diff --git
a/juneau-doc/docs/Topics/02.juneau-marshall/17.ReadingContinuousStreams.html
b/juneau-doc/docs/Topics/02.juneau-marshall/17.ReadingContinuousStreams.html
index 1260376..23f5873 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/17.ReadingContinuousStreams.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/17.ReadingContinuousStreams.html
@@ -13,7 +13,7 @@
***************************************************************************************************************************/
-->
-{title:'Reading Continuous Streams'}
+{title:'Reading Continuous Streams', updated:'9.0.0'}
<p>
The following parsers can be configured to read continuous streams of
objects from the same input stream:
@@ -25,7 +25,7 @@
</ul>
<p>
The {@link oaj.json.JsonParser} and {@link oaj.uon.UonParser}
- classes can read continuous streams by using the {@del
oaj.parser.Parser#PARSER_unbuffered PARSER_unbuffered}
+ classes can read continuous streams by using the {@link
oaj.parser.Parser.Builder#unbuffered()}
setting.
This prevents the parsers from using an internal buffer that would read
past the end of the currently
parsed POJO.
@@ -53,9 +53,9 @@
For obvious reasons, do not use the following properties when reading
continuous streams:
</p>
<ul class='javatree'>
- <li class='jf'>{@del oaj.json.JsonParser#JSON_validateEnd}
- <li class='jf'>{@del oaj.uon.UonParser#UON_validateEnd}
- <li class='jf'>{@del oaj.parser.Parser#PARSER_autoCloseStreams}
+ <li class='jm'>{@link oaj.json.JsonParser.Builder#validateEnd()}
+ <li class='jm'>{@link oaj.uon.UonParser.Builder#validateEnd()}
+ <li class='jm'>{@link oaj.parser.Parser.Builder#autoCloseStreams()}
</ul>
<p>
The {@link oaj.msgpack.MsgPackParser} class doesn't use any internal
buffering to begin with, so it can be used with
diff --git a/juneau-doc/docs/Topics/02.juneau-marshall/18.MarshallingUris.html
b/juneau-doc/docs/Topics/02.juneau-marshall/18.MarshallingUris.html
index 93fc2be..2f05998 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/18.MarshallingUris.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/18.MarshallingUris.html
@@ -13,82 +13,74 @@
***************************************************************************************************************************/
-->
-{title:'URIs'}
+{title:'URIs', updated:'9.0.0'}
<p>
Juneau serializers have sophisticated support for transforming relative
URIs to absolute form.
</p>
<p>
- The classes and settings that control the behavior are:
-</p>
-<ul class='javatree'>
- <li class='jc'>{@link oaj.UriResolver}
- <li class='jc'>{@link oaj.UriContext}
- <li class='jc'>{@link oaj.UriRelativity}
- <li class='jc'>{@link oaj.UriResolution}
- <li class='jac'>{@link oaj.serializer.Serializer}
- <ul>
- <li class='jf'>{@del
oaj.serializer.Serializer#SERIALIZER_uriContext}
- <li class='jf'>{@del
oaj.serializer.Serializer#SERIALIZER_uriRelativity}
- <li class='jf'>{@del
oaj.serializer.Serializer#SERIALIZER_uriResolution}
- </ul>
-</ul>
-<p>
The following example shows a bean containing URIs of various forms and
how they end up serialized.
</p>
<p class='bpcode w800'>
<jc>// Our bean with properties containing various kinds of URIs.</jc>
<jk>public class</jk> TestURIs {
<jk>public</jk> URI
- <jf>f1a</jf> =
URI.<jsm>create</jsm>(<js>"http://www.apache.org/f1a"</js>),
- <jf>f1b</jf> = URI.<jsm>create</jsm>(<js>"/f1b"</js>),
- <jf>f1c</jf> =
URI.<jsm>create</jsm>(<js>"/f1c/x/y"</js>),
- <jf>f1d</jf> = URI.<jsm>create</jsm>(<js>"f1d"</js>),
- <jf>f1e</jf> =
URI.<jsm>create</jsm>(<js>"f1e/x/y"</js>),
- <jf>f1f</jf> = URI.<jsm>create</jsm>(<js>""</js>),
- <jf>f2a</jf> =
URI.<jsm>create</jsm>(<js>"context:/f2a/x"</js>),
- <jf>f2b</jf> =
URI.<jsm>create</jsm>(<js>"context:/f2b"</js>),
- <jf>f2c</jf> =
URI.<jsm>create</jsm>(<js>"context:/"</js>),
- <jf>f2d</jf> =
URI.<jsm>create</jsm>(<js>"context:/.."</js>),
- <jf>f3a</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/f3a/x"</js>),
- <jf>f3b</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/f3b"</js>),
- <jf>f3c</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/"</js>),
- <jf>f3d</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/.."</js>),
- <jf>f4a</jf> =
URI.<jsm>create</jsm>(<js>"request:/f4a/x"</js>),
- <jf>f4b</jf> =
URI.<jsm>create</jsm>(<js>"request:/f4b"</js>),
- <jf>f4c</jf> =
URI.<jsm>create</jsm>(<js>"request:/"</js>),
- <jf>f4d</jf> =
URI.<jsm>create</jsm>(<js>"request:/.."</js>);;
+ <jf>a</jf> =
URI.<jsm>create</jsm>(<js>"http://www.apache.org/a"</js>),
+ <jf>b</jf> = URI.<jsm>create</jsm>(<js>"/b"</js>),
+ <jf>c</jf> = URI.<jsm>create</jsm>(<js>"/c/x/y"</js>),
+ <jf>d</jf> = URI.<jsm>create</jsm>(<js>"d"</js>),
+ <jf>e</jf> = URI.<jsm>create</jsm>(<js>"e/x/y"</js>),
+ <jf>f</jf> = URI.<jsm>create</jsm>(<js>""</js>),
+ <jf>g</jf> =
URI.<jsm>create</jsm>(<js>"context:/g/x"</js>),
+ <jf>h</jf> =
URI.<jsm>create</jsm>(<js>"context:/h"</js>),
+ <jf>i</jf> =
URI.<jsm>create</jsm>(<js>"context:/"</js>),
+ <jf>j</jf> =
URI.<jsm>create</jsm>(<js>"context:/.."</js>),
+ <jf>k</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/k/x"</js>),
+ <jf>l</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/l"</js>),
+ <jf>m</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/"</js>),
+ <jf>n</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/.."</js>),
+ <jf>o</jf> =
URI.<jsm>create</jsm>(<js>"request:/o/x"</js>),
+ <jf>p</jf> =
URI.<jsm>create</jsm>(<js>"request:/p"</js>),
+ <jf>q</jf> =
URI.<jsm>create</jsm>(<js>"request:/"</js>),
+ <jf>r</jf> =
URI.<jsm>create</jsm>(<js>"request:/.."</js>);;
}
<jc>// Create a serializer.</jc>
WriterSerializer <jv>serializer</jv> = JsonSerializer
<jsm>create</jsm>()
.simple()
-
.uriContext(<js>"{authority:'http://foo.com:123',contextRoot:'/myContext',servletPath:'/myServlet',pathInfo:'/myPath'}"</js>)
+ .uriContext(
+ UriContext.of(
+ <js>"http://foo.com:123"</js>, <jc>//
Authority</jc>
+ <js>"/myContext"</js>, <jc>// Context root</jc>
+ <js>"/myServlet"</js>, <jc>// Servlet path</jc>
+ <js>"/myPath"</js> <jc>// Path info</jc>
+ )
+ )
.uriResolution(<jsf>ABSOLUTE</jsf>)
.uriRelativity(<jsf>RESOURCE</jsf>)
.build();
<jc>// Produces:</jc>
<jc>// {</jc>
- <jc>// f1a:'http://www.apache.org/f1a',</jc>
- <jc>// f1b:'http://foo.com:123/f1b',</jc>
- <jc>// f1c:'http://foo.com:123/f1c/x/y',</jc>
- <jc>// f1d:'http://foo.com:123/myContext/myServlet/f1d',</jc>
- <jc>// f1e:'http://foo.com:123/myContext/myServlet/f1e/x/y',</jc>
- <jc>// f1f:'http://foo.com:123/myContext/myServlet',</jc>
- <jc>// f2a:'http://foo.com:123/myContext/f2a/x',</jc>
- <jc>// f2b:'http://foo.com:123/myContext/f2b',</jc>
- <jc>// f2c:'http://foo.com:123/myContext',</jc>
- <jc>// f2d:'http://foo.com:123'</jc>
- <jc>// f3a:'http://foo.com:123/myContext/myServlet/f3a/x',</jc>
- <jc>// f3b:'http://foo.com:123/myContext/myServlet/f3b',</jc>
- <jc>// f3c:'http://foo.com:123/myContext/myServlet',</jc>
- <jc>// f3d:'http://foo.com:123/myContext',</jc>
- <jc>// f4a:'http://foo.com:123/myContext/myServlet/myPath/f4a/x',</jc>
- <jc>// f4b:'http://foo.com:123/myContext/myServlet/myPath/f4b',</jc>
- <jc>// f4c:'http://foo.com:123/myContext/myServlet/myPath',</jc>
- <jc>// f4d:'http://foo.com:123/myContext/myServlet'</jc>
+ <jc>// a:'http://www.apache.org/a',</jc>
+ <jc>// b:'http://foo.com:123/b',</jc>
+ <jc>// c:'http://foo.com:123/c/x/y',</jc>
+ <jc>// d:'http://foo.com:123/myContext/myServlet/d',</jc>
+ <jc>// e:'http://foo.com:123/myContext/myServlet/e/x/y',</jc>
+ <jc>// f:'http://foo.com:123/myContext/myServlet',</jc>
+ <jc>// g:'http://foo.com:123/myContext/g/x',</jc>
+ <jc>// h:'http://foo.com:123/myContext/h',</jc>
+ <jc>// i:'http://foo.com:123/myContext',</jc>
+ <jc>// j:'http://foo.com:123'</jc>
+ <jc>// k:'http://foo.com:123/myContext/myServlet/k/x',</jc>
+ <jc>// l:'http://foo.com:123/myContext/myServlet/l',</jc>
+ <jc>// m:'http://foo.com:123/myContext/myServlet',</jc>
+ <jc>// n:'http://foo.com:123/myContext',</jc>
+ <jc>// o:'http://foo.com:123/myContext/myServlet/myPath/o/x',</jc>
+ <jc>// p:'http://foo.com:123/myContext/myServlet/myPath/p',</jc>
+ <jc>// q:'http://foo.com:123/myContext/myServlet/myPath',</jc>
+ <jc>// r:'http://foo.com:123/myContext/myServlet'</jc>
<jc>// }</jc>
String <jv>json</jv> = <jv>serializer</jv>.serialize(<jk>new</jk>
TestURIs());
</p>
@@ -96,9 +88,9 @@
URI resolution is controlled by the following settings:
</p>
<ul class='javatree'>
- <li class='jf'>{@del oaj.serializer.Serializer#SERIALIZER_uriContext}
+ <li class='jm'>{@link
oaj.serializer.Serializer.Builder#uriContext(UriContext)}
<br>Setting that defines the URI contextual information used to
resolve relative URIs.
- <li class='jf'>{@del oaj.serializer.Serializer#SERIALIZER_uriRelativity}
+ <li class='jm'>{@link
oaj.serializer.Serializer.Builder#uriRelativity(UriRelativity)}
<br>Setting that defines how relative URIs should be
interpreted.
<br>Possible values:
<ul>
@@ -109,7 +101,7 @@
<br>Relative URIs should be considered relative
to the request URI.
<br>(e.g.
<js>"http://host:port/context-root/servlet-path/path-info"</js>).
</ul>
- <li class='jf'>{@del oaj.serializer.Serializer#SERIALIZER_uriResolution}
+ <li class='jm'>{@link
oaj.serializer.Serializer.Builder#uriResolution(UriResolution)}
<br>Setting that defines the final format of serialized URIs.
<br>Possible values:
<ul>
diff --git
a/juneau-doc/docs/Topics/02.juneau-marshall/19.JacksonComparison.html
b/juneau-doc/docs/Topics/02.juneau-marshall/19.JacksonComparison.html
index 0abb8ce..7bd9959 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/19.JacksonComparison.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/19.JacksonComparison.html
@@ -13,7 +13,7 @@
***************************************************************************************************************************/
-->
-{title:'Comparison with Jackson', flags:'review'}
+{title:'Comparison with Jackson', updated:'9.0.0'}
<p>
Juneau was developed independently from Jackson, but shares many of the
same features and capabilities.
@@ -64,9 +64,8 @@
<td><c><ja>@JsonAutoDetect</ja>(fieldVisibility=...)</c></td>
<td>
No equivalent annotation, but can be controlled via:
- <br>{@del oaj.BeanContext#BEAN_beanFieldVisibility
BEAN_beanFieldVisibility}
- <br>{@del oaj.BeanContext#BEAN_beanMethodVisibility
BEAN_beanMethodVisibility}
- <br>Future annotation support planned.
+ <br>{@link
oaj.BeanContext.Builder#beanFieldVisibility(Visibility)}
+ <br>{@link
oaj.BeanContext.Builder#beanMethodVisibility(Visibility)}
</td>
</tr>
<tr>
@@ -82,7 +81,6 @@
<td><ja>@JacksonInject</ja></td>
<td>
No equivalent.
- <br>Future support planned.
</td>
</tr>
@@ -102,7 +100,6 @@
No equivalent annotation, but can be controlled via
various settings:
<br>{@link oaj.BeanContext}
<br>{@link oaj.serializer.Serializer}
- <br>Future annotation support planned.
</td>
</tr>
<tr>
diff --git a/juneau-doc/src/main/javadoc/overview.html
b/juneau-doc/src/main/javadoc/overview.html
index 2f9b70b..98d6f41 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -201,17 +201,17 @@
<li><p><a class='doclink'
href='#juneau-marshall.Swaps.TemplatedSwaps'>Templated Swaps</a></p>
<li><p><a class='doclink'
href='#juneau-marshall.Swaps.SurrogateClasses'>Surrogate Classes</a></p>
</ol>
- <li><p><a class='doclink'
href='#juneau-marshall.DynamicallyAppliedAnnotations'>Dynamically Applied
Annotations</a><span class='update'>created: 8.1.3</span></p>
- <li><p><a class='doclink'
href='#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a></p>
+ <li><p><a class='doclink'
href='#juneau-marshall.DynamicallyAppliedAnnotations'>Dynamically Applied
Annotations</a><span class='update'>created: 8.1.3, updated:
<b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a><span
class='update'>updated: <b>9.0.0</b></span></p>
<ol>
<li><p><a class='doclink'
href='#juneau-marshall.BeanDictionaries.BeanSubTypes'>Bean Subtypes</a></p>
</ol>
- <li><p><a class='doclink'
href='#juneau-marshall.VirtualBeans'>Virtual Beans</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='#juneau-marshall.Recursion'>Non-Tree Models and Recursion
Detection</a></p>
+ <li><p><a class='doclink'
href='#juneau-marshall.VirtualBeans'>Virtual Beans</a><span
class='update'>updated: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='#juneau-marshall.Recursion'>Non-Tree Models and Recursion
Detection</a><span class='update'>updated: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='#juneau-marshall.ParsingIntoGenericModels'>Parsing into Generic
Models</a><span class='update'>updated: 8.2.0</span></p>
- <li><p><a class='doclink'
href='#juneau-marshall.ReadingContinuousStreams'>Reading Continuous
Streams</a></p>
- <li><p><a class='doclink'
href='#juneau-marshall.MarshallingUris'>URIs</a></p>
- <li><p><a class='doclink'
href='#juneau-marshall.JacksonComparison'>Comparison with Jackson</a><span
class='update'><b><red>review</red></b></span></p>
+ <li><p><a class='doclink'
href='#juneau-marshall.ReadingContinuousStreams'>Reading Continuous
Streams</a><span class='update'>updated: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='#juneau-marshall.MarshallingUris'>URIs</a><span class='update'>updated:
<b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='#juneau-marshall.JacksonComparison'>Comparison with Jackson</a><span
class='update'>updated: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='#juneau-marshall.PojoCategories'>POJO Categories</a></p>
<li><p><a class='doclink'
href='#juneau-marshall.FluentAssertions'>Fluent Assertions</a><span
class='update'>created: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='#juneau-marshall.JsonDetails'>JSON Details</a></p>
@@ -836,7 +836,7 @@
<h3 class='topic' onclick='toggle(this)'><a href='#Overview.CoreOverview'
id='Overview.CoreOverview'>1.1 - Core Overview</a><span class='update'>created:
<b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 1.1 - Overview.CoreOverview -->
-<h5 class='toc'>Marshalling APIs</h5>
+<h5 class='topic'>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
@@ -912,7 +912,7 @@
</ul>
</div>
-<h5 class='toc'>Marshaller Builders</h5>
+<h5 class='topic'>Marshaller Builders</h5>
<div class='topic'>
<p>
Serializers and parsers are builder-based using fluent methods
allowing you to quickly create, clone, and modify them
@@ -968,7 +968,7 @@
</ul>
</div>
-<h5 class='toc'>Bean Annotations</h5>
+<h5 class='topic'>Bean Annotations</h5>
<div class='topic'>
<p>
Beans and POJO classes, methods, fields, and constructors can
also be annotated with a variety of annotations to customize how they are
marshalled:
@@ -993,7 +993,7 @@
</ul>
</div>
-<h5 class='toc'>Configuration Annotations</h5>
+<h5 class='topic'>Configuration Annotations</h5>
<div class='topic'>
<p>
Serializers and parsers can also be configured using
annotations.
@@ -1037,7 +1037,7 @@
</ul>
</div>
-<h5 class='toc'>Simplified JSON Marshalling</h5>
+<h5 class='topic'>Simplified JSON Marshalling</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.json.SimpleJsonSerializer} class
can be used to serialized POJOs into Simplified JSON notation.
@@ -1097,7 +1097,7 @@
</ul>
</div>
-<h5 class='toc'>UON Marshalling</h5>
+<h5 class='topic'>UON Marshalling</h5>
<div class='topic'>
<p>
The Marshalling API also supports UON (URL-Encoded Object
Notation).
@@ -1130,7 +1130,7 @@
<li class='link'>{@doc UonDetails UON Details} for more
information.
</ul>
</div>
-<h5 class='toc'>OpenAPI Marshalling</h5>
+<h5 class='topic'>OpenAPI Marshalling</h5>
<div class='topic'>
<p>
The Marshalling API also supports schema-based OpenAPI
serialization.
@@ -1169,7 +1169,7 @@
</ul>
</div>
-<h5 class='toc'>OMap/OList</h5>
+<h5 class='topic'>OMap/OList</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.collections.OMap} and {@link
org.apache.juneau.collections.OList} collections classes allow you
@@ -1198,7 +1198,7 @@
</ul>
</div>
-<h5 class='toc'>Serializer and Parser Sets</h5>
+<h5 class='topic'>Serializer and Parser Sets</h5>
<div class='topic'>
<p>
<code>SerializerSet</code> and <code>ParserSet</code> classes
allow serializers and parsers
@@ -1235,7 +1235,7 @@
</ul>
</div>
-<h5 class='toc'>SVL Variables</h5>
+<h5 class='topic'>SVL Variables</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.svl} package defines an API for a
language called "Simple Variable Language".
@@ -1261,7 +1261,7 @@
</ul>
</div>
-<h5 class='toc'>Assertions API</h5>
+<h5 class='topic'>Assertions API</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.assertions} package in Juneau is a
powerful API for performing fluent style assertions.
@@ -1329,7 +1329,7 @@
<h3 class='topic' onclick='toggle(this)'><a href='#Overview.DtoOverview'
id='Overview.DtoOverview'>1.2 - DTO Library Overview</a><span
class='update'>created: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 1.2 - Overview.DtoOverview -->
-<h5 class='toc'>DTO Libraries</h5>
+<h5 class='topic'>DTO Libraries</h5>
<div class='topic'>
<p>
The <c>juneau-dto</c> library contains several predefined POJOs
for generating commonly-used document types that
@@ -1337,7 +1337,7 @@
</p>
</div>
-<h5 class='toc'>HTML5</h5>
+<h5 class='topic'>HTML5</h5>
<div class='topic'>
<p>
The Juneau HTML5 DTOs are simply beans with fluent-style
setters that allow you to quickly construct HTML
@@ -1384,7 +1384,7 @@
</ul>
</div>
-<h5 class='toc'>ATOM</h5>
+<h5 class='topic'>ATOM</h5>
<div class='topic'>
<p>
The Juneau ATOM feed DTOs are simply beans with fluent-style
setters.
@@ -1438,7 +1438,7 @@
</ul>
</div>
-<h5 class='toc'>Swagger</h5>
+<h5 class='topic'>Swagger</h5>
<div class='topic'>
<p>
The Juneau Swagger DTOs are simply beans with fluent-style
setters that allow you to quickly construct
@@ -1499,7 +1499,7 @@
</ul>
</div>
-<h5 class='toc'>SwaggerUI</h5>
+<h5 class='topic'>SwaggerUI</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.dto.swagger.ui.SwaggerUI} class is
a DTO class for generating Swagger user interfaces
@@ -1524,7 +1524,7 @@
<h3 class='topic' onclick='toggle(this)'><a href='#Overview.ConfigOverview'
id='Overview.ConfigOverview'>1.3 - Config API Overview</a><span
class='update'>created: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 1.3 - Overview.ConfigOverview -->
-<h5 class='toc'>Config API</h5>
+<h5 class='topic'>Config API</h5>
<div class='topic'>
<p>
The <c>juneau-config</c> library contains a powerful API for
creating and using INI-style config files.
@@ -1574,7 +1574,7 @@
<h3 class='topic' onclick='toggle(this)'><a href='#Overview.RestOverview'
id='Overview.RestOverview'>1.4 - REST Overview</a><span class='update'>created:
<b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 1.4 - Overview.RestOverview -->
-<h5 class='toc'>REST Server/Client APIs</h5>
+<h5 class='topic'>REST Server/Client APIs</h5>
<div class='topic'>
<p>
The {@doc juneau-rest-server juneau-rest-server} and {@doc
juneau-rest-client juneau-rest-client} libraries
@@ -1659,7 +1659,7 @@
<h3 class='topic' onclick='toggle(this)'><a
href='#Overview.RestServerOverview' id='Overview.RestServerOverview'>1.5 - REST
Server Overview</a><span class='update'>created: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 1.5 - Overview.RestServerOverview -->
-<h5 class='toc'>@Rest-Annotated Resources</h5>
+<h5 class='topic'>@Rest-Annotated Resources</h5>
<div class='topic'>
<p>
A REST resource is simply a Java class annotated with {@link
org.apache.juneau.rest.annotation.Rest}.
@@ -1716,7 +1716,7 @@
</ul>
</div>
-<h5 class='toc'>REST Children</h5>
+<h5 class='topic'>REST Children</h5>
<div class='topic'>
<p>
Child Resources are REST servlets or objects that are linked to
parent resources through the
@@ -1755,7 +1755,7 @@
</ul>
</div>
-<h5 class='toc'>REST Group Pages</h5>
+<h5 class='topic'>REST Group Pages</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.rest.BasicRestServletGroup} class
provides a default "router" page for
@@ -1798,7 +1798,7 @@
</ul>
</div>
-<h5 class='toc'>REST Resource Methods</h5>
+<h5 class='topic'>REST Resource Methods</h5>
<div class='topic'>
<p>
The real power behind the REST server API is the ability to
define Java methods as REST endpoints.
@@ -1873,7 +1873,7 @@
</ul>
</div>
-<h5 class='toc'>Deploying as a Servlet</h5>
+<h5 class='topic'>Deploying as a Servlet</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.rest.RestServlet} class is the
entry point for your REST resources.
@@ -1895,7 +1895,7 @@
</ul>
</div>
-<h5 class='toc'>Deploying in Spring Boot</h5>
+<h5 class='topic'>Deploying in Spring Boot</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.rest.springboot.SpringRestServlet}
class is typically entry point for your REST resources
@@ -1967,7 +1967,7 @@
<h3 class='topic' onclick='toggle(this)'><a
href='#Overview.RestClientOverview' id='Overview.RestClientOverview'>1.6 - REST
Client Overview</a><span class='update'>created: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 1.6 - Overview.RestClientOverview -->
-<h5 class='toc'>REST Client</h5>
+<h5 class='topic'>REST Client</h5>
<div class='topic'>
<p>
Built upon the feature-rich Apache HttpClient library, the
Juneau RestClient API adds support for fluent-style
@@ -1991,7 +1991,7 @@
</ul>
</div>
-<h5 class='toc'>REST Testing Framework</h5>
+<h5 class='topic'>REST Testing Framework</h5>
<div class='topic'>
<p>
The {@link org.apache.juneau.rest.mock.MockRestClient} class is
used for performing serverless unit testing of {@link
org.apache.juneau.rest.annotation.Rest @Rest}-annotated
@@ -3818,13 +3818,17 @@
Serializing to and from Maps can be accomplished by defining any of the
following methods:
</p>
<ul>
- <li><c><jk>public</jk> Map toMap()</c> method. Can be any type of map
with string keys and object vals.
+ <li><c><jk>public</jk> Map toMap()</c> method.
+ <br>Can be any type of map with string keys and object vals.
<li><c><jk>public</jk> OMap toMap()</c> method.
- <li><c><jk>public</jk> Map toMap(BeanSession)</c> method. Can be any
type of map with string keys and object vals.
+ <li><c><jk>public</jk> Map toMap(BeanSession)</c> method.
+ <br>Can be any type of map with string keys and object vals.
<li><c><jk>public</jk> OMap toMap(BeanSession)</c> method.
- <li><c><jk>public static</jk> MyPojo fromMap(Map)</c> method. Can be
any type of map with string keys and object vals.
+ <li><c><jk>public static</jk> MyPojo fromMap(Map)</c> method.
+ <br>Can be any type of map with string keys and object vals.
<li><c><jk>public static</jk> MyPojo fromMap(OMap)</c> method.
- <li><c><jk>public static</jk> MyPojo fromMap(Map,BeanSession)</c>
method. Can be any type of map with string keys and object vals.
+ <li><c><jk>public static</jk> MyPojo fromMap(Map,BeanSession)</c>
method.
+ <br>Can be any type of map with string keys and object vals.
<li><c><jk>public static</jk> MyPojo fromMap(OMap,BeanSession)</c>
method.
</ul>
<p>
@@ -4026,7 +4030,7 @@
<p>
In the previous sections, we defined two-way swaps, meaning swaps where
the original objects could be
reconstructing during parsing.
- However, there are certain kinds of POJOs that we may want to support
for serializing, but that are not
+ However, there are certain kinds of objects that we may want to support
for serializing, but that are not
possible to reconstruct during parsing.
For these, we can use one-way object swaps.
</p>
@@ -4255,7 +4259,7 @@
The surrogate class is registered in the same way as a
<c>ObjectSwap</c>:
</p>
<p class='bpcode w800'>
- <jc>// Create a JSON serializer that can serialize Iterators.</jc>
+ <jc>// Create a JSON serializer that can serialize our unserializable
object.</jc>
WriterSerializer <jv>serializer</jv> = JsonSerializer
.<jsm>create</jsm>()
.swaps(MySerializableSurrogate.<jk>class</jk>)
@@ -4274,7 +4278,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.DynamicallyAppliedAnnotations'
id='juneau-marshall.DynamicallyAppliedAnnotations'>2.12 - Dynamically Applied
Annotations</a><span class='update'>created: 8.1.3</span></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.DynamicallyAppliedAnnotations'
id='juneau-marshall.DynamicallyAppliedAnnotations'>2.12 - Dynamically Applied
Annotations</a><span class='update'>created: 8.1.3, updated:
<b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 2.12 -
juneau-marshall.DynamicallyAppliedAnnotations -->
<p>
In the section {@doc Transforms}, you were introduced to annotations
that can be applied to bean
@@ -4287,17 +4291,21 @@
<jk>public class</jk> Address { ... }
</p>
<p>
- An alternate way of applying these annotations is using the
<ja>@XConfig</ja> annotations introduced in section
- {@doc ConfigurableAnnotations}.
+ An alternate way of applying these annotations is to attach them to
unrelated classes and methods and then
+ tell your serializer or parser where to find them.
</p>
<p class='bpcode w800'>
<jc>// Unannotated class.</jc>
<jk>public class</jk> Address { ... }
- <ja>@Bean</ja>(on=<js>"Address"</js>,
properties=<js>"street,city,state"</js>)
+ <ja>@Bean</ja>(onClass=Address.<jk>class</jk>,
properties=<js>"street,city,state"</js>)
<jk>public static class</jk> DummyClass {}
- WriterSerializer <jv>serializer</jv> =
JsonSerializer.<jsm>create</jsm>().applyAnnotations(DummyClass.<jk>class</jk>).build();
+ WriterSerializer <jv>serializer</jv> = JsonSerializer
+ .<jsm>create</jsm>()
+ .applyAnnotations(DummyClass.<jk>class</jk>)
+ .build();
+
String <jv>json</jv> =
<jv>serializer</jv>.toString(<jv>addressBean</jv>);
</p>
<p>
@@ -4311,11 +4319,11 @@
</p>
<p class='bpcode w800'>
<ja>@RestGet</ja>
- <ja>@Bean</ja>(on=<js>"Address"</js>,
properties=<js>"street,city,state"</js>)
+ <ja>@Bean</ja>(onClass=Address.<jk>class</jk>,
properties=<js>"street,city,state"</js>)
<jk>public</jk> List<Address> getAddresses() {}
</p>
<p>
- Any Juneau annotation that has an <c>on()</c> method can be applied
dynamically this way.
+ Any Juneau annotation that has an <c>on()/onClass()</c> method can be
applied dynamically this way.
These include:
</p>
<ul>
@@ -4440,7 +4448,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.BeanDictionaries'
id='juneau-marshall.BeanDictionaries'>2.13 - Bean Names and
Dictionaries</a></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.BeanDictionaries'
id='juneau-marshall.BeanDictionaries'>2.13 - Bean Names and
Dictionaries</a><span class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 2.13 - juneau-marshall.BeanDictionaries -->
<p>
While parsing into beans, Juneau attempts to determine the class types
of bean properties through
@@ -4517,8 +4525,6 @@
- On individual bean properties through the annotation.
<li class='ja'>{@link org.apache.juneau.annotation.Bean#dictionary()
Bean(dictionary)}
- On all properties on a bean and all subclasses.
- <li class='jf'>{@del org.apache.juneau.BeanContext#BEAN_beanDictionary}
- - Configuration property on serializers and parsers.
<li class='jm'>{@link
org.apache.juneau.BeanContext.Builder#beanDictionary(Class...)}
- Builder method on serializers and parsers.
</ul>
@@ -4538,13 +4544,6 @@
.dictionary(Foo.<jk>class</jk>, Bar.<jk>class</jk>)
.build();
- <jc>// Same, but use property.</jc>
- ReaderParser <jv>parser</jv> = JsonParser
- .<jsm>create</jsm>()
- .addTo(<jsf>BEAN_beanDictionary</jsf>, Foo.<jk>class</jk>)
- .addTo(<jsf>BEAN_beanDictionary</jsf>, Bar.<jk>class</jk>)
- .build();
-
<jc>// Use the predefined HTML5 bean dictionary which is a
BeanDictionaryList.</jc>
ReaderParser <jv>parser</jv> = HtmlParser
.<jsm>create</jsm>()
@@ -4557,8 +4556,6 @@
<ul class='javatree'>
<li class='ja'>{@link
org.apache.juneau.annotation.Bean#typePropertyName() Bean(typePropertyName)}
- On individual beans through the annotation.
- <li class='jf'>{@del
org.apache.juneau.BeanContext#BEAN_typePropertyName}
- - Configuration property on serializers and parsers.
<li class='jm'>{@link
org.apache.juneau.BeanContext.Builder#typePropertyName(String)}
- Builder method on serializers and parsers.
</ul>
@@ -4592,8 +4589,8 @@
<div class='info'>
Serialized type names are DISABLED by default.
They must be enabled on the serializer using the
- {@del org.apache.juneau.serializer.Serializer#SERIALIZER_addBeanTypes}
- configuration property.
+ {@link org.apache.juneau.serializer.Serializer.Builder#addBeanTypes()}
+ setting.
</div>
<!--
====================================================================================================
-->
@@ -4659,7 +4656,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.VirtualBeans' id='juneau-marshall.VirtualBeans'>2.14 -
Virtual Beans</a><span class='update'><b><red>todo</red></b></span></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.VirtualBeans' id='juneau-marshall.VirtualBeans'>2.14 -
Virtual Beans</a><span class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 2.14 - juneau-marshall.VirtualBeans -->
<p>
The {@link
org.apache.juneau.BeanContext.Builder#disableInterfaceProxies()} setting
(enabled by default) allows
@@ -4698,12 +4695,12 @@
Getter and setter values can be any {@doc PojoCategories parsable}
values, even other virtual beans.
</p>
<p>
- Under-the-covers, a virtual bean is simply a proxy interface on top of
an existing <c>BeanMap</c>
+ Under-the-covers, a virtual bean is simply a proxy interface on top of
an existing {@link org.apache.juneau.BeanMap}
instance. From a programmatic point-of-view, they're indistinguishable
from real beans, and can be
manipulated and serialized like any other bean.
</p>
<p>
- Virtual beans can also be created programmatically using the
<c>BeanContext</c> class:
+ Virtual beans can also be created programmatically using the {@link
org.apache.juneau.BeanContext} class:
</p>
<p class='bpcode w800'>
Address <jv>address</jv> =
BeanContext.<jsf>DEFAULT</jsf>.createSession().newBean(Address.<jk>class</jk>);
@@ -4712,18 +4709,18 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Recursion'
id='juneau-marshall.Recursion'>2.15 - Non-Tree Models and Recursion
Detection</a></h3>
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.Recursion'
id='juneau-marshall.Recursion'>2.15 - Non-Tree Models and Recursion
Detection</a><span class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 2.15 - juneau-marshall.Recursion -->
<p>
The Juneau Serializer API is designed to be used against POJO tree
structures.
It expects that there not be loops in the POJO model (e.g. children
with references to parents, etc...).
If you try to serialize models with loops, you will usually cause a
<c>StackOverflowError</c> to
- be thrown (if {@del
org.apache.juneau.BeanTraverseContext#BEANTRAVERSE_maxDepth} is not reached
+ be thrown (if {@link
org.apache.juneau.BeanTraverseContext.Builder#maxDepth(int)} is not reached
first).
</p>
<p>
If you still want to use the Juneau serializers on such models, Juneau
provides the
- {@del
org.apache.juneau.BeanTraverseContext#BEANTRAVERSE_detectRecursions} setting.
+ {@link
org.apache.juneau.BeanTraverseContext.Builder#detectRecursions()} setting.
It tells the serializer to look for instances of an object in the
current branch of the tree and skip
serialization when a duplicate is encountered.
</p>
@@ -4748,7 +4745,11 @@
</p>
<p class='bpcode w800'>
<jc>// Clone an existing serializer and set property for detecting
recursions.</jc>
- JsonSerializer <jv>serializer</jv> =
SimpleJsonSerializer.<jsf>DEFAULT_READABLE</jsf>.copy().detectRecursions(<jk>true</jk>).build();
+ JsonSerializer <jv>serializer</jv> = SimpleJsonSerializer
+ .<jsf>DEFAULT_READABLE</jsf>
+ .copy()
+ .detectRecursions()
+ .build();
<jc>// Create a recursive loop.</jc>
A <jv>a</jv> = <jk>new</jk> A();
@@ -4896,7 +4897,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.ReadingContinuousStreams'
id='juneau-marshall.ReadingContinuousStreams'>2.17 - Reading Continuous
Streams</a></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.ReadingContinuousStreams'
id='juneau-marshall.ReadingContinuousStreams'>2.17 - Reading Continuous
Streams</a><span class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 2.17 - juneau-marshall.ReadingContinuousStreams
-->
<p>
The following parsers can be configured to read continuous streams of
objects from the same input stream:
@@ -4908,7 +4909,7 @@
</ul>
<p>
The {@link org.apache.juneau.json.JsonParser} and {@link
org.apache.juneau.uon.UonParser}
- classes can read continuous streams by using the {@del
org.apache.juneau.parser.Parser#PARSER_unbuffered PARSER_unbuffered}
+ classes can read continuous streams by using the {@link
org.apache.juneau.parser.Parser.Builder#unbuffered()}
setting.
This prevents the parsers from using an internal buffer that would read
past the end of the currently
parsed POJO.
@@ -4936,9 +4937,9 @@
For obvious reasons, do not use the following properties when reading
continuous streams:
</p>
<ul class='javatree'>
- <li class='jf'>{@del org.apache.juneau.json.JsonParser#JSON_validateEnd}
- <li class='jf'>{@del org.apache.juneau.uon.UonParser#UON_validateEnd}
- <li class='jf'>{@del
org.apache.juneau.parser.Parser#PARSER_autoCloseStreams}
+ <li class='jm'>{@link
org.apache.juneau.json.JsonParser.Builder#validateEnd()}
+ <li class='jm'>{@link
org.apache.juneau.uon.UonParser.Builder#validateEnd()}
+ <li class='jm'>{@link
org.apache.juneau.parser.Parser.Builder#autoCloseStreams()}
</ul>
<p>
The {@link org.apache.juneau.msgpack.MsgPackParser} class doesn't use
any internal buffering to begin with, so it can be used with
@@ -4948,82 +4949,74 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.MarshallingUris'
id='juneau-marshall.MarshallingUris'>2.18 - URIs</a></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.MarshallingUris'
id='juneau-marshall.MarshallingUris'>2.18 - URIs</a><span
class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 2.18 - juneau-marshall.MarshallingUris -->
<p>
Juneau serializers have sophisticated support for transforming relative
URIs to absolute form.
</p>
<p>
- The classes and settings that control the behavior are:
-</p>
-<ul class='javatree'>
- <li class='jc'>{@link org.apache.juneau.UriResolver}
- <li class='jc'>{@link org.apache.juneau.UriContext}
- <li class='jc'>{@link org.apache.juneau.UriRelativity}
- <li class='jc'>{@link org.apache.juneau.UriResolution}
- <li class='jac'>{@link org.apache.juneau.serializer.Serializer}
- <ul>
- <li class='jf'>{@del
org.apache.juneau.serializer.Serializer#SERIALIZER_uriContext}
- <li class='jf'>{@del
org.apache.juneau.serializer.Serializer#SERIALIZER_uriRelativity}
- <li class='jf'>{@del
org.apache.juneau.serializer.Serializer#SERIALIZER_uriResolution}
- </ul>
-</ul>
-<p>
The following example shows a bean containing URIs of various forms and
how they end up serialized.
</p>
<p class='bpcode w800'>
<jc>// Our bean with properties containing various kinds of URIs.</jc>
<jk>public class</jk> TestURIs {
<jk>public</jk> URI
- <jf>f1a</jf> =
URI.<jsm>create</jsm>(<js>"http://www.apache.org/f1a"</js>),
- <jf>f1b</jf> = URI.<jsm>create</jsm>(<js>"/f1b"</js>),
- <jf>f1c</jf> =
URI.<jsm>create</jsm>(<js>"/f1c/x/y"</js>),
- <jf>f1d</jf> = URI.<jsm>create</jsm>(<js>"f1d"</js>),
- <jf>f1e</jf> =
URI.<jsm>create</jsm>(<js>"f1e/x/y"</js>),
- <jf>f1f</jf> = URI.<jsm>create</jsm>(<js>""</js>),
- <jf>f2a</jf> =
URI.<jsm>create</jsm>(<js>"context:/f2a/x"</js>),
- <jf>f2b</jf> =
URI.<jsm>create</jsm>(<js>"context:/f2b"</js>),
- <jf>f2c</jf> =
URI.<jsm>create</jsm>(<js>"context:/"</js>),
- <jf>f2d</jf> =
URI.<jsm>create</jsm>(<js>"context:/.."</js>),
- <jf>f3a</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/f3a/x"</js>),
- <jf>f3b</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/f3b"</js>),
- <jf>f3c</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/"</js>),
- <jf>f3d</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/.."</js>),
- <jf>f4a</jf> =
URI.<jsm>create</jsm>(<js>"request:/f4a/x"</js>),
- <jf>f4b</jf> =
URI.<jsm>create</jsm>(<js>"request:/f4b"</js>),
- <jf>f4c</jf> =
URI.<jsm>create</jsm>(<js>"request:/"</js>),
- <jf>f4d</jf> =
URI.<jsm>create</jsm>(<js>"request:/.."</js>);;
+ <jf>a</jf> =
URI.<jsm>create</jsm>(<js>"http://www.apache.org/a"</js>),
+ <jf>b</jf> = URI.<jsm>create</jsm>(<js>"/b"</js>),
+ <jf>c</jf> = URI.<jsm>create</jsm>(<js>"/c/x/y"</js>),
+ <jf>d</jf> = URI.<jsm>create</jsm>(<js>"d"</js>),
+ <jf>e</jf> = URI.<jsm>create</jsm>(<js>"e/x/y"</js>),
+ <jf>f</jf> = URI.<jsm>create</jsm>(<js>""</js>),
+ <jf>g</jf> =
URI.<jsm>create</jsm>(<js>"context:/g/x"</js>),
+ <jf>h</jf> =
URI.<jsm>create</jsm>(<js>"context:/h"</js>),
+ <jf>i</jf> =
URI.<jsm>create</jsm>(<js>"context:/"</js>),
+ <jf>j</jf> =
URI.<jsm>create</jsm>(<js>"context:/.."</js>),
+ <jf>k</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/k/x"</js>),
+ <jf>l</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/l"</js>),
+ <jf>m</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/"</js>),
+ <jf>n</jf> =
URI.<jsm>create</jsm>(<js>"servlet:/.."</js>),
+ <jf>o</jf> =
URI.<jsm>create</jsm>(<js>"request:/o/x"</js>),
+ <jf>p</jf> =
URI.<jsm>create</jsm>(<js>"request:/p"</js>),
+ <jf>q</jf> =
URI.<jsm>create</jsm>(<js>"request:/"</js>),
+ <jf>r</jf> =
URI.<jsm>create</jsm>(<js>"request:/.."</js>);;
}
<jc>// Create a serializer.</jc>
WriterSerializer <jv>serializer</jv> = JsonSerializer
<jsm>create</jsm>()
.simple()
-
.uriContext(<js>"{authority:'http://foo.com:123',contextRoot:'/myContext',servletPath:'/myServlet',pathInfo:'/myPath'}"</js>)
+ .uriContext(
+ UriContext.of(
+ <js>"http://foo.com:123"</js>, <jc>//
Authority</jc>
+ <js>"/myContext"</js>, <jc>// Context root</jc>
+ <js>"/myServlet"</js>, <jc>// Servlet path</jc>
+ <js>"/myPath"</js> <jc>// Path info</jc>
+ )
+ )
.uriResolution(<jsf>ABSOLUTE</jsf>)
.uriRelativity(<jsf>RESOURCE</jsf>)
.build();
<jc>// Produces:</jc>
<jc>// {</jc>
- <jc>// f1a:'http://www.apache.org/f1a',</jc>
- <jc>// f1b:'http://foo.com:123/f1b',</jc>
- <jc>// f1c:'http://foo.com:123/f1c/x/y',</jc>
- <jc>// f1d:'http://foo.com:123/myContext/myServlet/f1d',</jc>
- <jc>// f1e:'http://foo.com:123/myContext/myServlet/f1e/x/y',</jc>
- <jc>// f1f:'http://foo.com:123/myContext/myServlet',</jc>
- <jc>// f2a:'http://foo.com:123/myContext/f2a/x',</jc>
- <jc>// f2b:'http://foo.com:123/myContext/f2b',</jc>
- <jc>// f2c:'http://foo.com:123/myContext',</jc>
- <jc>// f2d:'http://foo.com:123'</jc>
- <jc>// f3a:'http://foo.com:123/myContext/myServlet/f3a/x',</jc>
- <jc>// f3b:'http://foo.com:123/myContext/myServlet/f3b',</jc>
- <jc>// f3c:'http://foo.com:123/myContext/myServlet',</jc>
- <jc>// f3d:'http://foo.com:123/myContext',</jc>
- <jc>// f4a:'http://foo.com:123/myContext/myServlet/myPath/f4a/x',</jc>
- <jc>// f4b:'http://foo.com:123/myContext/myServlet/myPath/f4b',</jc>
- <jc>// f4c:'http://foo.com:123/myContext/myServlet/myPath',</jc>
- <jc>// f4d:'http://foo.com:123/myContext/myServlet'</jc>
+ <jc>// a:'http://www.apache.org/a',</jc>
+ <jc>// b:'http://foo.com:123/b',</jc>
+ <jc>// c:'http://foo.com:123/c/x/y',</jc>
+ <jc>// d:'http://foo.com:123/myContext/myServlet/d',</jc>
+ <jc>// e:'http://foo.com:123/myContext/myServlet/e/x/y',</jc>
+ <jc>// f:'http://foo.com:123/myContext/myServlet',</jc>
+ <jc>// g:'http://foo.com:123/myContext/g/x',</jc>
+ <jc>// h:'http://foo.com:123/myContext/h',</jc>
+ <jc>// i:'http://foo.com:123/myContext',</jc>
+ <jc>// j:'http://foo.com:123'</jc>
+ <jc>// k:'http://foo.com:123/myContext/myServlet/k/x',</jc>
+ <jc>// l:'http://foo.com:123/myContext/myServlet/l',</jc>
+ <jc>// m:'http://foo.com:123/myContext/myServlet',</jc>
+ <jc>// n:'http://foo.com:123/myContext',</jc>
+ <jc>// o:'http://foo.com:123/myContext/myServlet/myPath/o/x',</jc>
+ <jc>// p:'http://foo.com:123/myContext/myServlet/myPath/p',</jc>
+ <jc>// q:'http://foo.com:123/myContext/myServlet/myPath',</jc>
+ <jc>// r:'http://foo.com:123/myContext/myServlet'</jc>
<jc>// }</jc>
String <jv>json</jv> = <jv>serializer</jv>.serialize(<jk>new</jk>
TestURIs());
</p>
@@ -5031,9 +5024,9 @@
URI resolution is controlled by the following settings:
</p>
<ul class='javatree'>
- <li class='jf'>{@del
org.apache.juneau.serializer.Serializer#SERIALIZER_uriContext}
+ <li class='jm'>{@link
org.apache.juneau.serializer.Serializer.Builder#uriContext(UriContext)}
<br>Setting that defines the URI contextual information used to
resolve relative URIs.
- <li class='jf'>{@del
org.apache.juneau.serializer.Serializer#SERIALIZER_uriRelativity}
+ <li class='jm'>{@link
org.apache.juneau.serializer.Serializer.Builder#uriRelativity(UriRelativity)}
<br>Setting that defines how relative URIs should be
interpreted.
<br>Possible values:
<ul>
@@ -5044,7 +5037,7 @@
<br>Relative URIs should be considered relative
to the request URI.
<br>(e.g.
<js>"http://host:port/context-root/servlet-path/path-info"</js>).
</ul>
- <li class='jf'>{@del
org.apache.juneau.serializer.Serializer#SERIALIZER_uriResolution}
+ <li class='jm'>{@link
org.apache.juneau.serializer.Serializer.Builder#uriResolution(UriResolution)}
<br>Setting that defines the final format of serialized URIs.
<br>Possible values:
<ul>
@@ -5091,7 +5084,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.JacksonComparison'
id='juneau-marshall.JacksonComparison'>2.19 - Comparison with Jackson</a><span
class='update'><b><red>review</red></b></span></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-marshall.JacksonComparison'
id='juneau-marshall.JacksonComparison'>2.19 - Comparison with Jackson</a><span
class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 2.19 - juneau-marshall.JacksonComparison -->
<p>
Juneau was developed independently from Jackson, but shares many of the
same features and capabilities.
@@ -5142,9 +5135,8 @@
<td><c><ja>@JsonAutoDetect</ja>(fieldVisibility=...)</c></td>
<td>
No equivalent annotation, but can be controlled via:
- <br>{@del
org.apache.juneau.BeanContext#BEAN_beanFieldVisibility BEAN_beanFieldVisibility}
- <br>{@del
org.apache.juneau.BeanContext#BEAN_beanMethodVisibility
BEAN_beanMethodVisibility}
- <br>Future annotation support planned.
+ <br>{@link
org.apache.juneau.BeanContext.Builder#beanFieldVisibility(Visibility)}
+ <br>{@link
org.apache.juneau.BeanContext.Builder#beanMethodVisibility(Visibility)}
</td>
</tr>
<tr>
@@ -5160,7 +5152,6 @@
<td><ja>@JacksonInject</ja></td>
<td>
No equivalent.
- <br>Future support planned.
</td>
</tr>
@@ -5180,7 +5171,6 @@
No equivalent annotation, but can be controlled via
various settings:
<br>{@link org.apache.juneau.BeanContext}
<br>{@link org.apache.juneau.serializer.Serializer}
- <br>Future annotation support planned.
</td>
</tr>
<tr>
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index 615856e..443f1cd 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -47,25 +47,25 @@
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.SerializerSetsParserSets'>SerializerSets
and ParserSets</a><span class='update'>updated: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps'>Swaps</a><span
class='update'>updated: <b>9.0.0</b></span></p>
<ol>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.DefaultPojoSwaps'>Default
PojoSwaps</a></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.AutoPojoSwaps'>Auto-detected POJO
swaps</a><span class='update'>created: 8.1.0</span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.PerMediaTypePojoSwaps'>Per-media-type
Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.OneWayPojoSwaps'>One-way
Swaps</a></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.SwapAnnotation'>@Swap
Annotation</a><span class='update'>updated: 8.0.0,
<b><red>todo</red></b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.DefaultSwaps'>Default Swaps</a></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.AutoSwaps'>Auto-detected
swaps</a><span class='update'>created: 8.1.0</span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.PerMediaTypeSwaps'>Per-media-type
Swaps</a><span class='update'>updated: 8.1.0,8.2.0</span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.OneWaySwaps'>One-way Swaps</a></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.SwapAnnotation'>@Swap
Annotation</a><span class='update'>updated: 8.0.0,<b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.TemplatedSwaps'>Templated
Swaps</a></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Swaps.SurrogateClasses'>Surrogate
Classes</a></p>
</ol>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.DynamicallyAppliedAnnotations'>Dynamically
Applied Annotations</a><span class='update'>created: 8.1.3</span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.BeanDictionaries'>Bean Names and
Dictionaries</a></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.DynamicallyAppliedAnnotations'>Dynamically
Applied Annotations</a><span class='update'>created: 8.1.3, updated:
<b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.BeanDictionaries'>Bean Names and
Dictionaries</a><span class='update'>updated: <b>9.0.0</b></span></p>
<ol>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.BeanDictionaries.BeanSubTypes'>Bean
Subtypes</a></p>
</ol>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.VirtualBeans'>Virtual Beans</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Recursion'>Non-Tree Models and Recursion
Detection</a></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.VirtualBeans'>Virtual Beans</a><span
class='update'>updated: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.Recursion'>Non-Tree Models and Recursion
Detection</a><span class='update'>updated: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.ParsingIntoGenericModels'>Parsing into
Generic Models</a><span class='update'>updated: 8.2.0</span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.ReadingContinuousStreams'>Reading
Continuous Streams</a></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.MarshallingUris'>URIs</a></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.JacksonComparison'>Comparison with
Jackson</a><span class='update'><b><red>review</red></b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.ReadingContinuousStreams'>Reading
Continuous Streams</a><span class='update'>updated: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.MarshallingUris'>URIs</a><span
class='update'>updated: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.JacksonComparison'>Comparison with
Jackson</a><span class='update'>updated: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.PojoCategories'>POJO Categories</a></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.FluentAssertions'>Fluent
Assertions</a><span class='update'>created: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-marshall.JsonDetails'>JSON Details</a></p>
diff --git a/juneau-doc/src/main/javadoc/resources/juneau-doc.css
b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
index 5732c0d..de7bf5d 100755
--- a/juneau-doc/src/main/javadoc/resources/juneau-doc.css
+++ b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
@@ -111,15 +111,6 @@ h4.topic {
cursor: zoom-out;
max-width: 1000px;
}
-h5.topic {
- margin-bottom: 20px;
- margin-top: 40px;
- padding-top: 3px;
- padding-left: 10px;
- color: #2c4557;
- border-top: 1px groove #9eadc0;
- max-width: 1000px;
-}
h2.topic { font-size: 14pt; }
h3.topic { font-size: 13pt; }
@@ -221,7 +212,7 @@ ul.toc div,
}
p.toc2 {
- background-color: #dee3e950;
+ background-color: #dee3e950;
}
span.update {
@@ -244,6 +235,14 @@ div.contentContainer > div.block > p:first-child {
max-width: 900px;
}
+h5.topic {
+ background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll
0% 0% transparent;
+ background: -moz-linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat
scroll 0% 0% transparent;
+ background: -webkit-gradient(linear, left top, left bottom,
from(#F5F5F5), to(#DEE3E9) );
+ max-width: 800px;
+}
+
+
/* Dark-colored background headers */
div.header > div.subTitle > div.block,
div.footer > div.subTitle > div.block > p:first-child,
@@ -257,10 +256,10 @@ body > p:first-child {
/* Header styles */
-h5.toc {
+h5.toc, h5.topic {
color: #2C4557;
- margin-bottom: 0px;
padding: 5px 30px;
+ margin-bottom: 0px;
border-radius: 10px 10px 10px 0px;
text-decoration: none;
box-shadow: 1px 1px 1px 0px rgba(0, 0, 0, 0.5);
@@ -351,10 +350,10 @@ l {
margin-top: 0px;
}
.doctree>li, .seealso>li {
- margin-bottom: 10px;
+ margin-bottom: 10px;
}
.doctree li, .seealso li {
- margin-top: 5px;
+ margin-top: 5px;
}
.doctree ul, .seealso ul {
padding: 0px 0px 0px 15px;
@@ -364,10 +363,10 @@ l {
/* Java Tree */
.javatree>li {
- margin-bottom: 1px;
+ margin-bottom: 1px;
}
.javatree li {
- margin-top: 1px;
+ margin-top: 1px;
}
.javatree ul {
padding: 0px 0px 0px 20px;
@@ -410,40 +409,40 @@ ul.seealso, ul.notes {
}
li.normal {
- list-style-image:none;
+ list-style-image:none;
}
li.link {
- list-style-image:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZ
[...]
+ list-style-image:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPS
[...]
}
li.sublink {
- list-style-image:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZ
[...]
+ list-style-image:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPS
[...]
}
li.extlink {
- list-style-image:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZ
[...]
+ list-style-image:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPS
[...]
}
li.jc {
- list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZ
[...]
+ list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZzIG
[...]
}
li.jac {
- list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZ
[...]
+ list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZzIG
[...]
}
li.jic {
- list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZ
[...]
+ list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZzIG
[...]
}
li.ja {
- list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZ
[...]
+ list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZzIG
[...]
}
li.jm {
- list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxMiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTE4MCA0ODAgNzIwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZ
[...]
+ list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxMiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTE4MCA0ODAgNzIwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZzIG
[...]
}
li.jf {
- list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxMiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTE4MCA0ODAgNzIwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDk2MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZ
[...]
+ list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxMiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTE4MCA0ODAgNzIwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDk2MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZzIG
[...]
}
li.jp {
- list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZ
[...]
+ list-style-image:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIxNiIgCgl3aWR0aD0iMjQiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiBib2xkIDM1MHB4IHNhbnMtc2VyaWY7IHRleHQtc2hhZG93OiAxcHggMXB4IDFweCBibGFjazt9CiAgPC9zdHlsZT4KCTxkZWZzIG
[...]
}
ul.notes>li {
- background:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIyNCIgCgl3aWR0aD0iMzIiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiAzNTBweCBzYW5zLXNlcmlmOyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggYmxhY2s7fQogIDwvc3R5bGU+Cgk8ZGVmcyBpZD0iZGVmc
[...]
+ background:
url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgCglpZD0ic3ZnMjgxMCIgCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIAoJeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIAoJaGVpZ2h0PSIyNCIgCgl3aWR0aD0iMzIiIAoJdmVyc2lvbj0iMS4wIiAKCXZpZXdCb3g9IjAgLTEyMCA0ODAgNjAwIj4KICA8c3R5bGU+CiAgICAuaGVhdnkgeyBmb250OiAzNTBweCBzYW5zLXNlcmlmOyB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggYmxhY2s7fQogIDwvc3R5bGU+Cgk8ZGVmcyBpZD0iZGVmczI4
[...]
padding: 5px 10px 10px 40px;
list-style: none;
margin-left: -40px;
@@ -464,8 +463,8 @@ ul.notes ul.compact li {
/* Article links */
a.doclink {
text-decoration: none;
- color: #4c6b87;
- font-weight: bold;
+ color: #4c6b87;
+ font-weight: bold;
border-bottom: 1px dotted #4c6b87;
}