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 2021/01/30 16:56:11 UTC

[juneau] branch master updated: Atom feed DTO refactoring.

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 c661849  Atom feed DTO refactoring.
c661849 is described below

commit c6618499d849c80914ec38baa1210752bc6614b8
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Sat Jan 30 11:55:51 2021 -0500

    Atom feed DTO refactoring.
---
 TODO.txt                                           |  15 +-
 .../java/org/apache/juneau/dto/atom/Category.java  | 143 +++++--
 .../java/org/apache/juneau/dto/atom/Common.java    |  96 ++++-
 .../org/apache/juneau/dto/atom/CommonEntry.java    | 431 +++++++++++++++++----
 .../java/org/apache/juneau/dto/atom/Content.java   |  49 ++-
 .../java/org/apache/juneau/dto/atom/Entry.java     | 216 +++++++++--
 .../main/java/org/apache/juneau/dto/atom/Feed.java | 251 ++++++++++--
 .../java/org/apache/juneau/dto/atom/Generator.java | 142 +++++--
 .../main/java/org/apache/juneau/dto/atom/Icon.java |  47 ++-
 .../main/java/org/apache/juneau/dto/atom/Id.java   |  49 ++-
 .../main/java/org/apache/juneau/dto/atom/Link.java | 284 ++++++++++++--
 .../main/java/org/apache/juneau/dto/atom/Logo.java |  48 ++-
 .../java/org/apache/juneau/dto/atom/Person.java    | 144 +++++--
 .../java/org/apache/juneau/dto/atom/Source.java    | 204 ++++++++--
 .../main/java/org/apache/juneau/dto/atom/Text.java | 100 ++++-
 15 files changed, 1852 insertions(+), 367 deletions(-)

diff --git a/TODO.txt b/TODO.txt
index 48941cd..54136aa 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,8 +1,15 @@
 RestCall.exception(...) should accumulate exceptions, not just one.
 Replace RestInfoProvider with Swagger.
-Rework RestCallLogger.
-x @Rest(path) should allow you to match against file name (e.g. "favicon.ico")
+xxx Rework RestCallLogger.
+xxx @Rest(path) should allow you to match against file name (e.g. "favicon.ico")
 Replace @Rest(paths) with just @Rest(path)
-Auto-injection into REST interfaces.
+Auto-injection into REST interfaces (via providers?)
 ClassInfo improvements to getMethod (e.g. getMethodExact vs getMethod).
-Re-add @PathRemainder annotation.
\ No newline at end of file
+Re-add @PathRemainder annotation.
+xxx Replace RestResourceResolver with ObjectFactory (or something already predefined?).
+xxx Remove @Rest(properties) and all that stuff.
+Add a createConfig() method on RestContext.
+Thrown NotFound causes - javax.servlet.ServletException: Invalid method response: 200
+
+Instead of PropertyStores, builders should produce settings which are passed to contexts.
+
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
index 880620f..2141a66 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Category.java
@@ -17,8 +17,8 @@ import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
 import java.net.URI;
+import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -67,7 +67,12 @@ public class Category extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * @return The category term.
+	 * Bean property getter:  <property>term</property>.
+	 *
+	 * <p>
+	 * The category term.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getTerm() {
@@ -75,21 +80,55 @@ public class Category extends Common {
 	}
 
 	/**
-	 * Sets the category term.
+	 * Bean property setter:  <property>term</property>.
 	 *
-	 * @param term The category term.
+	 * <p>
+	 * The category term.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	@Xml(format=ATTR)
+	public void setTerm(String value) {
+		this.term = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>term</property>.
+	 *
+	 * <p>
+	 * The category term.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> term() {
+		return Optional.ofNullable(term);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>term</property>.
+	 *
+	 * <p>
+	 * The category term.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("term")
-	public Category term(String term) {
-		this.term = term;
+	public Category term(String value) {
+		setTerm(value);
 		return this;
 	}
 
 	/**
-	 * Returns the category scheme.
+	 * Bean property getter:  <property>scheme</property>.
 	 *
-	 * @return The category scheme.
+	 * <p>
+	 * The category scheme.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public URI getScheme() {
@@ -97,28 +136,58 @@ public class Category extends Common {
 	}
 
 	/**
-	 * Sets the category scheme.
+	 * Bean property setter:  <property>scheme</property>.
+	 *
+	 * <p>
+	 * The category scheme.
 	 *
 	 * <p>
 	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
 	 * Strings must be valid URIs.
 	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setScheme(Object value) {
+		this.scheme = toURI(value);
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>scheme</property>.
+	 *
+	 * <p>
+	 * The category scheme.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<URI> scheme() {
+		return Optional.ofNullable(scheme);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>scheme</property>.
+	 *
 	 * <p>
-	 * URIs defined by {@link UriResolver} can be used for values.
+	 * The category scheme.
 	 *
-	 * @param scheme The category scheme.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("scheme")
-	public Category scheme(Object scheme) {
-		this.scheme = toURI(scheme);
+	public Category scheme(Object value) {
+		setScheme(value);
 		return this;
 	}
 
 	/**
-	 * Returns the category label.
+	 * Bean property getter:  <property>label</property>.
+	 *
+	 * <p>
+	 * The category label.
 	 *
-	 * @return The category label.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getLabel() {
@@ -126,14 +195,44 @@ public class Category extends Common {
 	}
 
 	/**
-	 * Sets the category label.
+	 * Bean property setter:  <property>scheme</property>.
+	 *
+	 * <p>
+	 * The category label.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setLabel(String value) {
+		this.label = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>label</property>.
+	 *
+	 * <p>
+	 * The category label.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> label() {
+		return Optional.ofNullable(label);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>label</property>.
+	 *
+	 * <p>
+	 * The category label.
 	 *
-	 * @param label The category label.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("label")
-	public Category label(String label) {
-		this.label = label;
+	public Category label(String value) {
+		setLabel(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
index 9bc9d4b..526eb3e 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Common.java
@@ -17,9 +17,8 @@ import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
 import java.net.URI;
+import java.util.*;
 
-import org.apache.juneau.*;
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -50,9 +49,12 @@ public abstract class Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the uri base of this object.
+	 * Bean property getter:  <property>base</property>.
 	 *
-	 * @return The URI base of this object.
+	 * <p>
+	 * The URI base of this object.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(prefix="xml", format=ATTR)
 	public URI getBase() {
@@ -60,28 +62,58 @@ public abstract class Common {
 	}
 
 	/**
-	 * Sets the URI base of this object.
+	 * Bean property setter:  <property>term</property>.
+	 *
+	 * <p>
+	 * The URI base of this object.
 	 *
 	 * <p>
 	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
 	 * Strings must be valid URIs.
 	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setBase(Object value) {
+		this.base = toURI(value);
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>base</property>.
+	 *
 	 * <p>
-	 * URIs defined by {@link UriResolver} can be used for values.
+	 * The URI base of this object.
 	 *
-	 * @param base The URI base of this object.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<URI> base() {
+		return Optional.ofNullable(base);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>base</property>.
+	 *
+	 * <p>
+	 * The URI base of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("base")
-	public Common base(Object base) {
-		this.base = toURI(base);
+	public Common base(Object value) {
+		setBase(value);
 		return this;
 	}
 
 	/**
-	 * Returns the language of this object.
+	 * Bean property getter:  <property>lang</property>.
+	 *
+	 * <p>
+	 * The language of this object.
 	 *
-	 * @return The language of this object.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(prefix="xml", format=ATTR)
 	public String getLang() {
@@ -89,14 +121,44 @@ public abstract class Common {
 	}
 
 	/**
-	 * Sets the language of this object.
+	 * Bean property setter:  <property>lang</property>.
+	 *
+	 * <p>
+	 * The language of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setLang(String value) {
+		this.lang = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>lang</property>.
+	 *
+	 * <p>
+	 * The language of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> lang() {
+		return Optional.ofNullable(lang);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>lang</property>.
+	 *
+	 * <p>
+	 * The language of this object.
 	 *
-	 * @param lang The language of this object.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("lang")
-	public Common lang(String lang) {
-		this.lang = lang;
+	public Common lang(String value) {
+		setLang(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
index 0c6179d..9ff0d3a 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/CommonEntry.java
@@ -17,7 +17,6 @@ import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.util.*;
 
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -71,9 +70,12 @@ public class CommonEntry extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the list of authors for this object.
+	 * Bean property getter:  <property>authors</property>.
 	 *
-	 * @return The list of authors for this object.
+	 * <p>
+	 * The list of authors for this object.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=COLLAPSED, childName="author")
 	public Person[] getAuthors() {
@@ -81,21 +83,54 @@ public class CommonEntry extends Common {
 	}
 
 	/**
-	 * Sets the list of authors for this object.
+	 * Bean property setter:  <property>authors</property>.
+	 *
+	 * <p>
+	 * The list of authors for this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setAuthors(Person[] value) {
+		this.authors = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>authors</property>.
+	 *
+	 * <p>
+	 * The list of authors for this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Person[]> authors() {
+		return Optional.ofNullable(authors);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>authors</property>.
+	 *
+	 * <p>
+	 * The list of authors for this object.
 	 *
-	 * @param authors The list of authors for this object.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("authors")
-	public CommonEntry authors(Person...authors) {
-		this.authors = authors;
+	public CommonEntry authors(Person...value) {
+		setAuthors(value);
 		return this;
 	}
 
 	/**
-	 * Returns the list of categories of this object.
+	 * Bean property getter:  <property>categories</property>.
 	 *
-	 * @return The list of categories of this object.
+	 * <p>
+	 * The list of categories of this object.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=COLLAPSED, childName="category")
 	public Category[] getCategories() {
@@ -103,21 +138,54 @@ public class CommonEntry extends Common {
 	}
 
 	/**
-	 * Sets the list of categories of this object.
+	 * Bean property setter:  <property>categories</property>.
+	 *
+	 * <p>
+	 * The list of categories of this object.
 	 *
-	 * @param categories The list of categories of this object.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setCategories(Category[] value) {
+		this.categories = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>categories</property>.
+	 *
+	 * <p>
+	 * The list of categories of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Category[]> categories() {
+		return Optional.ofNullable(categories);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>categories</property>.
+	 *
+	 * <p>
+	 * The list of categories of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("categories")
-	public CommonEntry categories(Category...categories) {
-		this.categories = categories;
+	public CommonEntry categories(Category...value) {
+		setCategories(value);
 		return this;
 	}
 
 	/**
-	 * Returns the list of contributors of this object.
+	 * Bean property getter:  <property>contributors</property>.
 	 *
-	 * @return The list of contributors of this object.
+	 * <p>
+	 * The list of contributors of this object.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=COLLAPSED, childName="contributor")
 	public Person[] getContributors() {
@@ -125,53 +193,124 @@ public class CommonEntry extends Common {
 	}
 
 	/**
-	 * Sets the list of contributors of this object.
+	 * Bean property setter:  <property>contributors</property>.
+	 *
+	 * <p>
+	 * The list of contributors of this object.
 	 *
-	 * @param contributors The list of contributors of this object.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setContributors(Person[] value) {
+		this.contributors = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>contributors</property>.
+	 *
+	 * <p>
+	 * The list of contributors of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Person[]> contributors() {
+		return Optional.ofNullable(contributors);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>contributors</property>.
+	 *
+	 * <p>
+	 * The list of contributors of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("contributors")
-	public CommonEntry contributors(Person...contributors) {
-		this.contributors = contributors;
+	public CommonEntry contributors(Person...value) {
+		setContributors(value);
 		return this;
 	}
 
 	/**
-	 * Returns the ID of this object.
+	 * Bean property getter:  <property>id</property>.
+	 *
+	 * <p>
+	 * The ID of this object.
 	 *
-	 * @return The ID of this object.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Id getId() {
 		return id;
 	}
 
 	/**
-	 * Sets the ID of this object.
+	 * Bean property setter:  <property>id</property>.
 	 *
-	 * @param id The ID of this object.
+	 * <p>
+	 * The ID of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setId(Id value) {
+		this.id = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>id</property>.
+	 *
+	 * <p>
+	 * The ID of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Id> id() {
+		return Optional.ofNullable(id);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>id</property>.
+	 *
+	 * <p>
+	 * The ID of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("id")
-	public CommonEntry id(Id id) {
-		this.id = id;
+	public CommonEntry id(Id value) {
+		setId(value);
 		return this;
 	}
 
 	/**
-	 * Sets the ID of this object.
+	 * Bean property fluent setter:  <property>id</property>.
 	 *
-	 * @param id The ID of this object.
+	 * <p>
+	 * The ID of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	public CommonEntry id(String id) {
-		this.id = new Id(id);
+	public CommonEntry id(String value) {
+		setId(new Id(value));
 		return this;
 	}
 
 	/**
-	 * Returns the list of links of this object.
+	 * Bean property getter:  <property>links</property>.
+	 *
+	 * <p>
+	 * The list of links of this object.
 	 *
-	 * @return The list of links of this object.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=COLLAPSED)
 	public Link[] getLinks() {
@@ -179,111 +318,253 @@ public class CommonEntry extends Common {
 	}
 
 	/**
-	 * Sets the list of links of this object.
+	 * Bean property setter:  <property>links</property>.
+	 *
+	 * <p>
+	 * The list of links of this object.
 	 *
-	 * @param links The list of links of this object.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setLinks(Link[] value) {
+		this.links = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>links</property>.
+	 *
+	 * <p>
+	 * The list of links of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Link[]> links() {
+		return Optional.ofNullable(links);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>links</property>.
+	 *
+	 * <p>
+	 * The list of links of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("links")
-	public CommonEntry links(Link...links) {
-		this.links = links;
+	public CommonEntry links(Link...value) {
+		setLinks(value);
 		return this;
 	}
 
 	/**
-	 * Returns the rights statement of this object.
+	 * Bean property getter:  <property>rights</property>.
 	 *
-	 * @return The rights statement of this object.
+	 * <p>
+	 * The rights statement of this object.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Text getRights() {
 		return rights;
 	}
 
 	/**
-	 * Sets the rights statement of this object.
+	 * Bean property setter:  <property>rights</property>.
+	 *
+	 * <p>
+	 * The rights statement of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setRights(Text value) {
+		this.rights = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>rights</property>.
 	 *
-	 * @param rights The rights statement of this object.
+	 * <p>
+	 * The rights statement of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Text> rights() {
+		return Optional.ofNullable(rights);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>rights</property>.
+	 *
+	 * <p>
+	 * The rights statement of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("rights")
-	public CommonEntry rights(Text rights) {
-		this.rights = rights;
+	public CommonEntry rights(Text value) {
+		setRights(value);
 		return this;
 	}
 
 	/**
-	 * Sets the rights statement of this object.
+	 * Bean property fluent setter:  <property>rights</property>.
+	 *
+	 * <p>
+	 * The rights statement of this object.
 	 *
-	 * @param rights The rights statement of this object.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	public CommonEntry rights(String rights) {
-		this.rights = new Text().text(rights);
+	public CommonEntry rights(String value) {
+		setRights(new Text().text(value));
 		return this;
 	}
 
 	/**
-	 * Returns the title of this object.
+	 * Bean property getter:  <property>title</property>.
 	 *
-	 * @return The title of this object.
+	 * <p>
+	 * The title of this object.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Text getTitle() {
 		return title;
 	}
 
 	/**
-	 * Sets the title of this object.
+	 * Bean property setter:  <property>title</property>.
 	 *
-	 * @param title The title of this object.
+	 * <p>
+	 * The title of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setTitle(Text value) {
+		this.title = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>title</property>.
+	 *
+	 * <p>
+	 * The title of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Text> title() {
+		return Optional.ofNullable(title);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>title</property>.
+	 *
+	 * <p>
+	 * The title of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("title")
-	public CommonEntry title(Text title) {
-		this.title = title;
+	public CommonEntry title(Text value) {
+		setTitle(value);
 		return this;
 	}
 
 	/**
-	 * Sets the title of this object.
+	 * Bean property fluent setter:  <property>title</property>.
 	 *
-	 * @param title The title of this object.
+	 * <p>
+	 * The title of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	public CommonEntry title(String title) {
-		this.title = new Text().text(title);
+	public CommonEntry title(String value) {
+		setTitle(new Text().text(value));
 		return this;
 	}
 
 	/**
-	 * Returns the update timestamp of this object.
+	 * Bean property getter:  <property>updated</property>.
+	 *
+	 * <p>
+	 * The update timestamp of this object.
 	 *
-	 * @return The update timestamp of this object.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Calendar getUpdated() {
 		return updated;
 	}
 
 	/**
-	 * Sets the update timestamp of this object.
+	 * Bean property setter:  <property>updated</property>.
 	 *
-	 * @param updated The update timestamp of this object.
+	 * <p>
+	 * The update timestamp of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setUpdated(Calendar value) {
+		this.updated = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>updated</property>.
+	 *
+	 * <p>
+	 * The update timestamp of this object.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Calendar> updated() {
+		return Optional.ofNullable(updated);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>updated</property>.
+	 *
+	 * <p>
+	 * The update timestamp of this object.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("updated")
-	public CommonEntry updated(Calendar updated) {
-		this.updated = updated;
+	public CommonEntry updated(Calendar value) {
+		setUpdated(value);
 		return this;
 	}
-
 	/**
-	 * Sets the update timestamp of this object.
+	 * Bean property fluent setter:  <property>updated</property>.
+	 *
+	 * <p>
+	 * The update timestamp of this object.
 	 *
-	 * @param updated The update timestamp of this object in ISO8601 format.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("updated")
-	public CommonEntry updated(String updated) {
-		this.updated = parseDateTime(updated);
+	public CommonEntry updated(String value) {
+		setUpdated(parseDateTime(value));
 		return this;
 	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
index b5f569b..3706afe 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Content.java
@@ -17,9 +17,8 @@ import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
 import java.net.URI;
+import java.util.*;
 
-import org.apache.juneau.*;
-import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -94,9 +93,12 @@ public class Content extends Text {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the source URI.
+	 * Bean property getter:  <property>src</property>.
 	 *
-	 * @return the source URI.
+	 * <p>
+	 * The source URI.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public URI getSrc() {
@@ -104,21 +106,48 @@ public class Content extends Text {
 	}
 
 	/**
-	 * Sets the source URI.
+	 * Bean property setter:  <property>src</property>.
+	 *
+	 * <p>
+	 * The source URI.
 	 *
 	 * <p>
 	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
 	 * Strings must be valid URIs.
 	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setSrc(Object value) {
+		this.src = toURI(value);
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>src</property>.
+	 *
+	 * <p>
+	 * The source URI.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<URI> src() {
+		return Optional.ofNullable(src);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>src</property>.
+	 *
 	 * <p>
-	 * URIs defined by {@link UriResolver} can be used for values.
+	 * The source URI.
 	 *
-	 * @param src The source URI.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("src")
-	public Content src(Object src) {
-		this.src = toURI(src);
+	public Content src(Object value) {
+		setSrc(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
index 8f6ea84..f91a0d1 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Entry.java
@@ -86,110 +86,250 @@ public class Entry extends CommonEntry {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the content of this entry.
+	 * Bean property getter:  <property>content</property>.
 	 *
-	 * @return The content of this entry.
+	 * <p>
+	 * The content of this entry.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Content getContent() {
 		return content;
 	}
 
 	/**
-	 * Sets the content of this entry.
+	 * Bean property setter:  <property>content</property>.
+	 *
+	 * <p>
+	 * The content of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setContent(Content value) {
+		this.content = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>content</property>.
+	 *
+	 * <p>
+	 * The content of this entry.
 	 *
-	 * @param content The content of this entry.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Content> content() {
+		return Optional.ofNullable(content);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>content</property>.
+	 *
+	 * <p>
+	 * The content of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("content")
-	public Entry content(Content content) {
-		this.content = content;
+	public Entry content(Content value) {
+		setContent(value);
 		return this;
 	}
 
 	/**
-	 * Returns the publish timestamp of this entry.
+	 * Bean property getter:  <property>published</property>.
+	 *
+	 * <p>
+	 * The publish timestamp of this entry.
 	 *
-	 * @return The publish timestamp of this entry.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Calendar getPublished() {
 		return published;
 	}
 
 	/**
-	 * Sets the publish timestamp of this entry.
+	 * Bean property setter:  <property>published</property>.
 	 *
-	 * @param published The publish timestamp of this entry.
+	 * <p>
+	 * The publish timestamp of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setPublished(Calendar value) {
+		this.published = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>published</property>.
+	 *
+	 * <p>
+	 * The publish timestamp of this entry.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Calendar> published() {
+		return Optional.ofNullable(published);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>published</property>.
+	 *
+	 * <p>
+	 * The publish timestamp of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("published")
-	public Entry published(Calendar published) {
-		this.published = published;
+	public Entry published(Calendar value) {
+		setPublished(value);
 		return this;
 	}
 
 	/**
-	 * Sets the publish timestamp of this entry.
+	 * Bean property fluent setter:  <property>published</property>.
+	 *
+	 * <p>
+	 * The publish timestamp of this entry.
 	 *
-	 * @param published The publish timestamp of this entry in ISO8601 format.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("published")
-	public Entry published(String published) {
-		this.published = parseDateTime(published);
+	public Entry published(String value) {
+		setPublished(parseDateTime(value));
 		return this;
 	}
 
 	/**
-	 * Returns the source of this entry.
+	 * Bean property getter:  <property>source</property>.
 	 *
-	 * @return The source of this entry.
+	 * <p>
+	 * The source of this entry.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Source getSource() {
 		return source;
 	}
 
 	/**
-	 * Sets the source of this entry.
+	 * Bean property setter:  <property>source</property>.
+	 *
+	 * <p>
+	 * The source of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setSource(Source value) {
+		this.source = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>source</property>.
+	 *
+	 * <p>
+	 * The source of this entry.
 	 *
-	 * @param source The source of this entry.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Source> source() {
+		return Optional.ofNullable(source);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>source</property>.
+	 *
+	 * <p>
+	 * The source of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("source")
-	public Entry source(Source source) {
-		this.source = source;
+	public Entry source(Source value) {
+		setSource(value);
 		return this;
 	}
 
 	/**
-	 * Returns the summary of this entry.
+	 * Bean property getter:  <property>summary</property>.
+	 *
+	 * <p>
+	 * The summary of this entry.
 	 *
-	 * @return The summary of this entry.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Text getSummary() {
 		return summary;
 	}
 
 	/**
-	 * Sets the summary of this entry.
+	 * Bean property setter:  <property>summary</property>.
 	 *
-	 * @param summary The summary of this entry.
+	 * <p>
+	 * The summary of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setSummary(Text value) {
+		this.summary = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>summary</property>.
+	 *
+	 * <p>
+	 * The summary of this entry.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Text> summary() {
+		return Optional.ofNullable(summary);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>summary</property>.
+	 *
+	 * <p>
+	 * The summary of this entry.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("summary")
-	public Entry summary(Text summary) {
-		this.summary = summary;
+	public Entry summary(Text value) {
+		setSummary(value);
 		return this;
 	}
 
 	/**
-	 * Sets the summary of this entry.
+	 * Bean property fluent setter:  <property>summary</property>.
+	 *
+	 * <p>
+	 * The summary of this entry.
 	 *
-	 * @param summary The summary of this entry.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("summary")
-	public Entry summary(String summary) {
-		this.summary = new Text(summary);
+	public Entry summary(String value) {
+		setSummary(new Text(value));
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
index c71c847..9ec9a6e 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Feed.java
@@ -92,105 +92,244 @@ public class Feed extends CommonEntry {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns generator information on this feed.
+	 * Bean property getter:  <property>generator</property>.
 	 *
-	 * @return The generator information on this feed.
+	 * <p>
+	 * The generator information on this feed.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Generator getGenerator() {
 		return generator;
 	}
 
 	/**
-	 * Sets the generator information on this feed.
+	 * Bean property setter:  <property>generator</property>.
+	 *
+	 * <p>
+	 * The generator information on this feed.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setGenerator(Generator value) {
+		this.generator = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>generator</property>.
+	 *
+	 * <p>
+	 * The generator information on this feed.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Generator> generator() {
+		return Optional.ofNullable(generator);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>generator</property>.
+	 *
+	 * <p>
+	 * The generator information on this feed.
 	 *
-	 * @param generator The generator information on this feed.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("generator")
-	public Feed generator(Generator generator) {
-		this.generator = generator;
+	public Feed generator(Generator value) {
+		setGenerator(value);
 		return this;
 	}
 
 	/**
-	 * Returns the feed icon.
+	 * Bean property getter:  <property>icon</property>.
 	 *
-	 * @return The feed icon.
+	 * <p>
+	 * The feed icon.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Icon getIcon() {
 		return icon;
 	}
 
 	/**
-	 * Sets the feed icon.
+	 * Bean property setter:  <property>icon</property>.
+	 *
+	 * <p>
+	 * The feed icon.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setIcon(Icon value) {
+		this.icon = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>icon</property>.
+	 *
+	 * <p>
+	 * The feed icon.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Icon> icon() {
+		return Optional.ofNullable(icon);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>icon</property>.
 	 *
-	 * @param icon The feed icon.
+	 * <p>
+	 * The feed icon.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("icon")
-	public Feed icon(Icon icon) {
-		this.icon = icon;
+	public Feed icon(Icon value) {
+		setIcon(value);
 		return this;
 	}
 
 	/**
-	 * Returns the feed logo.
+	 * Bean property getter:  <property>logo</property>.
+	 *
+	 * <p>
+	 * The feed logo.
 	 *
-	 * @return The feed logo.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Logo getLogo() {
 		return logo;
 	}
 
 	/**
-	 * Sets the feed logo.
+	 * Bean property setter:  <property>logo</property>.
+	 *
+	 * <p>
+	 * The feed logo.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setLogo(Logo value) {
+		this.logo = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>logo</property>.
+	 *
+	 * <p>
+	 * The feed logo.
 	 *
-	 * @param logo The feed logo.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Logo> logo() {
+		return Optional.ofNullable(logo);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>logo</property>.
+	 *
+	 * <p>
+	 * The feed logo.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("logo")
-	public Feed logo(Logo logo) {
-		this.logo = logo;
+	public Feed logo(Logo value) {
+		setLogo(value);
 		return this;
 	}
 
 	/**
-	 * Returns the feed subtitle.
+	 * Bean property getter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The feed subtitle.
 	 *
-	 * @return The feed subtitle.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
-	@Beanp("subtitle")
-	public Text getSubTitle() {
+	public Text getSubtitle() {
 		return subtitle;
 	}
 
 	/**
-	 * Sets the feed subtitle.
+	 * Bean property setter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The feed subtitle.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setSubtitle(Text value) {
+		this.subtitle = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The feed subtitle.
 	 *
-	 * @param subtitle The feed subtitle.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Text> subtitle() {
+		return Optional.ofNullable(subtitle);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The feed subtitle.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("subtitle")
-	public Feed subtitle(Text subtitle) {
-		this.subtitle = subtitle;
+	public Feed subtitle(Text value) {
+		setSubtitle(value);
 		return this;
 	}
 
 	/**
-	 * Sets the feed subtitle.
+	 * Bean property fluent setter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The feed subtitle.
 	 *
-	 * @param subtitle The feed subtitle.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	public Feed subtitle(String subtitle) {
-		this.subtitle = new Text(subtitle);
+	public Feed subtitle(String value) {
+		setSubtitle(new Text(value));
 		return this;
 	}
 
 	/**
-	 * Returns the entries in the feed.
+	 * Bean property getter:  <property>entries</property>.
 	 *
-	 * @return The entries in the feed.
+	 * <p>
+	 * The entries in the feed.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=COLLAPSED)
 	public Entry[] getEntries() {
@@ -198,14 +337,44 @@ public class Feed extends CommonEntry {
 	}
 
 	/**
-	 * Sets the entries in the feed.
+	 * Bean property setter:  <property>entries</property>.
+	 *
+	 * <p>
+	 * The entries in the feed.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setEntries(Entry[] value) {
+		this.entries = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>entries</property>.
+	 *
+	 * <p>
+	 * The entries in the feed.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Entry[]> entries() {
+		return Optional.ofNullable(entries);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>entries</property>.
+	 *
+	 * <p>
+	 * The entries in the feed.
 	 *
-	 * @param entries The entries in the feed.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("entries")
-	public Feed entries(Entry...entries) {
-		this.entries = entries;
+	public Feed entries(Entry...value) {
+		setEntries(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java
index 6e2baa4..853197d 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Generator.java
@@ -17,8 +17,8 @@ import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
 import java.net.URI;
+import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -66,9 +66,12 @@ public class Generator extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the URI of this generator statement.
+	 * Bean property getter:  <property>uri</property>.
 	 *
-	 * @return The URI of this generator statement.
+	 * <p>
+	 * The URI of this generator statement.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public URI getUri() {
@@ -76,28 +79,58 @@ public class Generator extends Common {
 	}
 
 	/**
-	 * Sets the URI of this generator statement.
+	 * Bean property setter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of this generator statement.
 	 *
 	 * <p>
 	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
 	 * Strings must be valid URIs.
 	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setUri(Object value) {
+		this.uri = toURI(value);
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>uri</property>.
+	 *
 	 * <p>
-	 * URIs defined by {@link UriResolver} can be used for values.
+	 * The URI of this generator statement.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<URI> uri() {
+		return Optional.ofNullable(uri);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>uri</property>.
 	 *
-	 * @param uri The URI of this generator statement.
+	 * <p>
+	 * The URI of this generator statement.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("uri")
-	public Generator uri(Object uri) {
-		this.uri = toURI(uri);
+	public Generator uri(Object value) {
+		setUri(value);
 		return this;
 	}
 
 	/**
-	 * Returns the version of this generator statement.
+	 * Bean property getter:  <property>version</property>.
+	 *
+	 * <p>
+	 * The version of this generator statement.
 	 *
-	 * @return The version of this generator statement.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getVersion() {
@@ -105,21 +138,54 @@ public class Generator extends Common {
 	}
 
 	/**
-	 * Sets the version of this generator statement.
+	 * Bean property setter:  <property>version</property>.
+	 *
+	 * <p>
+	 * The version of this generator statement.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setVersion(String value) {
+		this.version = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>version</property>.
+	 *
+	 * <p>
+	 * The version of this generator statement.
 	 *
-	 * @param version The version of this generator statement.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> version() {
+		return Optional.ofNullable(version);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>version</property>.
+	 *
+	 * <p>
+	 * The version of this generator statement.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("version")
-	public Generator version(String version) {
-		this.version = version;
+	public Generator version(String value) {
+		setVersion(value);
 		return this;
 	}
 
 	/**
-	 * Returns the content of this generator statement.
+	 * Bean property getter:  <property>text</property>.
 	 *
-	 * @return The content of this generator statement.
+	 * <p>
+	 * The content of this generator statement.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=TEXT)
 	public String getText() {
@@ -127,14 +193,44 @@ public class Generator extends Common {
 	}
 
 	/**
-	 * Sets the content of this generator statement.
+	 * Bean property setter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this generator statement.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setText(String value) {
+		this.text = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>text</property>.
 	 *
-	 * @param text The content of this generator statement.
+	 * <p>
+	 * The content of this generator statement.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> text() {
+		return Optional.ofNullable(text);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this generator statement.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("text")
-	public Generator text(String text) {
-		this.text = text;
+	public Generator text(String value) {
+		setText(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java
index c86e3f0..df81301 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Icon.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
 import java.net.URI;
+import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
@@ -69,9 +70,12 @@ public class Icon extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the URI of this icon.
+	 * Bean property getter:  <property>uri</property>.
 	 *
-	 * @return The URI of this icon.
+	 * <p>
+	 * The URI of this icon.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ELEMENTS)
 	public URI getUri() {
@@ -79,21 +83,48 @@ public class Icon extends Common {
 	}
 
 	/**
-	 * Sets the URI of this icon.
+	 * Bean property setter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of this icon.
 	 *
 	 * <p>
 	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
 	 * Strings must be valid URIs.
 	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setUri(Object value) {
+		this.uri = toURI(value);
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>uri</property>.
+	 *
 	 * <p>
-	 * URIs defined by {@link UriResolver} can be used for values.
+	 * The URI of this icon.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<URI> uri() {
+		return Optional.ofNullable(uri);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * XXThe URI of this icon.X
 	 *
-	 * @param uri The URI of this icon.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("uri")
-	public Icon uri(Object uri) {
-		this.uri = toURI(uri);
+	public Icon uri(Object value) {
+		setUri(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java
index 8ac5884..0faefe3 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Id.java
@@ -14,6 +14,8 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.util.*;
+
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -56,9 +58,12 @@ public class Id extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the content of this identifier.
+	 * Bean property getter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this identifier.
 	 *
-	 * @return The content of this identifier.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=TEXT)
 	public String getText() {
@@ -66,14 +71,44 @@ public class Id extends Common {
 	}
 
 	/**
-	 * Sets the content of this identifier.
+	 * Bean property setter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this identifier.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setText(String value) {
+		this.text = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this identifier.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> text() {
+		return Optional.ofNullable(text);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this identifier.
 	 *
-	 * @param text The content of this identifier.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("text")
-	public Id text(String text) {
-		this.text = text;
+	public Id text(String value) {
+		setText(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java
index 951667a..48eac81 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Link.java
@@ -14,6 +14,8 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
+import java.util.*;
+
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.xml.annotation.*;
 
@@ -71,9 +73,12 @@ public class Link extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the href of the target of this link.
+	 * Bean property getter:  <property>href</property>.
+	 *
+	 * <p>
+	 * The href of the target of this link.
 	 *
-	 * @return The href of the target of this link.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getHref() {
@@ -81,21 +86,54 @@ public class Link extends Common {
 	}
 
 	/**
-	 * Sets the href of the target of this link.
+	 * Bean property setter:  <property>href</property>.
+	 *
+	 * <p>
+	 * The href of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setHref(String value) {
+		this.href = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>href</property>.
+	 *
+	 * <p>
+	 * The href of the target of this link.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> href() {
+		return Optional.ofNullable(href);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>href</property>.
 	 *
-	 * @param href The href of the target of this link.
+	 * <p>
+	 * The href of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("href")
-	public Link href(String href) {
-		this.href = href;
+	public Link href(String value) {
+		setHref(value);
 		return this;
 	}
 
 	/**
-	 * Returns the rel of this link.
+	 * Bean property getter:  <property>rel</property>.
+	 *
+	 * <p>
+	 * The rel of this link.
 	 *
-	 * @return The rel of this link.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getRel() {
@@ -103,21 +141,54 @@ public class Link extends Common {
 	}
 
 	/**
-	 * Sets the rel of this link.
+	 * Bean property setter:  <property>rel</property>.
+	 *
+	 * <p>
+	 * The rel of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setRel(String value) {
+		this.rel = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>rel</property>.
 	 *
-	 * @param rel The rel of this link.
+	 * <p>
+	 * The rel of this link.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> rel() {
+		return Optional.ofNullable(rel);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>rel</property>.
+	 *
+	 * <p>
+	 * The rel of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("rel")
-	public Link rel(String rel) {
-		this.rel = rel;
+	public Link rel(String value) {
+		setRel(value);
 		return this;
 	}
 
 	/**
-	 * Returns the content type of the target of this link.
+	 * Bean property getter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of the target of this link.
 	 *
-	 * @return The content type of the target of this link.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getType() {
@@ -125,7 +196,10 @@ public class Link extends Common {
 	}
 
 	/**
-	 * Sets the content type of the target of this link.
+	 * Bean property setter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of the target of this link.
 	 *
 	 * <p>
 	 * Must be one of the following:
@@ -136,19 +210,49 @@ public class Link extends Common {
 	 * 	<li><jk>null</jk> (defaults to <js>"text"</js>)
 	 * </ul>
 	 *
-	 * @param type The content type of the target of this link.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setType(String value) {
+		this.type = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of the target of this link.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> type() {
+		return Optional.ofNullable(type);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("type")
-	public Link type(String type) {
-		this.type = type;
+	public Link type(String value) {
+		setType(value);
 		return this;
 	}
 
 	/**
-	 * Returns the language of the target of this link.
+	 * Bean property getter:  <property>hreflang</property>.
 	 *
-	 * @return The language of the target of this link.
+	 * <p>
+	 * The language of the target of this link.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getHreflang() {
@@ -156,21 +260,54 @@ public class Link extends Common {
 	}
 
 	/**
-	 * Sets the language of the target of this link.
+	 * Bean property setter:  <property>hreflang</property>.
+	 *
+	 * <p>
+	 * The language of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setHreflang(String value) {
+		this.hreflang = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>hreflang</property>.
+	 *
+	 * <p>
+	 * The language of the target of this link.
 	 *
-	 * @param hreflang The language of the target of this link.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> hreflang() {
+		return Optional.ofNullable(hreflang);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>hreflang</property>.
+	 *
+	 * <p>
+	 * The language of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("hreflang")
-	public Link hreflang(String hreflang) {
-		this.hreflang = hreflang;
+	public Link hreflang(String value) {
+		setHreflang(value);
 		return this;
 	}
 
 	/**
-	 * Returns the title of the target of this link.
+	 * Bean property getter:  <property>title</property>.
 	 *
-	 * @return The title of the target of this link.
+	 * <p>
+	 * The title of the target of this link.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getTitle() {
@@ -178,21 +315,54 @@ public class Link extends Common {
 	}
 
 	/**
-	 * Sets the title of the target of this link.
+	 * Bean property setter:  <property>title</property>.
+	 *
+	 * <p>
+	 * The title of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setTitle(String value) {
+		this.title = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>title</property>.
 	 *
-	 * @param title The title of the target of this link.
+	 * <p>
+	 * The title of the target of this link.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> title() {
+		return Optional.ofNullable(title);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>title</property>.
+	 *
+	 * <p>
+	 * The title of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("title")
-	public Link title(String title) {
-		this.title = title;
+	public Link title(String value) {
+		setTitle(value);
 		return this;
 	}
 
 	/**
-	 * Returns the length of the contents of the target of this link.
+	 * Bean property getter:  <property>length</property>.
+	 *
+	 * <p>
+	 * The length of the contents of the target of this link.
 	 *
-	 * @return The length of the contents of the target of this link.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public Integer getLength() {
@@ -200,14 +370,44 @@ public class Link extends Common {
 	}
 
 	/**
-	 * Sets the length of the contents of the target of this link.
+	 * Bean property setter:  <property>length</property>.
+	 *
+	 * <p>
+	 * The length of the contents of the target of this link.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setLength(Integer value) {
+		this.length = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>length</property>.
+	 *
+	 * <p>
+	 * The length of the contents of the target of this link.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Integer> length() {
+		return Optional.ofNullable(length);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>length</property>.
+	 *
+	 * <p>
+	 * The length of the contents of the target of this link.
 	 *
-	 * @param length The length of the contents of the target of this link.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("length")
-	public Link length(Integer length) {
-		this.length = length;
+	public Link length(Integer value) {
+		setLength(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java
index de69fff..ccfbf49 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Logo.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
 import java.net.URI;
+import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
@@ -69,9 +70,12 @@ public class Logo extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the URI of the logo.
+	 * Bean property getter:  <property>uri</property>.
 	 *
-	 * @return The URI of the logo.
+	 * <p>
+	 * The URI of the logo.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ELEMENTS)
 	public URI getUri() {
@@ -79,7 +83,10 @@ public class Logo extends Common {
 	}
 
 	/**
-	 * Sets the URI of the logo.
+	 * Bean property setter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of the logo.
 	 *
 	 * <p>
 	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
@@ -88,12 +95,39 @@ public class Logo extends Common {
 	 * <p>
 	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
-	 * @param uri The URI of the logo.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setUri(Object value) {
+		this.uri = toURI(value);
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of the logo.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<URI> uri() {
+		return Optional.ofNullable(uri);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of the logo.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("uri")
-	public Logo uri(Object uri) {
-		this.uri = toURI(uri);
+	public Logo uri(Object value) {
+		setUri(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java
index 7275b40..e54009a 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Person.java
@@ -16,11 +16,10 @@ import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
 import java.net.URI;
+import java.util.*;
 
 import org.apache.juneau.*;
 
-import org.apache.juneau.annotation.*;
-
 /**
  * Represents an <c>atomPersonConstruct</c> construct in the RFC4287 specification.
  *
@@ -64,37 +63,76 @@ public class Person extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the name of the person.
+	 * Bean property getter:  <property>name</property>.
+	 *
+	 * <p>
+	 * The name of the person.
 	 *
-	 * @return The name of the person.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public String getName() {
 		return name;
 	}
 
 	/**
-	 * Sets the name of the person.
+	 * Bean property setter:  <property>name</property>.
 	 *
-	 * @param name The name of the person.
+	 * <p>
+	 * The name of the person.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setName(String value) {
+		this.name = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>name</property>.
+	 *
+	 * <p>
+	 * The name of the person.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> name() {
+		return Optional.ofNullable(name);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>name</property>.
+	 *
+	 * <p>
+	 * The name of the person.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("name")
-	public Person name(String name) {
-		this.name = name;
+	public Person name(String value) {
+		setName(value);
 		return this;
 	}
 
 	/**
-	 * Returns the URI of the person.
+	 * Bean property getter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of the person.
 	 *
-	 * @return The URI of the person.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public URI getUri() {
 		return uri;
 	}
 
 	/**
-	 * Sets the URI of the person.
+	 * Bean property setter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of the person.
 	 *
 	 * <p>
 	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
@@ -103,33 +141,93 @@ public class Person extends Common {
 	 * <p>
 	 * URIs defined by {@link UriResolver} can be used for values.
 	 *
-	 * @param uri The URI of the person.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setUri(Object value) {
+		this.uri = toURI(value);
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>uri</property>.
+	 *
+	 * <p>
+	 * The URI of the person.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<URI> uri() {
+		return Optional.ofNullable(uri);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>v</property>.
+	 *
+	 * <p>
+	 * The URI of the person.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("uri")
-	public Person uri(Object uri) {
-		this.uri = toURI(uri);
+	public Person uri(Object value) {
+		setUri(value);
 		return this;
 	}
 
 	/**
-	 * Returns the email address of the person.
+	 * Bean property getter:  <property>email</property>.
 	 *
-	 * @return The email address of the person.
+	 * <p>
+	 * The email address of the person.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public String getEmail() {
 		return email;
 	}
 
 	/**
-	 * Sets the email address of the person.
+	 * Bean property setter:  <property>email</property>.
+	 *
+	 * <p>
+	 * The email address of the person.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setEmail(String value) {
+		this.email = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>email</property>.
+	 *
+	 * <p>
+	 * The email address of the person.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> email() {
+		return Optional.ofNullable(email);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>email</property>.
+	 *
+	 * <p>
+	 * The email address of the person.
 	 *
-	 * @param email The email address of the person.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("email")
-	public Person email(String email) {
-		this.email = email;
+	public Person email(String value) {
+		setEmail(value);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java
index 30144e9..440066f 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Source.java
@@ -14,8 +14,6 @@ package org.apache.juneau.dto.atom;
 
 import java.util.*;
 
-import org.apache.juneau.annotation.*;
-
 /**
  * Represents an <c>atomSource</c> construct in the RFC4287 specification.
  *
@@ -58,98 +56,234 @@ public class Source extends CommonEntry {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the generator info of this source.
+	 * Bean property getter:  <property>generator</property>.
+	 *
+	 * <p>
+	 * The generator info of this source.
 	 *
-	 * @return The generator info of this source.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Generator getGenerator() {
 		return generator;
 	}
 
 	/**
-	 * Sets the generator info of this source.
+	 * Bean property setter:  <property>generator</property>.
+	 *
+	 * <p>
+	 * The generator info of this source.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setGenerator(Generator value) {
+		this.generator = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>generator</property>.
+	 *
+	 * <p>
+	 * The generator info of this source.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Generator> generator() {
+		return Optional.ofNullable(generator);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>generator</property>.
+	 *
+	 * <p>
+	 * The generator info of this source.
 	 *
-	 * @param generator The generator info of this source.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("generator")
-	public Source generator(Generator generator) {
-		this.generator = generator;
+	public Source generator(Generator value) {
+		setGenerator(value);
 		return this;
 	}
 
 	/**
-	 * Returns the icon of this source.
+	 * Bean property getter:  <property>icon</property>.
 	 *
-	 * @return The icon of this source.
+	 * <p>
+	 * The icon of this source.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Icon getIcon() {
 		return icon;
 	}
 
 	/**
-	 * Sets the icon of this source.
+	 * Bean property setter:  <property>icon</property>.
+	 *
+	 * <p>
+	 * The icon of this source.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setIcon(Icon value) {
+		this.icon = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>icon</property>.
+	 *
+	 * <p>
+	 * The icon of this source.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Icon> icon() {
+		return Optional.ofNullable(icon);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>icon</property>.
+	 *
+	 * <p>
+	 * The icon of this source.
 	 *
-	 * @param icon The icon of this source.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("icon")
-	public Source icon(Icon icon) {
-		this.icon = icon;
+	public Source icon(Icon value) {
+		setIcon(value);
 		return this;
 	}
 
 	/**
-	 * Returns the logo of this source.
+	 * Bean property getter:  <property>logo</property>.
 	 *
-	 * @return The logo of this source.
+	 * <p>
+	 * The logo of this source.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Logo getLogo() {
 		return logo;
 	}
 
 	/**
-	 * Sets the logo of this source.
+	 * Bean property setter:  <property>logo</property>.
+	 *
+	 * <p>
+	 * The logo of this source.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setLogo(Logo value) {
+		this.logo = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>logo</property>.
+	 *
+	 * <p>
+	 * The logo of this source.
 	 *
-	 * @param logo The logo of this source.
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Logo> logo() {
+		return Optional.ofNullable(logo);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>logo</property>.
+	 *
+	 * <p>
+	 * The logo of this source.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("logo")
-	public Source logo(Logo logo) {
-		this.logo = logo;
+	public Source logo(Logo value) {
+		setLogo(value);
 		return this;
 	}
 
 	/**
-	 * Returns the subtitle of this source.
+	 * Bean property getter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The subtitle of this source.
 	 *
-	 * @return The subtitle of this source.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	public Text getSubtitle() {
 		return subtitle;
 	}
 
 	/**
-	 * Sets the subtitle of this source.
+	 * Bean property setter:  <property>subtitle</property>.
 	 *
-	 * @param subtitle The subtitle of this source.
+	 * <p>
+	 * The subtitle of this source.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setSubtitle(Text value) {
+		this.subtitle = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The subtitle of this source.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<Text> subtitle() {
+		return Optional.ofNullable(subtitle);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The subtitle of this source.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("subtitle")
-	public Source subtitle(Text subtitle) {
-		this.subtitle = subtitle;
+	public Source subtitle(Text value) {
+		setSubtitle(value);
 		return this;
 	}
 
 	/**
-	 * Sets the subtitle of this source.
+	 * Bean property fluent setter:  <property>subtitle</property>.
+	 *
+	 * <p>
+	 * The subtitle of this source.
 	 *
-	 * @param subtitle The subtitle of this source.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("subtitle")
-	public Source subtitle(String subtitle) {
-		this.subtitle = new Text(subtitle);
+	public Source subtitle(String value) {
+		setSubtitle(new Text(value));
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java
index 44bf5ce..b2c5950 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/atom/Text.java
@@ -14,7 +14,8 @@ package org.apache.juneau.dto.atom;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
-import org.apache.juneau.annotation.*;
+import java.util.*;
+
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -69,9 +70,12 @@ public class Text extends Common {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Returns the content type of this content.
+	 * Bean property getter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of this content.
 	 *
-	 * @return The content type of this content.
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=ATTR)
 	public String getType() {
@@ -79,7 +83,10 @@ public class Text extends Common {
 	}
 
 	/**
-	 * Sets the content type of this content.
+	 * Bean property setter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of this content.
 	 *
 	 * <p>
 	 * Must be one of the following:
@@ -90,19 +97,52 @@ public class Text extends Common {
 	 * 	<li><jk>null</jk> (defaults to <js>"text"</js>)
 	 * </ul>
 	 *
-	 * @param type The content type of this content.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	/**
+	 * @param value The content type of this content.
+	 */
+	public void setType(String value) {
+		this.type = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of this content.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> type() {
+		return Optional.ofNullable(type);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>type</property>.
+	 *
+	 * <p>
+	 * The content type of this content.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("type")
-	public Text type(String type) {
-		this.type = type;
+	public Text type(String value) {
+		setType(value);
 		return this;
 	}
 
 	/**
-	 * Returns the content of this content.
+	 * Bean property getter:  <property>text</property>.
 	 *
-	 * @return The content of this content.
+	 * <p>
+	 * The content of this content.
+	 *
+	 * @return The property value, or <jk>null</jk> if it is not set.
 	 */
 	@Xml(format=XMLTEXT)
 	public String getText() {
@@ -110,14 +150,44 @@ public class Text extends Common {
 	}
 
 	/**
-	 * Sets the content of this content.
+	 * Bean property setter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this content.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
+	 */
+	public void setText(String value) {
+		this.text = value;
+	}
+
+	/**
+	 * Bean property fluent getter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this content.
+	 *
+	 * @return The property value as an {@link Optional}.  Never <jk>null</jk>.
+	 */
+	public Optional<String> text() {
+		return Optional.ofNullable(text);
+	}
+
+	/**
+	 * Bean property fluent setter:  <property>text</property>.
+	 *
+	 * <p>
+	 * The content of this content.
 	 *
-	 * @param text The content of this content.
+	 * @param value
+	 * 	The new value for this property.
+	 * 	<br>Can be <jk>null</jk> to unset the property.
 	 * @return This object (for method chaining).
 	 */
-	@Beanp("text")
-	public Text text(String text) {
-		this.text = text;
+	public Text text(String value) {
+		setText(value);
 		return this;
 	}