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 1568cb4 Javadocs
1568cb4 is described below
commit 1568cb47bfdccc781c25c9cccaa81ee6f990eb4d
Author: JamesBognar <[email protected]>
AuthorDate: Sun Jan 2 18:43:16 2022 -0500
Javadocs
---
.../02.jm.SerializersAndParsers.html | 2 +
.../02.jrs.JavaMethodParameters.html | 2 +-
.../06.juneau-rest-server/05.jrs.Marshalling.html | 4 +
.../22.jrs.CustomSerializersAndParsers.html | 133 -------------
...singWithOsgi.html => 22.jrs.UsingWithOsgi.html} | 2 +-
...24.jrs.Injection.html => 23.jrs.Injection.html} | 0
....jrs.OtherNotes.html => 24.jrs.OtherNotes.html} | 0
...rs.RestContext.html => 25.jrs.RestContext.html} | 0
.../{27.jrs.RestRpc.html => 26.jrs.RestRpc.html} | 0
...l => 27.jrs.CustomRestContextsAndBuilders.html} | 0
...rocessors.html => 28.jrs.FluentAssertions.html} | 0
....jrs.UtilityBeans.html => 29.jrs.Overview.html} | 0
...ertions.html => 30.jrs.ResponseProcessors.html} | 0
....jrs.Overview.html => 31.jrs.UtilityBeans.html} | 0
...lizingUris.html => 32.jrs.SerializingUris.html} | 0
juneau-doc/src/main/javadoc/overview.html | 217 +++++----------------
juneau-doc/src/main/javadoc/resources/docs.txt | 1 -
.../src/main/javadoc/resources/fragments/toc.html | 7 +-
.../apache/juneau/examples/parser/ImageParser.java | 5 +
.../examples/serializer/ImageSerializer.java | 5 +
.../juneau/examples/rest/PhotosResource.java | 7 +
21 files changed, 78 insertions(+), 307 deletions(-)
diff --git
a/juneau-doc/docs/Topics/02.juneau-marshall/02.jm.SerializersAndParsers.html
b/juneau-doc/docs/Topics/02.juneau-marshall/02.jm.SerializersAndParsers.html
index 100dc5b..9d5de4d 100644
--- a/juneau-doc/docs/Topics/02.juneau-marshall/02.jm.SerializersAndParsers.html
+++ b/juneau-doc/docs/Topics/02.juneau-marshall/02.jm.SerializersAndParsers.html
@@ -176,5 +176,7 @@
<ul class='seealso'>
<li class='doclink'>{@doc g.LanguageSupport Language Support} -
Glossary of all supported languages.
+ <li class='jc'>{@link oaj.examples.serializer.ImageSerializer}
- Example of a custom serializer.
+ <li class='jc'>{@link oaj.examples.parser.ImageParser} -
Example of a custom parser.
</ul>
</div>
\ No newline at end of file
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html
index f66165c..d3cb595 100644
---
a/juneau-doc/docs/Topics/06.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html
+++
b/juneau-doc/docs/Topics/06.juneau-rest-server/03.jrs.RestOpAnnotatedMethods/02.jrs.JavaMethodParameters.html
@@ -123,7 +123,7 @@
<li class='jic'>{@link
oaj.cp.FileFinder}
<li class='jc'>{@link
oaj.jsonschema.JsonSchemaGenerator}
<li class='jc'>{@link
java.util.Logger}
- <li class='jc'>{@link
oaj.stats.MethodExecStore}
+ <li class='jc'>{@link
oajr.stats.MethodExecStore}
<li class='jc'>{@link
oaj.parser.ParserSet}
<li class='jc'>{@link
oajr.RestChildren}
<li class='jc'>{@link
oajr.RestContext}
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/05.jrs.Marshalling.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/05.jrs.Marshalling.html
index 1197a2e..2e534dd 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/05.jrs.Marshalling.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/05.jrs.Marshalling.html
@@ -168,4 +168,8 @@
<li class='ja'>{@link
oaj.urlencoding.annotation.UrlEncodingConfig UrlEncodingConfig}
<li class='ja'>{@link oaj.xml.annotation.XmlConfig XmlConfig}
</ul>
+
+ <ul class='seealso'>
+ <li class='jc'>{@link oajr.examples.PhotoResource} - An example
of a REST resource that uses a custom serializer and parser.
+ </ul>
</div>
\ No newline at end of file
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/22.jrs.CustomSerializersAndParsers.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/22.jrs.CustomSerializersAndParsers.html
deleted file mode 100644
index 08b40cd..0000000
---
a/juneau-doc/docs/Topics/06.juneau-rest-server/22.jrs.CustomSerializersAndParsers.html
+++ /dev/null
@@ -1,133 +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:'Custom Serializers and Parsers', flags:'todo'}
-
-<div class='topic'>
- <p>
- A very easy-to-use API is provided for defining your own
serializers and parsers at both the servlet and
- method levels.
- </p>
- <p>
- The following examples show a custom serializer and parser
defined at the method level.
- It's the <l>PhotosResource</l> class pulled from the Samples
project.
- It shows an example of defining a serializer and parser to
handle images.
- </p>
- <p class='bcode w800'>
- | <jd>/**
- | * Sample resource that allows images to be uploaded
and retrieved.
- | */</jd>
- | <ja>@Rest</ja>(
- | path=<js>"/photos"</js>,
- | messages=<js>"nls/PhotosResource"</js>,
- | title=<js>"Photo REST service"</js>,
- | description=<js>"Use a tool like Poster to
upload and retrieve jpeg and png images."</js>,
- | htmldoc=<ja>@HtmlDoc</ja>(
- | navlinks={
- | <js>"options:
?method=OPTIONS"</js>
- | }
- | )
- | )
- | <jk>public class</jk> PhotosResource <jk>extends</jk>
BasicRestServlet {
- |
- | <jc>// Our cache of photos</jc>
- | <jk>private</jk> Map<Integer,Photo>
<jf>photos</jf> = <jk>new</jk> TreeMap<Integer,Photo>();
- |
- | <jd>/** Bean class for storing photos */</jd>
- | <jk>public static class</jk> Photo {
- | <jk>private int</jk> <jf>id</jf>;
- | BufferedImage <jf>image</jf>;
- |
- | Photo(<jk>int</jk> <jv>id</jv>,
BufferedImage <jv>image</jv>) {
- | <jk>this</jk>.<jf>id</jf> =
<jv>id</jv>;
- | <jk>this</jk>.<jf>image</jf> =
<jv>image</jv>;
- | }
- |
- | <jk>public</jk> URI getURI()
<jk>throws</jk> URISyntaxException {
- | <jk>return new</jk>
URI(<js>"photos/"</js>+<jf>id</jf>);
- | }
- |
- | <jk>public int</jk> getID() {
- | <jk>return</jk> <jf>id</jf>;
- | }
- | }
- |
- | <jd>/** GET request handler for list of all
photos */</jd>
- | <ja>@RestGet</ja>(<js>"/"</js>)
- | <jk>public</jk> Collection<Photo>
getAllPhotos(RestRequest <jv>req</jv>, RestResponse <jv>res</jv>)
<jk>throws</jk> Exception {
- | <jv>res</jv>.setPageTitle(<js>"Photo
REST service"</js>);
- | <jv>res</jv>.setPageText(<js>"Use a
tool like Poster to upload and retrieve jpeg and png images."</js>);
- | <jk>return</jk>
<jf>photos</jf>.values();
- | }
- |
- | <jd>/** GET request handler for single photo
*/</jd>
- | <ja>@RestGet</ja>(path=<js>"/{id}"</js>,
serializers=ImageSerializer.<jk>class</jk>)
- | <jk>public</jk> BufferedImage
getPhoto(RestRequest <jv>req</jv>, <ja>@Path</ja>(<js>"id"</js>) <jk>int</jk>
<jv>id</jv>) <jk>throws</jk> Exception {
- | Photo <jv>p</jv> =
<jf>photos</jf>.get(<jv>id</jv>);
- | <jk>if</jk> (<jv>p</jv> ==
<jk>null</jk>)
- | <jk>throw new</jk>
RestException(<jsf>SC_NOT_FOUND</jsf>, <js>"Photo not found"</js>);
- | <jk>return</jk>
<jv>p</jv>.<jf>image</jf>;
- | }
- |
- | <jd>/** PUT request handler */</jd>
- | <ja>@RestPut</ja>(path=<js>"/{id}"</js>,
parsers=ImageParser.<jk>class</jk>)
- | <jk>public</jk> String addPhoto(RestRequest
<jv>req</jv>, <ja>@Path</ja>(<js>"id"</js>) <jk>int</jk> <jv>id</jv>,
<ja>@Body</ja> BufferedImage <jv>image</jv>) <jk>throws</jk> Exception {
- | <jf>photos</jf>.put(<jv>id</jv>,
<jk>new</jk> Photo(<jv>id</jv>, <jv>image</jv>));
- | <jk>return</jk> <js>"OK"</js>;
- | }
- |
- | <jd>/** POST request handler */</jd>
- | <ja>@RestPost</ja>(path=<js>"/"</js>,
parsers=ImageParser.<jk>class</jk>)
- | <jk>public</jk> Photo setPhoto(RestRequest
<jv>req</jv>, <ja>@Body</ja> BufferedImage <jv>image</jv>) <jk>throws</jk>
Exception {
- | <jk>int</jk> <jv>id</jv> =
<jf>photos</jf>.size();
- | Photo <jv>p</jv> = <jk>new</jk>
Photo(<jv>id</jv>, <jv>image</jv>);
- | <jf>photos</jf>.put(<jv>id</jv>,
<jv>p</jv>);
- | <jk>return</jk> <jv>p</jv>;
- | }
- |
- | <jd>/** DELETE request handler */</jd>
- | <ja>@RestDelete</ja>(<js>"/{id}"</js>)
- | <jk>public</jk> String deletePhoto(RestRequest
<jv>req</jv>, <ja>@Path</ja>(<js>"id"</js>) <jk>int</jk> <jv>id</jv>)
<jk>throws</jk> Exception {
- | Photo <jv>p</jv> =
<jf>photos</jf>.remove(<jv>id</jv>);
- | <jk>if</jk> (<jv>p</jv> ==
<jk>null</jk>)
- | <jk>throw new</jk>
RestException(<jsf>SC_NOT_FOUND</jsf>, <js>"Photo not found"</js>);
- | <jk>return</jk> <js>"OK"</js>;
- | }
- |
- | <jd>/** Serializer for converting images to
byte streams */</jd>
- |
<ja>@Produces</ja>(<js>"image/png,image/jpeg"</js>)
- | <jk>public static class</jk> ImageSerializer
<jk>extends</jk> OutputStreamSerializer {
- |
- | <ja>@Override</ja> <jc>/* Serializer
*/</jc>
- | <jk>public void</jk> serialize(Object
<jv>o</jv>, OutputStream <jv>out</jv>, SerializerSession <jv>session</jv>)
<jk>throws</jk> IOException, SerializeException {
- | RenderedImage <jv>image</jv> =
(RenderedImage)<jv>o</jv>;
- | String <jv>mediaType</jv> =
<jv>session</jv>.getMediaType();
- |
ImageIO.<jsm>write</jsm>(<jv>image</jv>,
<jv>mediaType</jv>.substring(<jv>mediaType</jv>.indexOf(<js>'/'</js>)+1),
<jv>out</jv>);
- | }
- | }
- |
- | <jd>/** Parser for converting byte streams to
images */</jd>
- |
<ja>@Consumes</ja>(<js>"image/png,image/jpeg"</js>)
- | <jk>public static class</jk> ImageParser
<jk>extends</jk> InputStreamParser {
- |
- | <ja>@Override</ja> <jc>/* Parser */</jc>
- | <jk>public</jk> <T> T
parse(InputStream <jv>in</jv>, ClassMeta<T> <jv>type</jv>, ParserSession
<jv>session</jv>) <jk>throws</jk> ParseException, IOException {
- | BufferedImage <jv>image</jv> =
ImageIO.<jsm>read</jsm>(<jv>in</jv>);
- | <jk>return</jk>
(T)<jv>image</jv>;
- | }
- | }
- | }
- </p>
-</div>
\ No newline at end of file
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/23.jrs.UsingWithOsgi.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/22.jrs.UsingWithOsgi.html
similarity index 98%
rename from
juneau-doc/docs/Topics/06.juneau-rest-server/23.jrs.UsingWithOsgi.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/22.jrs.UsingWithOsgi.html
index cb9b5c3..a5222aa 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/23.jrs.UsingWithOsgi.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/22.jrs.UsingWithOsgi.html
@@ -13,7 +13,7 @@
***************************************************************************************************************************/
-->
-{title:'Using with OSGi', flags:'todo'}
+{title:'Using with OSGi'}
<div class='topic'>
<p>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/24.jrs.Injection.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/23.jrs.Injection.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/24.jrs.Injection.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/23.jrs.Injection.html
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/25.jrs.OtherNotes.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/24.jrs.OtherNotes.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/25.jrs.OtherNotes.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/24.jrs.OtherNotes.html
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/26.jrs.RestContext.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/25.jrs.RestContext.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/26.jrs.RestContext.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/25.jrs.RestContext.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/27.jrs.RestRpc.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/26.jrs.RestRpc.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/27.jrs.RestRpc.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/26.jrs.RestRpc.html
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/28.jrs.CustomRestContextsAndBuilders.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/27.jrs.CustomRestContextsAndBuilders.html
similarity index 100%
rename from
juneau-doc/docs/Topics/06.juneau-rest-server/28.jrs.CustomRestContextsAndBuilders.html
rename to
juneau-doc/docs/Topics/06.juneau-rest-server/27.jrs.CustomRestContextsAndBuilders.html
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/31.jrs.ResponseProcessors.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/28.jrs.FluentAssertions.html
similarity index 100%
rename from
juneau-doc/docs/Topics/06.juneau-rest-server/31.jrs.ResponseProcessors.html
rename to
juneau-doc/docs/Topics/06.juneau-rest-server/28.jrs.FluentAssertions.html
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/32.jrs.UtilityBeans.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/29.jrs.Overview.html
similarity index 100%
rename from
juneau-doc/docs/Topics/06.juneau-rest-server/32.jrs.UtilityBeans.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/29.jrs.Overview.html
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/29.jrs.FluentAssertions.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/30.jrs.ResponseProcessors.html
similarity index 100%
rename from
juneau-doc/docs/Topics/06.juneau-rest-server/29.jrs.FluentAssertions.html
rename to
juneau-doc/docs/Topics/06.juneau-rest-server/30.jrs.ResponseProcessors.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/30.jrs.Overview.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/31.jrs.UtilityBeans.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/30.jrs.Overview.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/31.jrs.UtilityBeans.html
diff --git
a/juneau-doc/docs/Topics/06.juneau-rest-server/33.jrs.SerializingUris.html
b/juneau-doc/docs/Topics/06.juneau-rest-server/32.jrs.SerializingUris.html
similarity index 100%
rename from
juneau-doc/docs/Topics/06.juneau-rest-server/33.jrs.SerializingUris.html
rename to
juneau-doc/docs/Topics/06.juneau-rest-server/32.jrs.SerializingUris.html
diff --git a/juneau-doc/src/main/javadoc/overview.html
b/juneau-doc/src/main/javadoc/overview.html
index 5d0a75f..b22a1ed 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -402,10 +402,9 @@
<li><p><a class='doclink'
href='#juneau-rest-server.jrs.HtmlDocAnnotation.jrs.HtmlStylesheets'>Stylesheets</a><span
class='update'>updated: 8.1.0,<b>9.0.0</b></span></p>
</ol>
<li><p><a class='doclink'
href='#juneau-rest-server.jrs.LoggingAndDebugging'>Logging / Debugging</a><span
class='update'>created: <b>9.0.0</b></span></p>
- <li><p><a class='doclink'
href='#juneau-rest-server.jrs.HttpStatusCodes'>HTTP Status Codes</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='#juneau-rest-server.jrs.OverloadingHttpMethods'>Overloading HTTP
Methods</a><span class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='#juneau-rest-server.jrs.BuiltInParameters'>Built-in Parameters</a><span
class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='#juneau-rest-server.jrs.CustomSerializersAndParsers'>Custom Serializers
and Parsers</a><span class='update'><b><red>todo</red></b></span></p>
+ <li><p><a class='doclink'
href='#juneau-rest-server.jrs.HttpStatusCodes'>HTTP Status Codes</a><span
class='update'>updated: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='#juneau-rest-server.jrs.OverloadingHttpMethods'>Overloading HTTP
Methods</a></p>
+ <li><p><a class='doclink'
href='#juneau-rest-server.jrs.BuiltInParameters'>Built-in Parameters</a><span
class='update'>updated: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='#juneau-rest-server.jrs.UsingWithOsgi'>Using with OSGi</a><span
class='update'><b><red>todo</red></b></span></p>
<li><p><a class='doclink'
href='#juneau-rest-server.jrs.Injection'>Using with Spring and Injection
frameworks</a><span class='update'><b><red>todo</red></b></span></p>
<li><p><a class='doclink'
href='#juneau-rest-server.jrs.OtherNotes'>Other Notes</a><span
class='update'><b><red>todo</red></b></span></p>
@@ -2313,6 +2312,8 @@
<ul class='seealso'>
<li class='doclink'>{@doc g.LanguageSupport Language Support} -
Glossary of all supported languages.
+ <li class='jc'>{@link
org.apache.juneau.examples.serializer.ImageSerializer} - Example of a custom
serializer.
+ <li class='jc'>{@link
org.apache.juneau.examples.parser.ImageParser} - Example of a custom parser.
</ul>
</div>
</div><!-- END: 2.2 - juneau-marshall.jm.SerializersAndParsers -->
@@ -15722,7 +15723,7 @@
<li class='jic'>{@link
org.apache.juneau.cp.FileFinder}
<li class='jc'>{@link
org.apache.juneau.jsonschema.JsonSchemaGenerator}
<li class='jc'>{@link
java.util.Logger}
- <li class='jc'>{@link
org.apache.juneau.stats.MethodExecStore}
+ <li class='jc'>{@link
org.apache.juneau.rest.stats.MethodExecStore}
<li class='jc'>{@link
org.apache.juneau.parser.ParserSet}
<li class='jc'>{@link
org.apache.juneau.rest.RestChildren}
<li class='jc'>{@link
org.apache.juneau.rest.RestContext}
@@ -17286,6 +17287,10 @@
<li class='ja'>{@link
org.apache.juneau.urlencoding.annotation.UrlEncodingConfig UrlEncodingConfig}
<li class='ja'>{@link
org.apache.juneau.xml.annotation.XmlConfig XmlConfig}
</ul>
+
+ <ul class='seealso'>
+ <li class='jc'>{@link
org.apache.juneau.rest.examples.PhotoResource} - An example of a REST resource
that uses a custom serializer and parser.
+ </ul>
</div>
</div><!-- END: 6.5 - juneau-rest-server.jrs.Marshalling -->
@@ -20039,7 +20044,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.HttpStatusCodes'
id='juneau-rest-server.jrs.HttpStatusCodes'>6.19 - HTTP Status Codes</a><span
class='update'><b><red>todo</red></b></span></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.HttpStatusCodes'
id='juneau-rest-server.jrs.HttpStatusCodes'>6.19 - HTTP Status Codes</a><span
class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 6.19 - juneau-rest-server.jrs.HttpStatusCodes
-->
<div class='topic'>
<p>
@@ -20047,7 +20052,7 @@
successfully.
</p>
<p>
- Other status codes can be generated by throwing a {@del
org.apache.juneau.rest.RestException} with a
+ Other status codes can be generated by throwing a {@del
org.apache.juneau.http.response.BasicHttpException} with a
specific HTTP status code, or calling {@link
javax.servlet.http.HttpServletResponse#setStatus(int)}.
</p>
<p>
@@ -20101,7 +20106,7 @@
<tr>
<td><l>500</l></td>
<td>Internal Server Error</td>
- <td>The Java method threw an exception other than {@del
org.apache.juneau.rest.RestException}</td>
+ <td>The Java method threw an exception other than
{@link org.apache.juneau.http.response.BasicHttpException}</td>
</tr>
</table>
</div>
@@ -20109,7 +20114,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.OverloadingHttpMethods'
id='juneau-rest-server.jrs.OverloadingHttpMethods'>6.20 - Overloading HTTP
Methods</a><span class='update'><b><red>todo</red></b></span></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.OverloadingHttpMethods'
id='juneau-rest-server.jrs.OverloadingHttpMethods'>6.20 - Overloading HTTP
Methods</a></h3>
<div class='topic'><!-- START: 6.20 -
juneau-rest-server.jrs.OverloadingHttpMethods -->
<div class='topic'>
<p>
@@ -20140,7 +20145,7 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.BuiltInParameters'
id='juneau-rest-server.jrs.BuiltInParameters'>6.21 - Built-in
Parameters</a><span class='update'><b><red>todo</red></b></span></h3>
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.BuiltInParameters'
id='juneau-rest-server.jrs.BuiltInParameters'>6.21 - Built-in
Parameters</a><span class='update'>updated: <b>9.0.0</b></span></h3>
<div class='topic'><!-- START: 6.21 - juneau-rest-server.jrs.BuiltInParameters
-->
<div class='topic'>
<p>
@@ -20155,14 +20160,14 @@
<td class='code'>&plainText=true</td>
<td>
Response will always be <l>Content-Type:
text/plain</l> and the returned text will be human-readable
- ({@del
org.apache.juneau.serializer.WriterSerializer#WSERIALIZER_useWhitespace
WSERIALIZER_useWhitespace} enabled).
+ ({@link
org.apache.juneau.serializer.WriterSerializer.Builder#useWhitespace()} enabled).
<br>Useful for debugging.
</td>
</tr>
<tr>
<td class='code'>&debug=true</td>
<td>
- Request body content will be dumped to log file.
+ Enable debug mode for request.
</td>
</tr>
<tr>
@@ -20207,130 +20212,8 @@
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.CustomSerializersAndParsers'
id='juneau-rest-server.jrs.CustomSerializersAndParsers'>6.22 - Custom
Serializers and Parsers</a><span
class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.22 -
juneau-rest-server.jrs.CustomSerializersAndParsers -->
-<div class='topic'>
- <p>
- A very easy-to-use API is provided for defining your own
serializers and parsers at both the servlet and
- method levels.
- </p>
- <p>
- The following examples show a custom serializer and parser
defined at the method level.
- It's the <l>PhotosResource</l> class pulled from the Samples
project.
- It shows an example of defining a serializer and parser to
handle images.
- </p>
- <p class='bcode w800'>
- <jd>/**
- * Sample resource that allows images to be uploaded and retrieved.
- */</jd>
- <ja>@Rest</ja>(
- path=<js>"/photos"</js>,
- messages=<js>"nls/PhotosResource"</js>,
- title=<js>"Photo REST service"</js>,
- description=<js>"Use a tool like Poster to upload and retrieve
jpeg and png images."</js>,
- htmldoc=<ja>@HtmlDoc</ja>(
- navlinks={
- <js>"options: ?method=OPTIONS"</js>
- }
- )
- )
- <jk>public class</jk> PhotosResource <jk>extends</jk> BasicRestServlet {
-
- <jc>// Our cache of photos</jc>
- <jk>private</jk> Map<Integer,Photo> <jf>photos</jf> =
<jk>new</jk> TreeMap<Integer,Photo>();
-
- <jd>/** Bean class for storing photos */</jd>
- <jk>public static class</jk> Photo {
- <jk>private int</jk> <jf>id</jf>;
- BufferedImage <jf>image</jf>;
-
- Photo(<jk>int</jk> <jv>id</jv>, BufferedImage
<jv>image</jv>) {
- <jk>this</jk>.<jf>id</jf> = <jv>id</jv>;
- <jk>this</jk>.<jf>image</jf> = <jv>image</jv>;
- }
-
- <jk>public</jk> URI getURI() <jk>throws</jk>
URISyntaxException {
- <jk>return new</jk>
URI(<js>"photos/"</js>+<jf>id</jf>);
- }
-
- <jk>public int</jk> getID() {
- <jk>return</jk> <jf>id</jf>;
- }
- }
-
- <jd>/** GET request handler for list of all photos */</jd>
- <ja>@RestGet</ja>(<js>"/"</js>)
- <jk>public</jk> Collection<Photo>
getAllPhotos(RestRequest <jv>req</jv>, RestResponse <jv>res</jv>)
<jk>throws</jk> Exception {
- <jv>res</jv>.setPageTitle(<js>"Photo REST
service"</js>);
- <jv>res</jv>.setPageText(<js>"Use a tool like Poster to
upload and retrieve jpeg and png images."</js>);
- <jk>return</jk> <jf>photos</jf>.values();
- }
-
- <jd>/** GET request handler for single photo */</jd>
- <ja>@RestGet</ja>(path=<js>"/{id}"</js>,
serializers=ImageSerializer.<jk>class</jk>)
- <jk>public</jk> BufferedImage getPhoto(RestRequest
<jv>req</jv>, <ja>@Path</ja>(<js>"id"</js>) <jk>int</jk> <jv>id</jv>)
<jk>throws</jk> Exception {
- Photo <jv>p</jv> = <jf>photos</jf>.get(<jv>id</jv>);
- <jk>if</jk> (<jv>p</jv> == <jk>null</jk>)
- <jk>throw new</jk>
RestException(<jsf>SC_NOT_FOUND</jsf>, <js>"Photo not found"</js>);
- <jk>return</jk> <jv>p</jv>.<jf>image</jf>;
- }
-
- <jd>/** PUT request handler */</jd>
- <ja>@RestPut</ja>(path=<js>"/{id}"</js>,
parsers=ImageParser.<jk>class</jk>)
- <jk>public</jk> String addPhoto(RestRequest <jv>req</jv>,
<ja>@Path</ja>(<js>"id"</js>) <jk>int</jk> <jv>id</jv>, <ja>@Body</ja>
BufferedImage <jv>image</jv>) <jk>throws</jk> Exception {
- <jf>photos</jf>.put(<jv>id</jv>, <jk>new</jk>
Photo(<jv>id</jv>, <jv>image</jv>));
- <jk>return</jk> <js>"OK"</js>;
- }
-
- <jd>/** POST request handler */</jd>
- <ja>@RestPost</ja>(path=<js>"/"</js>,
parsers=ImageParser.<jk>class</jk>)
- <jk>public</jk> Photo setPhoto(RestRequest <jv>req</jv>,
<ja>@Body</ja> BufferedImage <jv>image</jv>) <jk>throws</jk> Exception {
- <jk>int</jk> <jv>id</jv> = <jf>photos</jf>.size();
- Photo <jv>p</jv> = <jk>new</jk> Photo(<jv>id</jv>,
<jv>image</jv>);
- <jf>photos</jf>.put(<jv>id</jv>, <jv>p</jv>);
- <jk>return</jk> <jv>p</jv>;
- }
-
- <jd>/** DELETE request handler */</jd>
- <ja>@RestDelete</ja>(<js>"/{id}"</js>)
- <jk>public</jk> String deletePhoto(RestRequest <jv>req</jv>,
<ja>@Path</ja>(<js>"id"</js>) <jk>int</jk> <jv>id</jv>) <jk>throws</jk>
Exception {
- Photo <jv>p</jv> = <jf>photos</jf>.remove(<jv>id</jv>);
- <jk>if</jk> (<jv>p</jv> == <jk>null</jk>)
- <jk>throw new</jk>
RestException(<jsf>SC_NOT_FOUND</jsf>, <js>"Photo not found"</js>);
- <jk>return</jk> <js>"OK"</js>;
- }
-
- <jd>/** Serializer for converting images to byte streams */</jd>
- <ja>@Produces</ja>(<js>"image/png,image/jpeg"</js>)
- <jk>public static class</jk> ImageSerializer <jk>extends</jk>
OutputStreamSerializer {
-
- <ja>@Override</ja> <jc>/* Serializer */</jc>
- <jk>public void</jk> serialize(Object <jv>o</jv>,
OutputStream <jv>out</jv>, SerializerSession <jv>session</jv>) <jk>throws</jk>
IOException, SerializeException {
- RenderedImage <jv>image</jv> =
(RenderedImage)<jv>o</jv>;
- String <jv>mediaType</jv> =
<jv>session</jv>.getMediaType();
- ImageIO.<jsm>write</jsm>(<jv>image</jv>,
<jv>mediaType</jv>.substring(<jv>mediaType</jv>.indexOf(<js>'/'</js>)+1),
<jv>out</jv>);
- }
- }
-
- <jd>/** Parser for converting byte streams to images */</jd>
- <ja>@Consumes</ja>(<js>"image/png,image/jpeg"</js>)
- <jk>public static class</jk> ImageParser <jk>extends</jk>
InputStreamParser {
-
- <ja>@Override</ja> <jc>/* Parser */</jc>
- <jk>public</jk> <T> T parse(InputStream
<jv>in</jv>, ClassMeta<T> <jv>type</jv>, ParserSession <jv>session</jv>)
<jk>throws</jk> ParseException, IOException {
- BufferedImage <jv>image</jv> =
ImageIO.<jsm>read</jsm>(<jv>in</jv>);
- <jk>return</jk> (T)<jv>image</jv>;
- }
- }
- }
- </p>
-</div>
-</div><!-- END: 6.22 - juneau-rest-server.jrs.CustomSerializersAndParsers -->
-
-<!--
====================================================================================================
-->
-
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.UsingWithOsgi'
id='juneau-rest-server.jrs.UsingWithOsgi'>6.23 - Using with OSGi</a><span
class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.23 - juneau-rest-server.jrs.UsingWithOsgi -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.UsingWithOsgi'
id='juneau-rest-server.jrs.UsingWithOsgi'>6.22 - Using with OSGi</a><span
class='update'><b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 6.22 - juneau-rest-server.jrs.UsingWithOsgi -->
<div class='topic'>
<p>
Since REST servlets are basically just <l>HttpServlets</l>,
incorporating them into an OSGi environment
@@ -20394,12 +20277,12 @@
}
</p>
</div>
-</div><!-- END: 6.23 - juneau-rest-server.jrs.UsingWithOsgi -->
+</div><!-- END: 6.22 - juneau-rest-server.jrs.UsingWithOsgi -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.Injection'
id='juneau-rest-server.jrs.Injection'>6.24 - Using with Spring and Injection
frameworks</a><span class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.24 - juneau-rest-server.jrs.Injection -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.Injection'
id='juneau-rest-server.jrs.Injection'>6.23 - Using with Spring and Injection
frameworks</a><span class='update'><b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 6.23 - juneau-rest-server.jrs.Injection -->
<div class='topic'>
<p>
The Juneau REST server API is compatible with dependency
injection frameworks such as Spring.
@@ -20503,12 +20386,12 @@
}
</p>
</div>
-</div><!-- END: 6.24 - juneau-rest-server.jrs.Injection -->
+</div><!-- END: 6.23 - juneau-rest-server.jrs.Injection -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.OtherNotes'
id='juneau-rest-server.jrs.OtherNotes'>6.25 - Other Notes</a><span
class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.25 - juneau-rest-server.jrs.OtherNotes -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.OtherNotes'
id='juneau-rest-server.jrs.OtherNotes'>6.24 - Other Notes</a><span
class='update'><b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 6.24 - juneau-rest-server.jrs.OtherNotes -->
<div class='topic'>
<ul class='spaced-list'>
<li>
@@ -20521,12 +20404,12 @@
parameter can be specified:
<l>"/sample?X-Response-Headers={Refresh=1}"</l>
</ul>
</div>
-</div><!-- END: 6.25 - juneau-rest-server.jrs.OtherNotes -->
+</div><!-- END: 6.24 - juneau-rest-server.jrs.OtherNotes -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.RestContext'
id='juneau-rest-server.jrs.RestContext'>6.26 - RestContext</a><span
class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.26 - juneau-rest-server.jrs.RestContext -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.RestContext'
id='juneau-rest-server.jrs.RestContext'>6.25 - RestContext</a><span
class='update'><b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 6.25 - juneau-rest-server.jrs.RestContext -->
<div class='topic'>
<p>
The {@link org.apache.juneau.rest.RestContext} object is the
workhorse class for all of the configuration
@@ -20576,12 +20459,12 @@
resource finders, info providers, etc...
</p>
</div>
-</div><!-- END: 6.26 - juneau-rest-server.jrs.RestContext -->
+</div><!-- END: 6.25 - juneau-rest-server.jrs.RestContext -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.RestRpc' id='juneau-rest-server.jrs.RestRpc'>6.27
- REST/RPC</a><span class='update'>updated: 8.0.0,
<b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.27 - juneau-rest-server.jrs.RestRpc -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.RestRpc' id='juneau-rest-server.jrs.RestRpc'>6.26
- REST/RPC</a><span class='update'>updated: 8.0.0,
<b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 6.26 - juneau-rest-server.jrs.RestRpc -->
<div class='topic'>
<p>
The REST/RPC (RPC over REST) API allows the creation of
client-side remote proxy interfaces for calling methods on server-side POJOs
using entirely REST.
@@ -20903,12 +20786,12 @@
<h5 class='figure'>Sample form entry page results</h5>
<img class='bordered w800' src='doc-files/jrs.restRPC.9.png'>
</div>
-</div><!-- END: 6.27 - juneau-rest-server.jrs.RestRpc -->
+</div><!-- END: 6.26 - juneau-rest-server.jrs.RestRpc -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.CustomRestContextsAndBuilders'
id='juneau-rest-server.jrs.CustomRestContextsAndBuilders'>6.28 - Custom REST
Context and Builders</a><span class='update'>created: <b>9.0.0</b>,
<b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.28 -
juneau-rest-server.jrs.CustomRestContextsAndBuilders -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.CustomRestContextsAndBuilders'
id='juneau-rest-server.jrs.CustomRestContextsAndBuilders'>6.27 - Custom REST
Context and Builders</a><span class='update'>created: <b>9.0.0</b>,
<b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 6.27 -
juneau-rest-server.jrs.CustomRestContextsAndBuilders -->
<div class='topic'>
<p>
They can also be defined programmatically:
@@ -20942,56 +20825,56 @@
}
</p>
</div>
-</div><!-- END: 6.28 - juneau-rest-server.jrs.CustomRestContextsAndBuilders -->
+</div><!-- END: 6.27 - juneau-rest-server.jrs.CustomRestContextsAndBuilders -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.FluentAssertions'
id='juneau-rest-server.jrs.FluentAssertions'>6.29 - Fluent Assertions</a><span
class='update'>created: <b>9.0.0</b>, <b><red>TODO</red></b></span></h3>
-<div class='topic'><!-- START: 6.29 - juneau-rest-server.jrs.FluentAssertions
-->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.FluentAssertions'
id='juneau-rest-server.jrs.FluentAssertions'>6.28 - Fluent Assertions</a><span
class='update'>created: <b>9.0.0</b>, <b><red>TODO</red></b></span></h3>
+<div class='topic'><!-- START: 6.28 - juneau-rest-server.jrs.FluentAssertions
-->
<div class='topic'>
<p>
TODO
</p>
</div>
-</div><!-- END: 6.29 - juneau-rest-server.jrs.FluentAssertions -->
+</div><!-- END: 6.28 - juneau-rest-server.jrs.FluentAssertions -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.Overview'
id='juneau-rest-server.jrs.Overview'>6.30 - Utility Beans</a><span
class='update'>created: <b>9.0.0</b>, <b><red>TODO</red></b></span></h3>
-<div class='topic'><!-- START: 6.30 - juneau-rest-server.jrs.Overview -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.Overview'
id='juneau-rest-server.jrs.Overview'>6.29 - Utility Beans</a><span
class='update'>created: <b>9.0.0</b>, <b><red>TODO</red></b></span></h3>
+<div class='topic'><!-- START: 6.29 - juneau-rest-server.jrs.Overview -->
<div class='topic'>
<p>
TODO
</p>
</div>
-</div><!-- END: 6.30 - juneau-rest-server.jrs.Overview -->
+</div><!-- END: 6.29 - juneau-rest-server.jrs.Overview -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.ResponseProcessors'
id='juneau-rest-server.jrs.ResponseProcessors'>6.31 - Fluent
Assertions</a><span class='update'>created: <b>9.0.0</b>,
<b><red>TODO</red></b></span></h3>
-<div class='topic'><!-- START: 6.31 -
juneau-rest-server.jrs.ResponseProcessors -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.ResponseProcessors'
id='juneau-rest-server.jrs.ResponseProcessors'>6.30 - Fluent
Assertions</a><span class='update'>created: <b>9.0.0</b>,
<b><red>TODO</red></b></span></h3>
+<div class='topic'><!-- START: 6.30 -
juneau-rest-server.jrs.ResponseProcessors -->
<div class='topic'>
<p>
TODO
</p>
</div>
-</div><!-- END: 6.31 - juneau-rest-server.jrs.ResponseProcessors -->
+</div><!-- END: 6.30 - juneau-rest-server.jrs.ResponseProcessors -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.UtilityBeans'
id='juneau-rest-server.jrs.UtilityBeans'>6.32 - Utility Beans</a><span
class='update'>created: <b>9.0.0</b>, <b><red>TODO</red></b></span></h3>
-<div class='topic'><!-- START: 6.32 - juneau-rest-server.jrs.UtilityBeans -->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.UtilityBeans'
id='juneau-rest-server.jrs.UtilityBeans'>6.31 - Utility Beans</a><span
class='update'>created: <b>9.0.0</b>, <b><red>TODO</red></b></span></h3>
+<div class='topic'><!-- START: 6.31 - juneau-rest-server.jrs.UtilityBeans -->
<div class='topic'>
<p>
TODO
</p>
</div>
-</div><!-- END: 6.32 - juneau-rest-server.jrs.UtilityBeans -->
+</div><!-- END: 6.31 - juneau-rest-server.jrs.UtilityBeans -->
<!--
====================================================================================================
-->
-<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.SerializingUris'
id='juneau-rest-server.jrs.SerializingUris'>6.33 - URIs</a><span
class='update'><b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 6.33 - juneau-rest-server.jrs.SerializingUris
-->
+<h3 class='topic' onclick='toggle(this)'><a
href='#juneau-rest-server.jrs.SerializingUris'
id='juneau-rest-server.jrs.SerializingUris'>6.32 - URIs</a><span
class='update'><b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 6.32 - juneau-rest-server.jrs.SerializingUris
-->
<div class='topic'>
<p>
As mention earlier {@doc jm.MarshallingUris here}, Juneau
serializers have sophisticated support for transforming relative URIs to
absolute form.
@@ -21074,7 +20957,7 @@
URIs are resolved by both regular and part serializers.
</p>
</div>
-</div><!-- END: 6.33 - juneau-rest-server.jrs.SerializingUris -->
+</div><!-- END: 6.32 - juneau-rest-server.jrs.SerializingUris -->
</div><!-- END: 6 - juneau-rest-server -->
<!--
====================================================================================================
-->
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt
b/juneau-doc/src/main/javadoc/resources/docs.txt
index 9f25063..cb5affa 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -258,7 +258,6 @@ jrs.ClientVersioning =
#juneau-rest-server.jrs.ClientVersioning, Overview > june
jrs.ConfigurationFiles = #juneau-rest-server.jrs.ConfigurationFiles, Overview
> juneau-rest-server > Configuration Files
jrs.Converters = #juneau-rest-server.jrs.Converters, Overview >
juneau-rest-server > Converters
jrs.CustomRestContextsAndBuilders =
#juneau-rest-server.jrs.CustomRestContextsAndBuilders, Overview >
juneau-rest-server > Custom REST Context and Builders
-jrs.CustomSerializersAndParsers =
#juneau-rest-server.jrs.CustomSerializersAndParsers, Overview >
juneau-rest-server > Custom Serializers and Parsers
jrs.DefaultHeaders = #juneau-rest-server.jrs.HttpParts.jrs.DefaultHeaders,
Overview > juneau-rest-server > HTTP Parts > Default Parts
jrs.Encoders = #juneau-rest-server.jrs.Encoders, Overview > juneau-rest-server
> Encoders
jrs.ExecutionStatistics = #juneau-rest-server.jrs.ExecutionStatistics,
Overview > juneau-rest-server > REST method execution statistics
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index 31c3012..9cd7971 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -256,10 +256,9 @@
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.HtmlDocAnnotation.jrs.HtmlStylesheets'>Stylesheets</a><span
class='update'>updated: 8.1.0,<b>9.0.0</b></span></p>
</ol>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.LoggingAndDebugging'>Logging /
Debugging</a><span class='update'>created: <b>9.0.0</b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.HttpStatusCodes'>HTTP Status
Codes</a><span class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.OverloadingHttpMethods'>Overloading
HTTP Methods</a><span class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.BuiltInParameters'>Built-in
Parameters</a><span class='update'><b><red>todo</red></b></span></p>
- <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.CustomSerializersAndParsers'>Custom
Serializers and Parsers</a><span
class='update'><b><red>todo</red></b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.HttpStatusCodes'>HTTP Status
Codes</a><span class='update'>updated: <b>9.0.0</b></span></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.OverloadingHttpMethods'>Overloading
HTTP Methods</a></p>
+ <li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.BuiltInParameters'>Built-in
Parameters</a><span class='update'>updated: <b>9.0.0</b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.UsingWithOsgi'>Using with
OSGi</a><span class='update'><b><red>todo</red></b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.Injection'>Using with Spring and
Injection frameworks</a><span class='update'><b><red>todo</red></b></span></p>
<li><p><a class='doclink'
href='{OVERVIEW_URL}#juneau-rest-server.jrs.OtherNotes'>Other Notes</a><span
class='update'><b><red>todo</red></b></span></p>
diff --git
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/parser/ImageParser.java
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/parser/ImageParser.java
index bb6f98d..a253d4a 100644
---
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/parser/ImageParser.java
+++
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/parser/ImageParser.java
@@ -22,6 +22,11 @@ import org.apache.juneau.parser.*;
/**
* Example parser that converts byte streams to {@link BufferedImage} objects.
+ *
+ * <ul class='seealso'>
+ * <li class='link'>{@doc jrs.Marshalling REST Marshalling}
+ * <li class='extlink'>{@source}
+ * </ul>
*/
@SuppressWarnings("javadoc")
public class ImageParser extends InputStreamParser {
diff --git
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/serializer/ImageSerializer.java
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/serializer/ImageSerializer.java
index 260799e..b484835 100644
---
a/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/serializer/ImageSerializer.java
+++
b/juneau-examples/juneau-examples-core/src/main/java/org/apache/juneau/examples/serializer/ImageSerializer.java
@@ -22,6 +22,11 @@ import org.apache.juneau.serializer.*;
/**
* Example serializer that converts {@link BufferedImage} objects to byte
streams.
+ *
+ * <ul class='seealso'>
+ * <li class='link'>{@doc jrs.Marshalling REST Marshalling}
+ * <li class='extlink'>{@source}
+ * </ul>
*/
@SuppressWarnings("javadoc")
public class ImageSerializer extends OutputStreamSerializer {
diff --git
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
index 67daa81..8c099de 100644
---
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
+++
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PhotosResource.java
@@ -27,6 +27,13 @@ import java.net.*;
/**
* Sample resource that allows images to be uploaded and retrieved.
+ *
+ * <ul class='seealso'>
+ * <li class='link'>{@doc jrs.Marshalling REST Marshalling}
+ * <li class='jc'>{@link ImageSerializer}
+ * <li class='jc'>{@link ImageParser}
+ * <li class='extlink'>{@source}
+ * </ul>
*/
@Rest(
path="/photos",