You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2022/06/13 12:24:43 UTC

[juneau] 02/02: Javadocs

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

commit ad76715de95ae4c2c54dc440c1d7151e3ece7b11
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Mon Jun 13 08:24:18 2022 -0400

    Javadocs
---
 juneau-doc/src/main/javadoc/overview.html          | 531 +++++++++++++++------
 .../src/main/javadoc/resources/fragments/toc.html  |  12 +-
 2 files changed, 399 insertions(+), 144 deletions(-)

diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 7914a7e4d..c36452b94 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -230,8 +230,8 @@
 			<li><p><a class='doclink' href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.part'>org.apache.juneau.http.part</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.entity'>org.apache.juneau.http.entity</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.resource'>org.apache.juneau.http.resource</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response'>org.apache.juneau.http.response</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote'>org.apache.juneau.http.remote</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response'>org.apache.juneau.http.response</a><span class='update'>created: <b>9.0.0</b></span></p>
+			<li><p><a class='doclink' href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote'>org.apache.juneau.http.remote</a><span class='update'>created: <b>9.0.0</b></span></p>
 		</ol>
 		<li><p><a class='doclink' href='#juneau-marshall.jm.ObjectTools'>Object Tools</a><span class='update'>created: <b>9.0.0</b></span></p>
 		<li><p><a class='doclink' href='#juneau-marshall.jm.JsonDetails'>JSON Details</a></p>
@@ -6289,14 +6289,43 @@
 <h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http'>2.24.1 - org.apache.juneau.http</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
 <div class='topic'><!-- START: 2.24.1 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http -->
 <div class='topic'>
-
-BasicStatusLine.java
-HttpEntities.java
-HttpHeaders.java
-HttpMethod.java
-HttpParts.java
-HttpResources.java
-HttpResponses.java
+	<p>
+		The {@link org.apache.juneau.http.header} package contains various convenience classes for creating
+		standard HTTP components using static imports.
+	</p>
+	<ul class='javatreec'>
+		<li class='jc'>{@link org.apache.juneau.http.HttpHeaders} - Utility class for standard HTTP headers.
+		<li class='jc'>{@link org.apache.juneau.http.HttpParts} - Utility class for standard HTTP parts.
+		<li class='jc'>{@link org.apache.juneau.http.HttpEntities} - Utility class for standard HTTP entities.
+		<li class='jc'>{@link org.apache.juneau.http.HttpResources} - Utility class for standard HTTP resources.
+		<li class='jc'>{@link org.apache.juneau.http.HttpResponses} - Utility class for standard HTTP resources.
+	</ul>
+	
+	<h5 class='topic'>HttpHeaders</h5>
+	<p>
+		TODO
+	</p>
+	
+	<h5 class='topic'>HttpParts</h5>
+	<p>
+		TODO
+	</p>
+	
+	<h5 class='topic'>HttpEntities</h5>
+	<p>
+		TODO
+	</p>
+	
+	<h5 class='topic'>HttpResources</h5>
+	<p>
+		TODO
+	</p>
+	
+	<h5 class='topic'>HttpResponses</h5>
+	<p>
+		TODO
+	</p>
+	
 </div>
 </div><!-- END: 2.24.1 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http -->
 
@@ -6305,23 +6334,33 @@ HttpResponses.java
 <h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.annotation' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.annotation'>2.24.2 - org.apache.juneau.http.annotation</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
 <div class='topic'><!-- START: 2.24.2 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.annotation -->
 <div class='topic'>
-Body.java
-Contact.java
-ExternalDocs.java
-FormData.java
-HasFormData.java
-HasQuery.java
-Header.java
-Items.java
-License.java
-Path.java
-Query.java
-Request.java
-Response.java
-Schema.java
-StatusCode.java
-SubItems.java
-Tag.java
+	<p>
+		The {@link org.apache.juneau.http.annotation} package contains annotations for defining both server and client side 
+		APIs.  The server-side APIs also use it for producing auto-generated Swagger documentation through
+		the REST API itself.
+	</p>
+	<ul class='javatreec'>
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Body}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Contact}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.ExternalDocs}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.FormData}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.HasFormData}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.HasQuery}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Header}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Items}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.License}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Path}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Query}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Request}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Response}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Schema}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.StatusCode}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.SubItems}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Tag}
+	</ul>
+	<p>
+		TODO - Examples
+	</p>
 </div>
 </div><!-- END: 2.24.2 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.annotation -->
 
@@ -6330,86 +6369,240 @@ Tag.java
 <h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.header' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.header'>2.24.3 - org.apache.juneau.http.header</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
 <div class='topic'><!-- START: 2.24.3 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.header -->
 <div class='topic'>
+	<p>
+		The {@link org.apache.juneau.http.header} package contains implementations of <c>org.apache.http.Header</c> for all common HTTP
+		headers.
+	</p>
+	<ul class='javatreec'>
+		<li class='jc'>{@link org.apache.juneau.http.header.Accept}
+		<li class='jc'>{@link org.apache.juneau.http.header.AcceptCharset}
+		<li class='jc'>{@link org.apache.juneau.http.header.AcceptEncoding}
+		<li class='jc'>{@link org.apache.juneau.http.header.AcceptLanguage}
+		<li class='jc'>{@link org.apache.juneau.http.header.AcceptRanges}
+		<li class='jc'>{@link org.apache.juneau.http.header.Age}
+		<li class='jc'>{@link org.apache.juneau.http.header.Allow}
+		<li class='jc'>{@link org.apache.juneau.http.header.Authorization}
+		<li class='jc'>{@link org.apache.juneau.http.header.CacheControl}
+		<li class='jc'>{@link org.apache.juneau.http.header.ClientVersion}
+		<li class='jc'>{@link org.apache.juneau.http.header.Connection}
+		<li class='jc'>{@link org.apache.juneau.http.header.ContentDisposition}
+		<li class='jc'>{@link org.apache.juneau.http.header.ContentEncoding}
+		<li class='jc'>{@link org.apache.juneau.http.header.ContentLanguage}
+		<li class='jc'>{@link org.apache.juneau.http.header.ContentLength}
+		<li class='jc'>{@link org.apache.juneau.http.header.ContentLocation}
+		<li class='jc'>{@link org.apache.juneau.http.header.ContentRange}
+		<li class='jc'>{@link org.apache.juneau.http.header.ContentType}
+		<li class='jc'>{@link org.apache.juneau.http.header.Date}
+		<li class='jc'>{@link org.apache.juneau.http.header.Debug}
+		<li class='jc'>{@link org.apache.juneau.http.header.ETag}
+		<li class='jc'>{@link org.apache.juneau.http.header.Expect}
+		<li class='jc'>{@link org.apache.juneau.http.header.Expires}
+		<li class='jc'>{@link org.apache.juneau.http.header.Forwarded}
+		<li class='jc'>{@link org.apache.juneau.http.header.From}
+		<li class='jc'>{@link org.apache.juneau.http.header.Host}
+		<li class='jc'>{@link org.apache.juneau.http.header.IfMatch}
+		<li class='jc'>{@link org.apache.juneau.http.header.IfModifiedSince}
+		<li class='jc'>{@link org.apache.juneau.http.header.IfNoneMatch}
+		<li class='jc'>{@link org.apache.juneau.http.header.IfRange}
+		<li class='jc'>{@link org.apache.juneau.http.header.IfUnmodifiedSince}
+		<li class='jc'>{@link org.apache.juneau.http.header.LastModified}
+		<li class='jc'>{@link org.apache.juneau.http.header.Location}
+		<li class='jc'>{@link org.apache.juneau.http.header.MaxForwards}
+		<li class='jc'>{@link org.apache.juneau.http.header.MediaRange}
+		<li class='jc'>{@link org.apache.juneau.http.header.MediaRanges}
+		<li class='jc'>{@link org.apache.juneau.http.header.MediaType}
+		<li class='jc'>{@link org.apache.juneau.http.header.NoTrace}
+		<li class='jc'>{@link org.apache.juneau.http.header.Origin}
+		<li class='jc'>{@link org.apache.juneau.http.header.Pragma}
+		<li class='jc'>{@link org.apache.juneau.http.header.ProxyAuthenticate}
+		<li class='jc'>{@link org.apache.juneau.http.header.ProxyAuthorization}
+		<li class='jc'>{@link org.apache.juneau.http.header.Range}
+		<li class='jc'>{@link org.apache.juneau.http.header.Referer}
+		<li class='jc'>{@link org.apache.juneau.http.header.RetryAfter}
+		<li class='jc'>{@link org.apache.juneau.http.header.Server}
+		<li class='jc'>{@link org.apache.juneau.http.header.TE}
+		<li class='jc'>{@link org.apache.juneau.http.header.Thrown}
+		<li class='jc'>{@link org.apache.juneau.http.header.Trailer}
+		<li class='jc'>{@link org.apache.juneau.http.header.TransferEncoding}
+		<li class='jc'>{@link org.apache.juneau.http.header.Upgrade}
+		<li class='jc'>{@link org.apache.juneau.http.header.UserAgent}
+		<li class='jc'>{@link org.apache.juneau.http.header.Vary}
+		<li class='jc'>{@link org.apache.juneau.http.header.Via}
+		<li class='jc'>{@link org.apache.juneau.http.header.Warning}
+		<li class='jc'>{@link org.apache.juneau.http.header.WwwAuthenticate}
+	</ul>
+	<p>
+		TODO - Examples
+	</p>
+	<p>
+		These headers extend from the following classes that provide data-type specific functionality:
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.NameValuePair}
+		<ul>
+			<li class='jic'>{@code org.apache.http.Header}
+			<ul>
+				<li class='jc'>{@link org.apache.juneau.http.header.BasicHeader}
+				<ul class='javatreec'>
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicBooleanHeader}	
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicCsvHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicDateHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicEntityTagHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicEntityTagsHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicIntegerHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicLongHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicMediaRangesHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicMediaTypeHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicStringHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicStringRangesHeader}
+					<li class='jc'>{@link org.apache.juneau.http.header.BasicUriHeader}
+				</ul>
+			</ul>
+		</ul>
+	</ul>
+	<p>
+		These subclasses provide various convenience methods to allow for easy fluent-style coding.
+	</p>
+	<h5 class='figure'>Examples</h5>
+	<p class='bjava'>
+	<jc>// Validates the response body content is not expired.</jc>
+	<jv>restClient</jv>
+		.get(<jsf>URL</jsf>)
+		.run()
+		.getHeader(<js>"Expires"</js>).asDateHeader().assertZonedDateTime().isLessThan(<jk>new</jk> Date());
+	</p>
+	
+	<h5 class='topic'>HeaderList</h5>
+	<p>
+		The {@link org.apache.juneau.http.header.HeaderList} class is an thread-safe immutable list of HTTP headers.
+	</p>
+
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+	<jc>// Construct using builder.</jc>
+	HeaderList <jv>headers</jv> = HeaderList
+		.<jsm>create</jsm>()
+		.append(Accept.<jsm>of</jsm>(<js>"text/xml"</js>))
+		.append(<js>"Content-Type"</js>, ()-&gt;<jsm>getDynamicContentTypeFromSomewhere</jsm>())
+		.build();
+	
+	<jc>// Construct using convenience creator.</jc>
+	HeaderList <jv>headers</jv> = HeaderList.<jsm>of</jsm>(Accept.<jsf>TEXT_XML</jsf>, ContentType.<jsf>TEXT_XML</jsf>);
+	</p>
+	<p>
+		Header lists are immutable, but can be appended to using the {@link org.apache.juneau.http.header.HeaderList#copy() copy()} method:	
+	</p>
+	<p class='bjava'>
+	<jv>headers</jv> = <jv>headers</jv>
+		.copy()
+		.append(AcceptEncoding.<jsm>of</jsm>(<js>"identity"</js>))
+		.build();
+	</p>
+	<p>
+		Static methods are provided on {@link org.apache.juneau.http.HttpHeaders} to further simplify creation of header lists.
+	</p>
+	<p class='bjava'>
+	<jk>import static</jk> org.apache.juneau.http.HttpHeaders.*;
+
+	HeaderList <jv>headers</jv> = <jsm>headerList</jsm>(<jsm>accept</jsm>(<js>"text/xml"</js>), <jsm>contentType</jsm>(<js>"text/xml"</js>));
+	</p>
+	<p>
+		The builder class supports setting default header values (i.e. add a header to the list if it isn't otherwise in the list).
+		Note that this is different from simply setting a value twice as using default values will not overwrite existing
+		headers.
+		<br>The following example notes the distinction:
+	</p>
+	<p class='bjava'>
+	<jv>headers</jv> = HeaderList
+		.<jsm>create</jsm>()
+		.set(Accept.<jsf>TEXT_PLAIN</jsf>)
+		.set(Accept.<jsf>TEXT_XML</jsf>)
+		.build();
+	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[Accept: text/xml]"</js>);
+
+	<jv>headers</jv> = HeaderList
+		.create()
+		.set(Accept.<jsf>TEXT_PLAIN</jsf>)
+		.setDefault(Accept.<jsf>TEXT_XML</jsf>)
+		.build();
+	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[Accept: text/plain]"</js>);
+	</p>
+
+	<p>
+		Various methods are provided for iterating over the headers in this list to avoid array copies.
+	</p>
+	<ul class='javatree'>
+		<li class='jm'>{@link org.apache.juneau.http.header.HeaderList#forEach(Consumer) forEach(Consumer)} / {@link org.apache.juneau.http.header.HeaderList#forEach(String,Consumer) forEach(String,Consumer)} / {@link org.apache.juneau.http.header.HeaderList#forEach(Predicate,Consumer) forEach(Predicate,Consumer)} - Use consumers to process headers.
+		<li class='jm'>{@link org.apache.juneau.http.header.HeaderList#iterator() iterator()} / {@link org.apache.juneau.http.header.HeaderList#iterator(String) iterator(String)} - Use an {@link HeaderIterator} to process headers.
+		<li class='jm'>{@link org.apache.juneau.http.header.HeaderList#stream() stream()} / {@link org.apache.juneau.http.header.HeaderList#stream(String) stream(String)} - Use a stream.
+	</ul>
+	<p>
+		In general, try to use these over the {@link org.apache.juneau.http.header.HeaderList#getAll() getAll()} / {@link org.apache.juneau.http.header.HeaderList#getAll(String) getAll(String)} methods that require array copies.
+	</p>
+	<p>
+		The {@link org.apache.juneau.http.header.HeaderList#get(String) get(String)} method is special in that it will collapse multiple headers with the same name into
+		a single comma-delimited list (see <a href='https://tools.ietf.org/html/rfc2616#section-4.2'>RFC 2616 Section 4.2</a> for rules).
+	</p>
+	<p>
+		The {@link org.apache.juneau.http.header.HeaderList#get(Class) get(Class)} and {@link org.apache.juneau.http.header.HeaderList#get(String,Class) get(String,Class)} methods are provided for working with {@link org.apache.juneau.http.annotation.Header}-annotated
+		beans.
+	</p>
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+	ContentType <jv>contentType</jv> = <jv>headers</jv>.get(ContentType.<jk>class</jk>);
+	</p>
+
+	<p>
+		By default, header names are treated as case-insensitive.  This can be changed using the {@link org.apache.juneau.http.header.HeaderList.Builder#caseSensitive() caseSensitive()}
+		method.
+	</p>
+
+	<p>
+		A {@link org.apache.juneau.svl.VarResolver} can be associated with this builder to create header values with embedded variables that
+		are resolved at runtime.
+	</p>
+
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+	<jc>// Create a header list with dynamically-resolving values pulled from a system property.</jc>
+
+	System.<jsm>setProperty</jsm>(<js>"foo"</js>, <js>"bar"</js>);
+
+	HeaderList <jv>headers</jv> = HeaderList
+		.<jsm>create</jsm>()
+		.resolving()
+		.append(<js>"X1"</js>, <js>"$S{foo}"</js>)
+		.append(<js>"X2"</js>, ()-&gt;<js>"$S{foo}"</js>)
+		.build();
 
-Accept.java
-AcceptCharset.java
-AcceptEncoding.java
-AcceptLanguage.java
-AcceptRanges.java
-Age.java
-Allow.java
-Authorization.java
-BasicBooleanHeader.java
-BasicCsvHeader.java
-BasicDateHeader.java
-BasicEntityTagHeader.java
-BasicEntityTagsHeader.java
-BasicHeader.java
-BasicHeaderIterator.java
-BasicIntegerHeader.java
-BasicLongHeader.java
-BasicMediaRangesHeader.java
-BasicMediaTypeHeader.java
-BasicStringHeader.java
-BasicStringRangesHeader.java
-BasicUriHeader.java
-CacheControl.java
-ClientVersion.java
-Connection.java
-ContentDisposition.java
-ContentEncoding.java
-ContentLanguage.java
-ContentLength.java
-ContentLocation.java
-ContentRange.java
-ContentType.java
-Date.java
-Debug.java
-EntityTag.java
-EntityTags.java
-ETag.java
-Expect.java
-Expires.java
-Forwarded.java
-From.java
-Headerable.java
-HeaderBeanMeta.java
-HeaderList.java
-Host.java
-IfMatch.java
-IfModifiedSince.java
-IfNoneMatch.java
-IfRange.java
-IfUnmodifiedSince.java
-LastModified.java
-Location.java
-MaxForwards.java
-MediaRange.java
-MediaRanges.java
-MediaType.java
-NoTrace.java
-Origin.java
-package-info.java
-Pragma.java
-ProxyAuthenticate.java
-ProxyAuthorization.java
-Range.java
-Referer.java
-RetryAfter.java
-SerializedHeader.java
-Server.java
-StringRange.java
-StringRanges.java
-TE.java
-Thrown.java
-Trailer.java
-TransferEncoding.java
-Upgrade.java
-UserAgent.java
-Vary.java
-Via.java
-Warning.java
-WwwAuthenticate.java
+	<jsm>assertObject</jsm>(<jv>headers</jv>).isString(<js>"[X1: bar, X2: bar]"</js>);
+	</p>
+
+	<p>
+		The {@link org.apache.juneau.http.header.HeaderList} object can be extended to defined pre-packaged lists of headers which can be used in various
+		annotations throughout the framework.
+	</p>
+	<h5 class='figure'>Example</h5>
+	<p class='bjava'>
+	<jc>// A predefined list of headers.</jc>
+	<jk>public class</jk> MyHeaderList <jk>extends</jk> HeaderList {
+		<jk>public</jk> MyHeaderList() {
+			<jk>super</jk>(Accept.<jsf>TEXT_XML</jsf>, ContentType.<jsf>TEXT_XML</jsf>);
+		}
+	}
+
+	<jc>// Use it on a remote proxy to add headers on all requests.</jc>
+	<ja>@Remote</ja>(path=<js>"/petstore"</js>, headerList=MyHeaderList.<jk>class</jk>)
+	<jk>public interface</jk> PetStore {
+
+		<ja>@RemotePost</ja>(<js>"/pets"</js>)
+		Pet addPet(
+			<ja>@Body</ja> CreatePet <jv>createPet</jv>,
+			<ja>@Header</ja>(<js>"E-Tag"</js>) UUID <jv>etag</jv>,
+			<ja>@Query</ja>(<js>"debug"</js>) <jk>boolean</jk> <jv>debug</jv>
+		);
+	}
+	</p>
 </div>
 </div><!-- END: 2.24.3 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.header -->
 
@@ -6418,22 +6611,28 @@ WwwAuthenticate.java
 <h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.part' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.part'>2.24.4 - org.apache.juneau.http.part</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
 <div class='topic'><!-- START: 2.24.4 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.part -->
 <div class='topic'>
+	<p>
+		TODO
+	</p>
+	<ul class='javatreec'>
+		<li class='jic'>{@code org.apache.http.NameValuePair}
+		<ul>
+			<li class='jc'>{@link org.apache.juneau.http.part.BasicPart}
+			<ul class='javatreec'>
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicBooleanPart}
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicCsvArrayPart}
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicDatePart}
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicIntegerPart}
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicLongPart}
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicPartIterator}
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicStringPart}
+				<li class='jc'>{@link org.apache.juneau.http.part.BasicUriPart}
+			</li>
+		</ul>
+	</ul>
+
+	<h5 class='topic'>PartList</h5>
 
-BasicBooleanPart.java
-BasicCsvArrayPart.java
-BasicDatePart.java
-BasicIntegerPart.java
-BasicLongPart.java
-BasicPart.java
-BasicPartIterator.java
-BasicStringPart.java
-BasicUriPart.java
-NameValuePairable.java
-package-info.java
-PartBeanMeta.java
-PartIterator.java
-PartList.java
-SerializedPart.java
 </div>
 </div><!-- END: 2.24.4 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.part -->
 
@@ -6442,17 +6641,33 @@ SerializedPart.java
 <h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.entity' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.entity'>2.24.5 - org.apache.juneau.http.entity</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
 <div class='topic'><!-- START: 2.24.5 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.entity -->
 <div class='topic'>
-BasicHttpEntity.java
-ByteArrayEntity.java
-FileEntity.java
-HttpEntityBuilder.java
-InputStreamEntity.java
-package-info.java
-ReaderEntity.java
-SerializedEntity.java
-SerializedEntityBuilder.java
-StringEntity.java
-
+	<p>
+		TODO
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.HttpEntity}
+		<ul>
+			<li class='jc'>{@link org.apache.juneau.http.entity.BasicHttpEntity}
+			<ul class='javatreec'>
+				<li class='jc'>{@link org.apache.juneau.http.entity.ByteArrayEntity}
+				<li class='jc'>{@link org.apache.juneau.http.entity.FileEntity}
+				<li class='jc'>{@link org.apache.juneau.http.entity.InputStreamEntity}
+				<li class='jc'>{@link org.apache.juneau.http.entity.ReaderEntity}
+				<li class='jc'>{@link org.apache.juneau.http.entity.SerializedEntity}
+				<li class='jc'>{@link org.apache.juneau.http.entity.StringEntity}
+			</ul>
+		</ul>
+	</ul>
+	
+	<h5 class='topic'>HttpEntityBuilder</h5>
+	<p>
+		TODO
+	</p>
+	
+	<h5 class='topic'>SerializedEntityBuilder</h5>
+	<p>
+		TODO
+	</p>
 </div>
 </div><!-- END: 2.24.5 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.entity -->
 
@@ -6461,21 +6676,37 @@ StringEntity.java
 <h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.resource' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.resource'>2.24.6 - org.apache.juneau.http.resource</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
 <div class='topic'><!-- START: 2.24.6 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.resource -->
 <div class='topic'>
-BasicResource.java
-ByteArrayResource.java
-FileResource.java
-HttpResource.java
-HttpResourceBuilder.java
-InputStreamResource.java
-package-info.java
-ReaderResource.java
-StringResource.java
+	<p>
+		TODO
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.HttpEntity}
+		<ul>
+			<li class='jic'>{@link org.apache.juneau.http.resource.HttpResource}
+			<ul>
+				<li class='jc'>{@link org.apache.juneau.http.resource.BasicResource}
+				<ul class='javatreec'>
+					<li class='jc'>{@link org.apache.juneau.http.resource.ByteArrayResource}
+					<li class='jc'>{@link org.apache.juneau.http.resource.FileResource}
+					<li class='jc'>{@link org.apache.juneau.http.resource.InputStreamResource}
+					<li class='jc'>{@link org.apache.juneau.http.resource.ReaderResource}
+					<li class='jc'>{@link org.apache.juneau.http.resource.StringResource}
+				</ul>
+			</ul>
+		</ul>
+	</ul>
+	
+	<h5 class='topic'>HttpResourceBuilder</h5>
+	<p>
+		TODO
+	</p>
+	
 </div>
 </div><!-- END: 2.24.6 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.resource -->
 
 <!-- ==================================================================================================== -->
 
-<h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response'>2.24.7 - org.apache.juneau.http.response</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
+<h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response'>2.24.7 - org.apache.juneau.http.response</a><span class='update'>created: <b>9.0.0</b></span></h4>
 <div class='topic'><!-- START: 2.24.7 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response -->
 <div class='topic'>
 	<p>
@@ -6540,6 +6771,20 @@ StringResource.java
 		<li class='jc'>{@link org.apache.juneau.http.response.VariantAlsoNegotiates}
 	</ul>	
 	
+	<p>
+		These are built upon existing HttpComponents APIs:
+	</p>
+	<ul class='javatree'>
+		<li class='jic'>{@code org.apache.http.HttpMessage}
+		<ul>
+			<li class='jic'>{@code org.apache.http.HttpResponse}
+			<ul>
+				<li class='jc'>{@link org.apache.juneau.http.response.BasicHttpResponse} - 100-399 response codes
+				<li class='jc'>{@link org.apache.juneau.http.response.BasicHttpException} - 400+ response codes
+			</ul>
+		</ul>
+	</ul>
+	
 	<p>
 		The most common location where these responses are used are in REST operation methods described later.
 	<h5 class='figure'>Example:</h5>
@@ -6565,7 +6810,7 @@ StringResource.java
 
 <!-- ==================================================================================================== -->
 
-<h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote'>2.24.8 - org.apache.juneau.http.remote</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></h4>
+<h5 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote' id='juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote'>2.24.8 - org.apache.juneau.http.remote</a><span class='update'>created: <b>9.0.0</b></span></h4>
 <div class='topic'><!-- START: 2.24.8 - juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote -->
 <div class='topic'>
 	<p>
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index dd69ffe04..97545e550 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -76,7 +76,17 @@
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.SimpleVariableLanguage.jm.SvlOtherNotes'>Other Notes</a></p>
 		</ol>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.Encoders'>Encoders</a><span class='update'>created: <b>9.0.0</b></span></p>
-		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts'>HTTP Parts</a><span class='update'>created: <b>9.0.0</b>, <b><red>TODO</red></b></span></p>
+		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts'>HTTP Parts</a><span class='update'>created: <b>9.0.0</b></span></p>
+		<ol>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http'>org.apache.juneau.http</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.annotation'>org.apache.juneau.http.annotation</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.header'>org.apache.juneau.http.header</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.part'>org.apache.juneau.http.part</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.entity'>org.apache.juneau.http.entity</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.resource'>org.apache.juneau.http.resource</a><span class='update'>created: <b>9.0.0</b>, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.response'>org.apache.juneau.http.response</a><span class='update'>created: <b>9.0.0</b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.HttpParts.jm.org.apache.juneau.http.remote'>org.apache.juneau.http.remote</a><span class='update'>created: <b>9.0.0</b></span></p>
+		</ol>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.ObjectTools'>Object Tools</a><span class='update'>created: <b>9.0.0</b></span></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.jm.JsonDetails'>JSON Details</a></p>
 		<ol>