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 2018/01/07 02:37:30 UTC
[2/2] juneau git commit: Sort properties in context classes.
Sort properties in context classes.
Project: http://git-wip-us.apache.org/repos/asf/juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/juneau/commit/4eaa0728
Tree: http://git-wip-us.apache.org/repos/asf/juneau/tree/4eaa0728
Diff: http://git-wip-us.apache.org/repos/asf/juneau/diff/4eaa0728
Branch: refs/heads/master
Commit: 4eaa072813a45ffb2004bf4e670a1803e82cc2a5
Parents: 7b59610
Author: JamesBognar <ja...@apache.org>
Authored: Sat Jan 6 21:37:25 2018 -0500
Committer: JamesBognar <ja...@apache.org>
Committed: Sat Jan 6 21:37:25 2018 -0500
----------------------------------------------------------------------
.../org/apache/juneau/jena/RdfSerializer.java | 50 +-
.../java/org/apache/juneau/BeanContext.java | 714 +++++++++----------
.../apache/juneau/html/HtmlDocSerializer.java | 287 ++++----
.../org/apache/juneau/html/HtmlSerializer.java | 80 +--
.../org/apache/juneau/json/JsonSerializer.java | 34 +-
.../java/org/apache/juneau/parser/Parser.java | 112 +--
.../apache/juneau/serializer/Serializer.java | 250 +++----
.../org/apache/juneau/uon/UonSerializer.java | 38 +-
.../java/org/apache/juneau/xml/XmlParser.java | 82 +--
.../org/apache/juneau/xml/XmlSerializer.java | 90 +--
.../juneau/yaml/proto/YamlSerializer.java | 34 +-
.../apache/juneau/rest/client/RestClient.java | 228 +++---
12 files changed, 997 insertions(+), 1002 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index e7c38ae..bae00c5 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -51,6 +51,31 @@ public class RdfSerializer extends WriterSerializer implements RdfCommon {
private static final String PREFIX = "RdfSerializer.";
/**
+ * Configuration property: Add <js>"_type"</js> properties when needed.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"RdfSerializer.addBeanTypeProperties.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
+ * through reflection.
+ * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
+ * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined
+ * from the value type.
+ *
+ * <p>
+ * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
+ * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
+ */
+ public static final String RDF_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
+
+ /**
* Configuration property: Add XSI data types to non-<code>String</code> literals.
*
* <h5 class='section'>Property:</h5>
@@ -124,31 +149,6 @@ public class RdfSerializer extends WriterSerializer implements RdfCommon {
*/
public static final String RDF_namespaces = PREFIX + "namespaces.ls";
- /**
- * Configuration property: Add <js>"_type"</js> properties when needed.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"RdfSerializer.addBeanTypeProperties.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
- * through reflection.
- * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
- * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined
- * from the value type.
- *
- * <p>
- * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
- * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
- */
- public static final String RDF_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
-
//-------------------------------------------------------------------------------------------------------------------
// Predefined instances
http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index f033b5d..9099910 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -225,82 +225,169 @@ public class BeanContext extends Context {
static final String PREFIX = "BeanContext.";
/**
- * Configuration property: Beans require no-arg constructors.
+ * Configuration property: Look for bean classes with the specified minimum visibility.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beansRequireDefaultConstructor.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Name:</b> <js>"BeanContext.beanClassVisibility.s"</js>
+ * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
+ * <li><b>Default:</b> <js>"PUBLIC"</js>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, a Java class must implement a default no-arg constructor to be considered a bean.
- *
- * <p>
- * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
+ * Classes are not considered beans unless they meet the minimum visibility requirements.
+ * For example, if the visibility is <code>PUBLIC</code> and the bean class is <jk>protected</jk>, then the class
+ * will not be interpreted as a bean class.
*/
- public static final String BEAN_beansRequireDefaultConstructor = PREFIX + "beansRequireDefaultConstructor.b";
+ public static final String BEAN_beanClassVisibility = PREFIX + "beanClassVisibility.s";
/**
- * Configuration property: Beans require {@link Serializable} interface.
+ * Configuration property: Look for bean constructors with the specified minimum visibility.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beansRequireSerializable.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Name:</b> <js>"BeanContext.beanConstructorVisibility.s"</js>
+ * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
+ * <li><b>Default:</b> <js>"PUBLIC"</js>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
+ */
+ public static final String BEAN_beanConstructorVisibility = PREFIX + "beanConstructorVisibility.s";
+
+ /**
+ * Configuration property: Bean lookup dictionary.
*
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"BeanContext.beanDictionary.lc"</js>
+ * <li><b>Data type:</b> <code>List<Class></code>
+ * <li><b>Default:</b> empty list
+ * <li><b>Session-overridable:</b> <jk>false</jk>
+ * </ul>
+ *
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, a Java class must implement the {@link Serializable} interface to be considered a bean.
+ * The list of classes that make up the bean dictionary in this bean context.
+ *
+ * <p>
+ * A dictionary is a name/class mapping used to find class types during parsing when they cannot be inferred
+ * through reflection.
+ * <br>The names are defined through the {@link Bean#typeName()} annotation defined on the bean class.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode'>
+ * BeanContext bc = BeanContext.<jsm>create</jsm>().beanDictionary(Bar.<jk>class</jk>, Baz.<jk>class</jk>).build();
+ * </p>
*
* <p>
- * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
+ * <h5 class='section'>Notes:</h5>
+ * <ul class='spaced-list'>
+ * <li>Properties:
+ * <ul>
+ * <li>{@link BeanContext#BEAN_beanDictionary}
+ * <li>{@link BeanContext#BEAN_beanDictionary_add}
+ * <li>{@link BeanContext#BEAN_beanDictionary_remove}
+ * </ul>
+ * <li>Annotations:
+ * <ul>
+ * <li>{@link Bean#beanDictionary()}
+ * <li>{@link BeanProperty#beanDictionary()}
+ * </ul>
+ * <li>Methods:
+ * <ul>
+ * <li>{@link BeanContextBuilder#beanDictionary(Object...)}
+ * <li>{@link BeanContextBuilder#beanDictionary(boolean,Object...)}
+ * <li>{@link BeanContextBuilder#beanDictionaryRemove(Object...)}
+ * </ul>
+ * <li>Values can consist of any of the following types:
+ * <ul>
+ * <li>Any bean class that specifies a value for {@link Bean#typeName() @Bean.typeName()}.
+ * <li>Any subclass of {@link BeanDictionaryList} containing a collection of bean classes with type name
+ * annotations.
+ * <li>Any subclass of {@link BeanDictionaryMap} containing a mapping of type names to classes without type name
+ * annotations.
+ * </ul>
+ * <li>See <a class='doclink' href='../../../overview-summary.html#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a>
+ * for more information.
+ * </ul>
*/
- public static final String BEAN_beansRequireSerializable = PREFIX + "beansRequireSerializable.b";
+ public static final String BEAN_beanDictionary = PREFIX + "beanDictionary.lc";
/**
- * Configuration property: Beans require setters for getters.
+ * Configuration property: Add to bean lookup dictionary.
+ */
+ public static final String BEAN_beanDictionary_add = PREFIX + "beanDictionary.lc/add";
+
+ /**
+ * Configuration property: Remove from bean lookup dictionary.
+ */
+ public static final String BEAN_beanDictionary_remove = PREFIX + "beanDictionary.lc/remove";
+
+ /**
+ * Configuration property: Look for bean fields with the specified minimum visibility.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beansRequireSettersForGetters.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Name:</b> <js>"BeanContext.beanFieldVisibility.s"</js>
+ * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
+ * <li><b>Default:</b> <js>"PUBLIC"</js>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, only getters that have equivalent setters will be considered as properties on a bean.
- * Otherwise, they will be ignored.
+ * Fields are not considered bean properties unless they meet the minimum visibility requirements.
+ * For example, if the visibility is <code>PUBLIC</code> and the bean field is <jk>protected</jk>, then the field
+ * will not be interpreted as a bean property.
+ *
+ * <p>
+ * Use {@link Visibility#NONE} to prevent bean fields from being interpreted as bean properties altogether.
*/
- public static final String BEAN_beansRequireSettersForGetters = PREFIX + "beansRequireSettersForGetters.b";
+ public static final String BEAN_beanFieldVisibility = PREFIX + "beanFieldVisibility.s";
/**
- * Configuration property: Beans require at least one property.
+ * Configuration property: Bean filters to apply to beans.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beansRequireSomeProperties.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>true</jk>
+ * <li><b>Name:</b> <js>"BeanContext.beanFilters.lc"</js>
+ * <li><b>Data type:</b> <code>List<Class></code>
+ * <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, then a Java class must contain at least 1 property to be considered a bean.
+ * This is a programmatic equivalent to the {@link Bean @Bean} annotation.
+ * It's useful when you want to use the Bean annotation functionality, but you don't have the ability to alter the
+ * bean classes.
*
* <p>
- * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
+ * There are two category of classes that can be passed in through this method:
+ * <ul class='spaced-list'>
+ * <li>
+ * Subclasses of {@link BeanFilterBuilder}.
+ * These must have a public no-arg constructor.
+ * <li>
+ * Bean interface classes.
+ * A shortcut for defining a {@link InterfaceBeanFilterBuilder}.
+ * Any subclasses of an interface class will only have properties defined on the interface.
+ * All other bean properties will be ignored.
+ * </ul>
*/
- public static final String BEAN_beansRequireSomeProperties = PREFIX + "beansRequireSomeProperties.b";
+ public static final String BEAN_beanFilters = PREFIX + "beanFilters.lc";
+
+ /**
+ * Configuration property: Add to bean filters.
+ */
+ public static final String BEAN_beanFilters_add = PREFIX + "beanFilters.lc/add";
+
+ /**
+ * Configuration property: Remove from bean filters.
+ */
+ public static final String BEAN_beanFilters_remove = PREFIX + "beanFilters.lc/remove";
/**
* Configuration property: {@link BeanMap#put(String,Object) BeanMap.put()} method will return old property
@@ -325,167 +412,173 @@ public class BeanContext extends Context {
public static final String BEAN_beanMapPutReturnsOldValue = PREFIX + "beanMapPutReturnsOldValue.b";
/**
- * Configuration property: Look for bean constructors with the specified minimum visibility.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"BeanContext.beanConstructorVisibility.s"</js>
- * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
- * <li><b>Default:</b> <js>"PUBLIC"</js>
- * <li><b>Session-overridable:</b> <jk>false</jk>
- * </ul>
- */
- public static final String BEAN_beanConstructorVisibility = PREFIX + "beanConstructorVisibility.s";
-
- /**
- * Configuration property: Look for bean classes with the specified minimum visibility.
+ * Configuration property: Beans require no-arg constructors.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beanClassVisibility.s"</js>
- * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
- * <li><b>Default:</b> <js>"PUBLIC"</js>
+ * <li><b>Name:</b> <js>"BeanContext.beansRequireDefaultConstructor.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Classes are not considered beans unless they meet the minimum visibility requirements.
- * For example, if the visibility is <code>PUBLIC</code> and the bean class is <jk>protected</jk>, then the class
- * will not be interpreted as a bean class.
+ * If <jk>true</jk>, a Java class must implement a default no-arg constructor to be considered a bean.
+ *
+ * <p>
+ * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
*/
- public static final String BEAN_beanClassVisibility = PREFIX + "beanClassVisibility.s";
+ public static final String BEAN_beansRequireDefaultConstructor = PREFIX + "beansRequireDefaultConstructor.b";
/**
- * Configuration property: Look for bean fields with the specified minimum visibility.
+ * Configuration property: Beans require {@link Serializable} interface.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beanFieldVisibility.s"</js>
- * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
- * <li><b>Default:</b> <js>"PUBLIC"</js>
+ * <li><b>Name:</b> <js>"BeanContext.beansRequireSerializable.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Fields are not considered bean properties unless they meet the minimum visibility requirements.
- * For example, if the visibility is <code>PUBLIC</code> and the bean field is <jk>protected</jk>, then the field
- * will not be interpreted as a bean property.
+ * If <jk>true</jk>, a Java class must implement the {@link Serializable} interface to be considered a bean.
*
* <p>
- * Use {@link Visibility#NONE} to prevent bean fields from being interpreted as bean properties altogether.
+ * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
*/
- public static final String BEAN_beanFieldVisibility = PREFIX + "beanFieldVisibility.s";
+ public static final String BEAN_beansRequireSerializable = PREFIX + "beansRequireSerializable.b";
/**
- * Configuration property: Look for bean methods with the specified minimum visibility.
+ * Configuration property: Beans require setters for getters.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.methodVisibility.s"</js>
- * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
- * <li><b>Default:</b> <js>"PUBLIC"</js>
+ * <li><b>Name:</b> <js>"BeanContext.beansRequireSettersForGetters.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Methods are not considered bean getters/setters unless they meet the minimum visibility requirements.
- * For example, if the visibility is <code>PUBLIC</code> and the bean method is <jk>protected</jk>, then the method
- * will not be interpreted as a bean getter or setter.
+ * If <jk>true</jk>, only getters that have equivalent setters will be considered as properties on a bean.
+ * Otherwise, they will be ignored.
*/
- public static final String BEAN_methodVisibility = PREFIX + "methodVisibility.s";
+ public static final String BEAN_beansRequireSettersForGetters = PREFIX + "beansRequireSettersForGetters.b";
/**
- * Configuration property: Use Java {@link Introspector} for determining bean properties.
+ * Configuration property: Beans require at least one property.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.useJavaBeanIntrospector.b"</js>
+ * <li><b>Name:</b> <js>"BeanContext.beansRequireSomeProperties.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Default:</b> <jk>true</jk>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Using the built-in Java bean introspector will not pick up fields or non-standard getters/setters.
- * Most {@link Bean @Bean} annotations will be ignored.
+ * If <jk>true</jk>, then a Java class must contain at least 1 property to be considered a bean.
+ *
+ * <p>
+ * The {@link Bean @Bean} annotation can be used on a class to override this setting when <jk>true</jk>.
*/
- public static final String BEAN_useJavaBeanIntrospector = PREFIX + "useJavaBeanIntrospector.b";
+ public static final String BEAN_beansRequireSomeProperties = PREFIX + "beansRequireSomeProperties.b";
/**
- * Configuration property: Use interface proxies.
+ * Configuration property: Name to use for the bean type properties used to represent a bean type.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.useInterfaceProxies.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>true</jk>
+ * <li><b>Name:</b> <js>"BeanContext.beanTypePropertyName.s"</js>
+ * <li><b>Data type:</b> <code>String</code>
+ * <li><b>Default:</b> <js>"_type"</js>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * If <jk>true</jk>, then interfaces will be instantiated as proxy classes through the use of an
- * {@link InvocationHandler} if there is no other way of instantiating them.
*/
- public static final String BEAN_useInterfaceProxies = PREFIX + "useInterfaceProxies.b";
+ public static final String BEAN_beanTypePropertyName = PREFIX + "beanTypePropertyName.s";
/**
- * Configuration property: Ignore unknown properties.
+ * Configuration property: Debug mode.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.ignoreUnknownBeanProperties.b"</js>
+ * <li><b>Name:</b> <js>"BeanContext.debug.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
* <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session-overridable:</b> <jk>false</jk>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, trying to set a value on a non-existent bean property will silently be ignored.
- * Otherwise, a {@code RuntimeException} is thrown.
+ * Enables the following additional information during serialization:
+ * <ul class='spaced-list'>
+ * <li>
+ * When bean getters throws exceptions, the exception includes the object stack information
+ * in order to determine how that method was invoked.
+ * <li>
+ * Enables {@link Serializer#SERIALIZER_detectRecursions}.
+ * </ul>
+ *
+ * <p>
+ * Enables the following additional information during parsing:
+ * <ul class='spaced-list'>
+ * <li>
+ * When bean setters throws exceptions, the exception includes the object stack information
+ * in order to determine how that method was invoked.
+ * </ul>
*/
- public static final String BEAN_ignoreUnknownBeanProperties = PREFIX + "ignoreUnknownBeanProperties.b";
+ public static final String BEAN_debug = PREFIX + "debug.b";
/**
- * Configuration property: Ignore unknown properties with null values.
+ * Configuration property: Default parser to use when converting <code>Strings</code> to POJOs.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.ignoreUnknownNullBeanProperties.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>true</jk>
+ * <li><b>Name:</b> <js>"BeanContext.defaultParser.c"</js>
+ * <li><b>Data type:</b> <code>Class</code>
+ * <li><b>Default:</b> {@link JsonSerializer}
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, trying to set a <jk>null</jk> value on a non-existent bean property will silently be ignored.
- * Otherwise, a {@code RuntimeException} is thrown.
+ * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
*/
- public static final String BEAN_ignoreUnknownNullBeanProperties = PREFIX + "ignoreUnknownNullBeanProperties.b";
+ public static final String BEAN_defaultParser = PREFIX + "defaultParser.c";
/**
- * Configuration property: Ignore properties without setters.
+ * Configuration property: Exclude specified properties from beans.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.ignorePropertiesWithoutSetters.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>true</jk>
+ * <li><b>Name:</b> <js>"BeanContext.excludeProperties.sms"</js>
+ * <li><b>Data type:</b> <code>Map<String,String></code>
+ * <li><b>Default:</b> <code>{}</code>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, trying to set a value on a bean property without a setter will silently be ignored.
- * Otherwise, a {@code RuntimeException} is thrown.
+ * Specifies to exclude the specified list of properties for the specified bean class.
+ *
+ * <p>
+ * The keys are either fully-qualified or simple class names, and the values are comma-delimited lists of property
+ * names.
+ * The key <js>"*"</js> means all bean classes.
+ *
+ * <p>
+ * For example, <code>{Bean1:<js>'foo,bar'</js>}</code> means don't serialize the <code>foo</code> and
+ * <code>bar</code> properties on the specified bean.
+ *
+ * <p>
+ * Setting applies to specified class and all subclasses.
*/
- public static final String BEAN_ignorePropertiesWithoutSetters = PREFIX + "ignorePropertiesWithoutSetters.b";
+ public static final String BEAN_excludeProperties = PREFIX + "excludeProperties.sms";
/**
* Configuration property: Ignore invocation errors on getters.
@@ -524,178 +617,58 @@ public class BeanContext extends Context {
public static final String BEAN_ignoreInvocationExceptionsOnSetters = PREFIX + "ignoreInvocationExceptionsOnSetters.b";
/**
- * Configuration property: Sort bean properties in alphabetical order.
+ * Configuration property: Ignore properties without setters.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.sortProperties.b"</js>
+ * <li><b>Name:</b> <js>"BeanContext.ignorePropertiesWithoutSetters.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session-overridable:</b> <jk>false</jk>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * When <jk>true</jk>, all bean properties will be serialized and access in alphabetical order.
- * Otherwise, the natural order of the bean properties is used which is dependent on the JVM vendor.
- * On IBM JVMs, the bean properties are ordered based on their ordering in the Java file.
- * On Oracle JVMs, the bean properties are not ordered (which follows the official JVM specs).
- *
- * <p>
- * This property is disabled by default so that IBM JVM users don't have to use {@link Bean @Bean} annotations
- * to force bean properties to be in a particular order and can just alter the order of the fields/methods
- * in the Java file.
- */
- public static final String BEAN_sortProperties = PREFIX + "sortProperties.b";
-
- /**
- * Configuration property: Packages whose classes should not be considered beans.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"BeanContext.notBeanPackages.ss"</js>
- * <li><b>Data type:</b> <code>Set<String></code>
- * <li><b>Default:</b>
- * <ul>
- * <li><code>java.lang</code>
- * <li><code>java.lang.annotation</code>
- * <li><code>java.lang.ref</code>
- * <li><code>java.lang.reflect</code>
- * <li><code>java.io</code>
- * <li><code>java.net</code>
- * <li><code>java.nio.*</code>
- * <li><code>java.util.*</code>
- * </ul>
- * <li><b>Session-overridable:</b> <jk>false</jk>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * When specified, the current list of ignore packages are appended to.
- *
- * <p>
- * Any classes within these packages will be serialized to strings using {@link Object#toString()}.
- *
- * <p>
- * Note that you can specify prefix patterns to include all subpackages.
- */
- public static final String BEAN_notBeanPackages = PREFIX + "notBeanPackages.ss";
-
- /**
- * Configuration property: Add to packages whose classes should not be considered beans.
- */
- public static final String BEAN_notBeanPackages_add = PREFIX + "notBeanPackages.ss/add";
-
- /**
- * Configuration property: Remove from packages whose classes should not be considered beans.
- */
- public static final String BEAN_notBeanPackages_remove = PREFIX + "notBeanPackages.ss/remove";
-
- /**
- * Configuration property: Classes to be excluded from consideration as being beans.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"BeanContext.notBeanClasses.sc"</js>
- * <li><b>Data type:</b> <code>Set<Class></code>
- * <li><b>Default:</b> empty set
+ * <li><b>Default:</b> <jk>true</jk>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Not-bean classes are typically converted to <code>Strings</code> during serialization even if they appear to be
- * bean-like.
- */
- public static final String BEAN_notBeanClasses = PREFIX + "notBeanClasses.sc";
-
- /**
- * Configuration property: Add to classes that should not be considered beans.
- */
- public static final String BEAN_notBeanClasses_add = PREFIX + "notBeanClasses.sc/add";
-
- /**
- * Configuration property: Remove from classes that should not be considered beans.
+ * If <jk>true</jk>, trying to set a value on a bean property without a setter will silently be ignored.
+ * Otherwise, a {@code RuntimeException} is thrown.
*/
- public static final String BEAN_notBeanClasses_remove = PREFIX + "notBeanClasses.sc/remove";
+ public static final String BEAN_ignorePropertiesWithoutSetters = PREFIX + "ignorePropertiesWithoutSetters.b";
/**
- * Configuration property: Bean filters to apply to beans.
+ * Configuration property: Ignore unknown properties.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beanFilters.lc"</js>
- * <li><b>Data type:</b> <code>List<Class></code>
- * <li><b>Default:</b> empty list
+ * <li><b>Name:</b> <js>"BeanContext.ignoreUnknownBeanProperties.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * This is a programmatic equivalent to the {@link Bean @Bean} annotation.
- * It's useful when you want to use the Bean annotation functionality, but you don't have the ability to alter the
- * bean classes.
- *
- * <p>
- * There are two category of classes that can be passed in through this method:
- * <ul class='spaced-list'>
- * <li>
- * Subclasses of {@link BeanFilterBuilder}.
- * These must have a public no-arg constructor.
- * <li>
- * Bean interface classes.
- * A shortcut for defining a {@link InterfaceBeanFilterBuilder}.
- * Any subclasses of an interface class will only have properties defined on the interface.
- * All other bean properties will be ignored.
- * </ul>
- */
- public static final String BEAN_beanFilters = PREFIX + "beanFilters.lc";
-
- /**
- * Configuration property: Add to bean filters.
- */
- public static final String BEAN_beanFilters_add = PREFIX + "beanFilters.lc/add";
-
- /**
- * Configuration property: Remove from bean filters.
+ * If <jk>true</jk>, trying to set a value on a non-existent bean property will silently be ignored.
+ * Otherwise, a {@code RuntimeException} is thrown.
*/
- public static final String BEAN_beanFilters_remove = PREFIX + "beanFilters.lc/remove";
+ public static final String BEAN_ignoreUnknownBeanProperties = PREFIX + "ignoreUnknownBeanProperties.b";
/**
- * Configuration property: POJO swaps to apply to Java objects.
+ * Configuration property: Ignore unknown properties with null values.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.pojoSwaps.lc"</js>
- * <li><b>Data type:</b> <code>List<Class></code>
- * <li><b>Default:</b> empty list
+ * <li><b>Name:</b> <js>"BeanContext.ignoreUnknownNullBeanProperties.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>true</jk>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
- * <p>
- * There are two category of classes that can be passed in through this method:
- * <ul>
- * <li>Subclasses of {@link PojoSwap}.
- * <li>Surrogate classes. A shortcut for defining a {@link SurrogateSwap}.
- * </ul>
- *
- * <p>
- * Multiple POJO swaps can be associated with a single class.
- * When multiple swaps are applicable to the same class, the media type pattern defined by
- * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes()} are used to come up with the best match.
- */
- public static final String BEAN_pojoSwaps = PREFIX + "pojoSwaps.lc";
-
- /**
- * Configuration property: Add to POJO swap classes.
- */
- public static final String BEAN_pojoSwaps_add = PREFIX + "pojoSwaps.lc/add";
-
- /**
- * Configuration property: Remove from POJO swap classes.
+ * <p>
+ * If <jk>true</jk>, trying to set a <jk>null</jk> value on a non-existent bean property will silently be ignored.
+ * Otherwise, a {@code RuntimeException} is thrown.
*/
- public static final String BEAN_pojoSwaps_remove = PREFIX + "pojoSwaps.lc/remove";
+ public static final String BEAN_ignoreUnknownNullBeanProperties = PREFIX + "ignoreUnknownNullBeanProperties.b";
/**
* Configuration property: Implementation classes for interfaces and abstract classes.
@@ -746,149 +719,189 @@ public class BeanContext extends Context {
public static final String BEAN_includeProperties = PREFIX + "includeProperties.sms";
/**
- * Configuration property: Exclude specified properties from beans.
+ * Configuration property: Locale.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.excludeProperties.sms"</js>
- * <li><b>Data type:</b> <code>Map<String,String></code>
- * <li><b>Default:</b> <code>{}</code>
- * <li><b>Session-overridable:</b> <jk>false</jk>
+ * <li><b>Name:</b> <js>"BeanContext.locale.s"</js>
+ * <li><b>Data type:</b> <code>String</code> ({@link Locale})
+ * <li><b>Default:</b> <jk>null</jk> (defaults to {@link Locale#getDefault()})
+ * <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Specifies to exclude the specified list of properties for the specified bean class.
- *
- * <p>
- * The keys are either fully-qualified or simple class names, and the values are comma-delimited lists of property
- * names.
- * The key <js>"*"</js> means all bean classes.
+ * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
+ */
+ public static final String BEAN_locale = PREFIX + "locale.s";
+
+ /**
+ * Configuration property: Media type.
*
- * <p>
- * For example, <code>{Bean1:<js>'foo,bar'</js>}</code> means don't serialize the <code>foo</code> and
- * <code>bar</code> properties on the specified bean.
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"BeanContext.mediaType.s"</js>
+ * <li><b>Data type:</b> <code>String</code> ({@link MediaType})
+ * <li><b>Default:</b> <jk>null</jk>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
*
+ * <h5 class='section'>Description:</h5>
* <p>
- * Setting applies to specified class and all subclasses.
+ * Specifies a default media type value for serializer and parser sessions.
*/
- public static final String BEAN_excludeProperties = PREFIX + "excludeProperties.sms";
+ public static final String BEAN_mediaType = PREFIX + "mediaType.s";
/**
- * Configuration property: Bean lookup dictionary.
+ * Configuration property: Look for bean methods with the specified minimum visibility.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beanDictionary.lc"</js>
- * <li><b>Data type:</b> <code>List<Class></code>
- * <li><b>Default:</b> empty list
+ * <li><b>Name:</b> <js>"BeanContext.methodVisibility.s"</js>
+ * <li><b>Data type:</b> <code>String</code> ({@link Visibility})
+ * <li><b>Default:</b> <js>"PUBLIC"</js>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
- *
+ *
* <h5 class='section'>Description:</h5>
* <p>
- * The list of classes that make up the bean dictionary in this bean context.
- *
- * <p>
- * A dictionary is a name/class mapping used to find class types during parsing when they cannot be inferred
- * through reflection.
- * <br>The names are defined through the {@link Bean#typeName()} annotation defined on the bean class.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode'>
- * BeanContext bc = BeanContext.<jsm>create</jsm>().beanDictionary(Bar.<jk>class</jk>, Baz.<jk>class</jk>).build();
- * </p>
+ * Methods are not considered bean getters/setters unless they meet the minimum visibility requirements.
+ * For example, if the visibility is <code>PUBLIC</code> and the bean method is <jk>protected</jk>, then the method
+ * will not be interpreted as a bean getter or setter.
+ */
+ public static final String BEAN_methodVisibility = PREFIX + "methodVisibility.s";
+
+ /**
+ * Configuration property: Classes to be excluded from consideration as being beans.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"BeanContext.notBeanClasses.sc"</js>
+ * <li><b>Data type:</b> <code>Set<Class></code>
+ * <li><b>Default:</b> empty set
+ * <li><b>Session-overridable:</b> <jk>false</jk>
+ * </ul>
*
+ * <h5 class='section'>Description:</h5>
* <p>
- * <h5 class='section'>Notes:</h5>
- * <ul class='spaced-list'>
- * <li>Properties:
- * <ul>
- * <li>{@link BeanContext#BEAN_beanDictionary}
- * <li>{@link BeanContext#BEAN_beanDictionary_add}
- * <li>{@link BeanContext#BEAN_beanDictionary_remove}
- * </ul>
- * <li>Annotations:
- * <ul>
- * <li>{@link Bean#beanDictionary()}
- * <li>{@link BeanProperty#beanDictionary()}
- * </ul>
- * <li>Methods:
- * <ul>
- * <li>{@link BeanContextBuilder#beanDictionary(Object...)}
- * <li>{@link BeanContextBuilder#beanDictionary(boolean,Object...)}
- * <li>{@link BeanContextBuilder#beanDictionaryRemove(Object...)}
- * </ul>
- * <li>Values can consist of any of the following types:
- * <ul>
- * <li>Any bean class that specifies a value for {@link Bean#typeName() @Bean.typeName()}.
- * <li>Any subclass of {@link BeanDictionaryList} containing a collection of bean classes with type name
- * annotations.
- * <li>Any subclass of {@link BeanDictionaryMap} containing a mapping of type names to classes without type name
- * annotations.
- * </ul>
- * <li>See <a class='doclink' href='../../../overview-summary.html#juneau-marshall.BeanDictionaries'>Bean Names and Dictionaries</a>
- * for more information.
- * </ul>
+ * Not-bean classes are typically converted to <code>Strings</code> during serialization even if they appear to be
+ * bean-like.
*/
- public static final String BEAN_beanDictionary = PREFIX + "beanDictionary.lc";
+ public static final String BEAN_notBeanClasses = PREFIX + "notBeanClasses.sc";
/**
- * Configuration property: Add to bean lookup dictionary.
+ * Configuration property: Add to classes that should not be considered beans.
*/
- public static final String BEAN_beanDictionary_add = PREFIX + "beanDictionary.lc/add";
+ public static final String BEAN_notBeanClasses_add = PREFIX + "notBeanClasses.sc/add";
/**
- * Configuration property: Remove from bean lookup dictionary.
+ * Configuration property: Remove from classes that should not be considered beans.
*/
- public static final String BEAN_beanDictionary_remove = PREFIX + "beanDictionary.lc/remove";
+ public static final String BEAN_notBeanClasses_remove = PREFIX + "notBeanClasses.sc/remove";
/**
- * Configuration property: Name to use for the bean type properties used to represent a bean type.
+ * Configuration property: Packages whose classes should not be considered beans.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.beanTypePropertyName.s"</js>
- * <li><b>Data type:</b> <code>String</code>
- * <li><b>Default:</b> <js>"_type"</js>
+ * <li><b>Name:</b> <js>"BeanContext.notBeanPackages.ss"</js>
+ * <li><b>Data type:</b> <code>Set<String></code>
+ * <li><b>Default:</b>
+ * <ul>
+ * <li><code>java.lang</code>
+ * <li><code>java.lang.annotation</code>
+ * <li><code>java.lang.ref</code>
+ * <li><code>java.lang.reflect</code>
+ * <li><code>java.io</code>
+ * <li><code>java.net</code>
+ * <li><code>java.nio.*</code>
+ * <li><code>java.util.*</code>
+ * </ul>
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * When specified, the current list of ignore packages are appended to.
+ *
+ * <p>
+ * Any classes within these packages will be serialized to strings using {@link Object#toString()}.
+ *
+ * <p>
+ * Note that you can specify prefix patterns to include all subpackages.
*/
- public static final String BEAN_beanTypePropertyName = PREFIX + "beanTypePropertyName.s";
+ public static final String BEAN_notBeanPackages = PREFIX + "notBeanPackages.ss";
/**
- * Configuration property: Default parser to use when converting <code>Strings</code> to POJOs.
+ * Configuration property: Add to packages whose classes should not be considered beans.
+ */
+ public static final String BEAN_notBeanPackages_add = PREFIX + "notBeanPackages.ss/add";
+
+ /**
+ * Configuration property: Remove from packages whose classes should not be considered beans.
+ */
+ public static final String BEAN_notBeanPackages_remove = PREFIX + "notBeanPackages.ss/remove";
+
+ /**
+ * Configuration property: POJO swaps to apply to Java objects.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.defaultParser.c"</js>
- * <li><b>Data type:</b> <code>Class</code>
- * <li><b>Default:</b> {@link JsonSerializer}
+ * <li><b>Name:</b> <js>"BeanContext.pojoSwaps.lc"</js>
+ * <li><b>Data type:</b> <code>List<Class></code>
+ * <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
+ * There are two category of classes that can be passed in through this method:
+ * <ul>
+ * <li>Subclasses of {@link PojoSwap}.
+ * <li>Surrogate classes. A shortcut for defining a {@link SurrogateSwap}.
+ * </ul>
+ *
+ * <p>
+ * Multiple POJO swaps can be associated with a single class.
+ * When multiple swaps are applicable to the same class, the media type pattern defined by
+ * {@link PojoSwap#forMediaTypes()} or {@link Swap#mediaTypes()} are used to come up with the best match.
*/
- public static final String BEAN_defaultParser = PREFIX + "defaultParser.c";
+ public static final String BEAN_pojoSwaps = PREFIX + "pojoSwaps.lc";
/**
- * Configuration property: Locale.
+ * Configuration property: Add to POJO swap classes.
+ */
+ public static final String BEAN_pojoSwaps_add = PREFIX + "pojoSwaps.lc/add";
+
+ /**
+ * Configuration property: Remove from POJO swap classes.
+ */
+ public static final String BEAN_pojoSwaps_remove = PREFIX + "pojoSwaps.lc/remove";
+
+ /**
+ * Configuration property: Sort bean properties in alphabetical order.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.locale.s"</js>
- * <li><b>Data type:</b> <code>String</code> ({@link Locale})
- * <li><b>Default:</b> <jk>null</jk> (defaults to {@link Locale#getDefault()})
- * <li><b>Session-overridable:</b> <jk>true</jk>
+ * <li><b>Name:</b> <js>"BeanContext.sortProperties.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Used in the in the {@link BeanSession#convertToType(Object, Class)} method.
+ * When <jk>true</jk>, all bean properties will be serialized and access in alphabetical order.
+ * Otherwise, the natural order of the bean properties is used which is dependent on the JVM vendor.
+ * On IBM JVMs, the bean properties are ordered based on their ordering in the Java file.
+ * On Oracle JVMs, the bean properties are not ordered (which follows the official JVM specs).
+ *
+ * <p>
+ * This property is disabled by default so that IBM JVM users don't have to use {@link Bean @Bean} annotations
+ * to force bean properties to be in a particular order and can just alter the order of the fields/methods
+ * in the Java file.
*/
- public static final String BEAN_locale = PREFIX + "locale.s";
+ public static final String BEAN_sortProperties = PREFIX + "sortProperties.b";
/**
* Configuration property: TimeZone.
@@ -908,53 +921,40 @@ public class BeanContext extends Context {
public static final String BEAN_timeZone = PREFIX + "timeZone.s";
/**
- * Configuration property: Media type.
+ * Configuration property: Use interface proxies.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.mediaType.s"</js>
- * <li><b>Data type:</b> <code>String</code> ({@link MediaType})
- * <li><b>Default:</b> <jk>null</jk>
- * <li><b>Session-overridable:</b> <jk>true</jk>
+ * <li><b>Name:</b> <js>"BeanContext.useInterfaceProxies.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>true</jk>
+ * <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Specifies a default media type value for serializer and parser sessions.
+ * If <jk>true</jk>, then interfaces will be instantiated as proxy classes through the use of an
+ * {@link InvocationHandler} if there is no other way of instantiating them.
*/
- public static final String BEAN_mediaType = PREFIX + "mediaType.s";
+ public static final String BEAN_useInterfaceProxies = PREFIX + "useInterfaceProxies.b";
/**
- * Configuration property: Debug mode.
+ * Configuration property: Use Java {@link Introspector} for determining bean properties.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"BeanContext.debug.b"</js>
+ * <li><b>Name:</b> <js>"BeanContext.useJavaBeanIntrospector.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
* <li><b>Default:</b> <jk>false</jk>
- * <li><b>Session-overridable:</b> <jk>true</jk>
+ * <li><b>Session-overridable:</b> <jk>false</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Enables the following additional information during serialization:
- * <ul class='spaced-list'>
- * <li>
- * When bean getters throws exceptions, the exception includes the object stack information
- * in order to determine how that method was invoked.
- * <li>
- * Enables {@link Serializer#SERIALIZER_detectRecursions}.
- * </ul>
- *
- * <p>
- * Enables the following additional information during parsing:
- * <ul class='spaced-list'>
- * <li>
- * When bean setters throws exceptions, the exception includes the object stack information
- * in order to determine how that method was invoked.
- * </ul>
+ * Using the built-in Java bean introspector will not pick up fields or non-standard getters/setters.
+ * Most {@link Bean @Bean} annotations will be ignored.
*/
- public static final String BEAN_debug = PREFIX + "debug.b";
+ public static final String BEAN_useJavaBeanIntrospector = PREFIX + "useJavaBeanIntrospector.b";
/*
* The default package pattern exclusion list.
http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index 1ad5c9a..abd6e06 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -77,11 +77,11 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
private static final String PREFIX = "HtmlDocSerializer.";
/**
- * Configuration property: Header section contents.
+ * Configuration property: Aside section contents.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.aside.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -89,28 +89,36 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Allows you to override the contents of the header section on the HTML page.
- * The header section normally contains the title and description at the top of the page.
+ * Allows you to specify the contents of the aside section on the HTML page.
+ * The aside section floats on the right of the page for providing content supporting the serialized content of
+ * the page.
+ *
+ * <p>
+ * By default, the aside section is empty.
*
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
* htmldoc=<ja>@HtmlDoc</ja>(
- * header={
- * <js>"<h1>My own header</h1>"</js>
+ * aside={
+ * <js>"<ul>"</js>,
+ * <js>" <li>Item 1"</js>,
+ * <js>" <li>Item 2"</js>,
+ * <js>" <li>Item 3"</js>,
+ * <js>"</ul>"</js>
* }
* )
* )
* </p>
*/
- public static final String HTMLDOC_header = PREFIX + "header.ls";
+ public static final String HTMLDOC_aside = PREFIX + "aside.ls";
/**
- * Configuration property: Page navigation links.
+ * Configuration property: Footer section contents.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.navlinks.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.footer.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -118,71 +126,69 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Adds a list of hyperlinks immediately under the title and description but above the content of the page.
+ * Allows you to specify the contents of the footer section on the HTML page.
*
* <p>
- * This can be used to provide convenient hyperlinks when viewing the REST interface from a browser.
+ * By default, the footer section is empty.
*
- * <p>
- * The value is an array of strings with two possible values:
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode'>
+ * <ja>@RestResource</ja>(
+ * htmldoc=<ja>@HtmlDoc</ja>(
+ * footer={
+ * <js>"<b>This interface is great!</b>"</js>
+ * }
+ * )
+ * )
+ * </p>
+ */
+ public static final String HTMLDOC_footer = PREFIX + "footer.ls";
+
+ /**
+ * Configuration property: Additional head section content.
+ *
+ * <h5 class='section'>Property:</h5>
* <ul>
- * <li>A key-value pair representing a hyperlink label and href:
- * <br><js>"google: http://google.com"</js>
- * <li>Arbitrary HTML.
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.head.ls"</js>
+ * <li><b>Data type:</b> <code>List<String></code>
+ * <li><b>Default:</b> empty list
+ * <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
*
+ * <h5 class='section'>Description:</h5>
* <p>
- * Relative URLs are considered relative to the servlet path.
- * For example, if the servlet path is <js>"http://localhost/myContext/myServlet"</js>, and the
- * URL is <js>"foo"</js>, the link becomes <js>"http://localhost/myContext/myServlet/foo"</js>.
- * Absolute (<js>"/myOtherContext/foo"</js>) and fully-qualified (<js>"http://localhost2/foo"</js>) URLs
- * can also be used in addition to various other protocols specified by {@link UriResolver} such as
- * <js>"servlet:/..."</js>.
+ * Adds the specified HTML content to the head section of the page.
*
* <h5 class='section'>Example:</h5>
- * <p>
- * The <code>AddressBookResource</code> sample class uses this property...
* <p class='bcode'>
* <ja>@RestResource</ja>(
* properties={
- * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_navlinks</jsf>,
- * value=<js>"['options: ?method=OPTIONS', 'doc: doc']"</js>)
+ * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_links</jsf>,
+ * value=<js>"['<link rel=\"icon\" href=\"htdocs/mypageicon.ico\">']"</js>)
* }
* )
- * <jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
* </p>
*
* <p>
- * ...to produce this list of links on the HTML page...
- * <img class='bordered' src='doc-files/HTML_LINKS.png'>
- *
- * <p>
* A shortcut on <ja>@RestResource</ja> is also provided for this setting:
* <p class='bcode'>
* <ja>@RestResource</ja>(
* htmldoc=@HtmlDoc(
- * navlinks={
- * <js>"options: ?method=OPTIONS"</js>,
- * <js>"doc: doc"</js>
+ * head={
+ * <js>"<link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'>"</js>
* }
* )
* )
- * <jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
* </p>
*/
- public static final String HTMLDOC_navlinks = PREFIX + "navlinks.ls";
-
- /**
- * Configuration property: Add to the {@link #HTMLDOC_navlinks} property.
- */
- public static final String HTMLDOC_navlinks_add = PREFIX + "navlinks.ls/add";
+ public static final String HTMLDOC_head = PREFIX + "head.ls";
/**
- * Configuration property: Nav section contents.
+ * Configuration property: Header section contents.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.nav.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -190,31 +196,28 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Allows you to override the contents of the nav section on the HTML page.
- * The nav section normally contains the page links at the top of the page.
+ * Allows you to override the contents of the header section on the HTML page.
+ * The header section normally contains the title and description at the top of the page.
*
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
* htmldoc=<ja>@HtmlDoc</ja>(
- * nav={
- * <js>"<p class='special-navigation'>This is my special navigation content</p>"</js>
+ * header={
+ * <js>"<h1>My own header</h1>"</js>
* }
* )
* )
* </p>
- *
- * <p>
- * When this property is specified, the {@link #HTMLDOC_navlinks} property is ignored.
*/
- public static final String HTMLDOC_nav = PREFIX + "nav.ls";
+ public static final String HTMLDOC_header = PREFIX + "header.ls";
/**
- * Configuration property: Aside section contents.
+ * Configuration property: Nav section contents.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.aside.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.nav.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -222,36 +225,31 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Allows you to specify the contents of the aside section on the HTML page.
- * The aside section floats on the right of the page for providing content supporting the serialized content of
- * the page.
- *
- * <p>
- * By default, the aside section is empty.
+ * Allows you to override the contents of the nav section on the HTML page.
+ * The nav section normally contains the page links at the top of the page.
*
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
* htmldoc=<ja>@HtmlDoc</ja>(
- * aside={
- * <js>"<ul>"</js>,
- * <js>" <li>Item 1"</js>,
- * <js>" <li>Item 2"</js>,
- * <js>" <li>Item 3"</js>,
- * <js>"</ul>"</js>
+ * nav={
+ * <js>"<p class='special-navigation'>This is my special navigation content</p>"</js>
* }
* )
* )
* </p>
+ *
+ * <p>
+ * When this property is specified, the {@link #HTMLDOC_navlinks} property is ignored.
*/
- public static final String HTMLDOC_aside = PREFIX + "aside.ls";
+ public static final String HTMLDOC_nav = PREFIX + "nav.ls";
/**
- * Configuration property: Footer section contents.
+ * Configuration property: Page navigation links.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.footer.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.navlinks.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -259,23 +257,64 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Allows you to specify the contents of the footer section on the HTML page.
+ * Adds a list of hyperlinks immediately under the title and description but above the content of the page.
*
* <p>
- * By default, the footer section is empty.
+ * This can be used to provide convenient hyperlinks when viewing the REST interface from a browser.
+ *
+ * <p>
+ * The value is an array of strings with two possible values:
+ * <ul>
+ * <li>A key-value pair representing a hyperlink label and href:
+ * <br><js>"google: http://google.com"</js>
+ * <li>Arbitrary HTML.
+ * </ul>
+ *
+ * <p>
+ * Relative URLs are considered relative to the servlet path.
+ * For example, if the servlet path is <js>"http://localhost/myContext/myServlet"</js>, and the
+ * URL is <js>"foo"</js>, the link becomes <js>"http://localhost/myContext/myServlet/foo"</js>.
+ * Absolute (<js>"/myOtherContext/foo"</js>) and fully-qualified (<js>"http://localhost2/foo"</js>) URLs
+ * can also be used in addition to various other protocols specified by {@link UriResolver} such as
+ * <js>"servlet:/..."</js>.
*
* <h5 class='section'>Example:</h5>
+ * <p>
+ * The <code>AddressBookResource</code> sample class uses this property...
* <p class='bcode'>
* <ja>@RestResource</ja>(
- * htmldoc=<ja>@HtmlDoc</ja>(
- * footer={
- * <js>"<b>This interface is great!</b>"</js>
+ * properties={
+ * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_navlinks</jsf>,
+ * value=<js>"['options: ?method=OPTIONS', 'doc: doc']"</js>)
+ * }
+ * )
+ * <jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
+ * </p>
+ *
+ * <p>
+ * ...to produce this list of links on the HTML page...
+ * <img class='bordered' src='doc-files/HTML_LINKS.png'>
+ *
+ * <p>
+ * A shortcut on <ja>@RestResource</ja> is also provided for this setting:
+ * <p class='bcode'>
+ * <ja>@RestResource</ja>(
+ * htmldoc=@HtmlDoc(
+ * navlinks={
+ * <js>"options: ?method=OPTIONS"</js>,
+ * <js>"doc: doc"</js>
* }
* )
* )
+ * <jk>public class</jk> AddressBookResource <jk>extends</jk> RestServletJenaDefault {
* </p>
*/
- public static final String HTMLDOC_footer = PREFIX + "footer.ls";
+ public static final String HTMLDOC_navlinks = PREFIX + "navlinks.ls";
+
+ /**
+ * Configuration property: Add to the {@link #HTMLDOC_navlinks} property.
+ */
+ public static final String HTMLDOC_navlinks_add = PREFIX + "navlinks.ls/add";
/**
* Configuration property: No-results message.
@@ -324,36 +363,11 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
public static final String HTMLDOC_nowrap = PREFIX + "nowrap.b";
/**
- * Configuration property: Stylesheet import URLs.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.stylesheet.ls"</js>
- * <li><b>Data type:</b> <code>List<String></code>
- * <li><b>Default:</b> empty list
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Adds a link to the specified stylesheet URL.
- *
- * <p>
- * Note that this stylesheet is controlled by the <code><ja>@RestResource</ja>.stylesheet()</code> annotation.
- */
- public static final String HTMLDOC_stylesheet = PREFIX + "stylesheet.ls";
-
- /**
- * Configuration property: Add to the {@link #HTMLDOC_stylesheet} property.
- */
- public static final String HTMLDOC_stylesheet_add = PREFIX + "stylesheet.ls/add";
-
- /**
- * Configuration property: CSS style code.
+ * Configuration property: Javascript code.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.style.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.script.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -361,14 +375,14 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Adds the specified CSS instructions to the HTML page.
+ * Adds the specified Javascript code to the HTML page.
*
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
* properties={
- * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_style</jsf>,
- * value=<js>"h3 { color: red; }\nh5 { font-weight: bold; }"</js>)
+ * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_script</jsf>,
+ * value=<js>"alert('hello!');"</js>)
* }
* )
* </p>
@@ -378,27 +392,26 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
* <p class='bcode'>
* <ja>@RestResource</ja>(
* htmldoc=@HtmlDoc(
- * style={
- * <js>"h3 { color: red; }"</js>,
- * <js>"h5 { font-weight: bold; }"</js>
+ * script={
+ * <js>"alert('hello!');"</js>
* }
* )
* )
* </p>
*/
- public static final String HTMLDOC_style = PREFIX + "style.ls";
+ public static final String HTMLDOC_script = PREFIX + "script.ls";
/**
- * Configuration property: Add to the {@link #HTMLDOC_style} property.
+ * Configuration property: Add to the {@link #HTMLDOC_script} property.
*/
- public static final String HTMLDOC_style_add = PREFIX + "style.ls/add";
+ public static final String HTMLDOC_script_add = PREFIX + "script.ls/add";
/**
- * Configuration property: Javascript code.
+ * Configuration property: CSS style code.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.script.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.style.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -406,14 +419,14 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Adds the specified Javascript code to the HTML page.
+ * Adds the specified CSS instructions to the HTML page.
*
* <h5 class='section'>Example:</h5>
* <p class='bcode'>
* <ja>@RestResource</ja>(
* properties={
- * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_script</jsf>,
- * value=<js>"alert('hello!');"</js>)
+ * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_style</jsf>,
+ * value=<js>"h3 { color: red; }\nh5 { font-weight: bold; }"</js>)
* }
* )
* </p>
@@ -423,26 +436,27 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
* <p class='bcode'>
* <ja>@RestResource</ja>(
* htmldoc=@HtmlDoc(
- * script={
- * <js>"alert('hello!');"</js>
+ * style={
+ * <js>"h3 { color: red; }"</js>,
+ * <js>"h5 { font-weight: bold; }"</js>
* }
* )
* )
* </p>
*/
- public static final String HTMLDOC_script = PREFIX + "script.ls";
+ public static final String HTMLDOC_style = PREFIX + "style.ls";
/**
- * Configuration property: Add to the {@link #HTMLDOC_script} property.
+ * Configuration property: Add to the {@link #HTMLDOC_style} property.
*/
- public static final String HTMLDOC_script_add = PREFIX + "script.ls/add";
+ public static final String HTMLDOC_style_add = PREFIX + "style.ls/add";
/**
- * Configuration property: Additional head section content.
+ * Configuration property: Stylesheet import URLs.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlDocSerializer.head.ls"</js>
+ * <li><b>Name:</b> <js>"HtmlDocSerializer.stylesheet.ls"</js>
* <li><b>Data type:</b> <code>List<String></code>
* <li><b>Default:</b> empty list
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -450,36 +464,17 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * Adds the specified HTML content to the head section of the page.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode'>
- * <ja>@RestResource</ja>(
- * properties={
- * <ja>@Property</ja>(name=HtmlDocSerializer.<jsf>HTMLDOC_links</jsf>,
- * value=<js>"['<link rel=\"icon\" href=\"htdocs/mypageicon.ico\">']"</js>)
- * }
- * )
- * </p>
+ * Adds a link to the specified stylesheet URL.
*
* <p>
- * A shortcut on <ja>@RestResource</ja> is also provided for this setting:
- * <p class='bcode'>
- * <ja>@RestResource</ja>(
- * htmldoc=@HtmlDoc(
- * head={
- * <js>"<link rel='icon' href='$U{servlet:/htdocs/mypageicon.ico}'>"</js>
- * }
- * )
- * )
- * </p>
+ * Note that this stylesheet is controlled by the <code><ja>@RestResource</ja>.stylesheet()</code> annotation.
*/
- public static final String HTMLDOC_head = PREFIX + "head.ls";
+ public static final String HTMLDOC_stylesheet = PREFIX + "stylesheet.ls";
/**
- * Configuration property: Add to the {@link #HTMLDOC_head} property.
+ * Configuration property: Add to the {@link #HTMLDOC_stylesheet} property.
*/
- public static final String HTMLDOC_links_add = PREFIX + "head.ls./add";
+ public static final String HTMLDOC_stylesheet_add = PREFIX + "stylesheet.ls/add";
/**
* Configuration property: HTML document template.
http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
index 52e94ed..73b5a62 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
@@ -131,50 +131,49 @@ public class HtmlSerializer extends XmlSerializer {
private static final String PREFIX = "HtmlSerializer.";
/**
- * Configuration property: Anchor text source.
+ * Configuration property: Add <js>"_type"</js> properties when needed.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlSerializer.uriAnchorText.s"</js>
- * <li><b>Data type:</b> <code>String</code> ({@link AnchorText})
- * <li><b>Default:</b> <js>"TO_STRING"</js>
+ * <li><b>Name:</b> <js>"HtmlSerializer.addBeanTypeProperties.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * When creating anchor tags (e.g. <code><xt><a</xt> <xa>href</xa>=<xs>'...'</xs>
- * <xt>></xt>text<xt></a></xt></code>) in HTML, this setting defines what to set the inner text to.
+ * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
+ * through reflection.
+ * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
+ * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined
+ * from the value type.
*
* <p>
- * See the {@link AnchorText} enum for possible values.
+ * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
+ * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
*/
- public static final String HTML_uriAnchorText = PREFIX + "uriAnchorText.s";
+ public static final String HTML_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
/**
- * Configuration property: Look for URLs in {@link String Strings}.
+ * Configuration property: Add key/value headers on bean/map tables.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlSerializer.detectLinksInStrings.b"</js>
+ * <li><b>Name:</b> <js>"HtmlSerializer.addKeyValueTableHeaders.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>true</jk>
+ * <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * If a string looks like a URL (e.g. starts with <js>"http://"</js> or <js>"https://"</js>, then treat it like a URL
- * and make it into a hyperlink based on the rules specified by {@link #HTML_uriAnchorText}.
*/
- public static final String HTML_detectLinksInStrings = PREFIX + "detectLinksInStrings.b";
+ public static final String HTML_addKeyValueTableHeaders = PREFIX + "addKeyValueTableHeaders.b";
/**
- * Configuration property: Look for link labels in the <js>"label"</js> parameter of the URL.
+ * Configuration property: Look for URLs in {@link String Strings}.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlSerializer.lookForLabelParameters.b"</js>
+ * <li><b>Name:</b> <js>"HtmlSerializer.detectLinksInStrings.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
* <li><b>Default:</b> <jk>true</jk>
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -182,12 +181,10 @@ public class HtmlSerializer extends XmlSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * If the URL has a label parameter (e.g. <js>"?label=foobar"</js>), then use that as the anchor text of the link.
- *
- * <p>
- * The parameter name can be changed via the {@link #HTML_labelParameter} property.
+ * If a string looks like a URL (e.g. starts with <js>"http://"</js> or <js>"https://"</js>, then treat it like a URL
+ * and make it into a hyperlink based on the rules specified by {@link #HTML_uriAnchorText}.
*/
- public static final String HTML_lookForLabelParameters = PREFIX + "lookForLabelParameters.b";
+ public static final String HTML_detectLinksInStrings = PREFIX + "detectLinksInStrings.b";
/**
* Configuration property: The parameter name to use when using {@link #HTML_lookForLabelParameters}.
@@ -203,42 +200,45 @@ public class HtmlSerializer extends XmlSerializer {
public static final String HTML_labelParameter = PREFIX + "labelParameter.s";
/**
- * Configuration property: Add key/value headers on bean/map tables.
+ * Configuration property: Look for link labels in the <js>"label"</js> parameter of the URL.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlSerializer.addKeyValueTableHeaders.b"</js>
+ * <li><b>Name:</b> <js>"HtmlSerializer.lookForLabelParameters.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Default:</b> <jk>true</jk>
* <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * If the URL has a label parameter (e.g. <js>"?label=foobar"</js>), then use that as the anchor text of the link.
+ *
+ * <p>
+ * The parameter name can be changed via the {@link #HTML_labelParameter} property.
*/
- public static final String HTML_addKeyValueTableHeaders = PREFIX + "addKeyValueTableHeaders.b";
+ public static final String HTML_lookForLabelParameters = PREFIX + "lookForLabelParameters.b";
/**
- * Configuration property: Add <js>"_type"</js> properties when needed.
+ * Configuration property: Anchor text source.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"HtmlSerializer.addBeanTypeProperties.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Name:</b> <js>"HtmlSerializer.uriAnchorText.s"</js>
+ * <li><b>Data type:</b> <code>String</code> ({@link AnchorText})
+ * <li><b>Default:</b> <js>"TO_STRING"</js>
* <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
- * through reflection.
- * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
- * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined
- * from the value type.
+ * When creating anchor tags (e.g. <code><xt><a</xt> <xa>href</xa>=<xs>'...'</xs>
+ * <xt>></xt>text<xt></a></xt></code>) in HTML, this setting defines what to set the inner text to.
*
* <p>
- * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
- * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
+ * See the {@link AnchorText} enum for possible values.
*/
- public static final String HTML_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
+ public static final String HTML_uriAnchorText = PREFIX + "uriAnchorText.s";
//-------------------------------------------------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
index 60f8ac5..fb52a0e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -95,11 +95,11 @@ public class JsonSerializer extends WriterSerializer {
private static final String PREFIX = "JsonSerializer.";
/**
- * Configuration property: Simple JSON mode.
+ * Configuration property: Add <js>"_type"</js> properties when needed.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"JsonSerializer.simpleMode.b"</js>
+ * <li><b>Name:</b> <js>"JsonSerializer.addBeanTypeProperties.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
* <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -107,10 +107,17 @@ public class JsonSerializer extends WriterSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, JSON attribute names will only be quoted when necessary.
- * Otherwise, they are always quoted.
+ * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
+ * through reflection.
+ * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
+ * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined from
+ * the value type.
+ *
+ * <p>
+ * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
+ * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
*/
- public static final String JSON_simpleMode = PREFIX + "simpleMode.b";
+ public static final String JSON_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
/**
* Configuration property: Prefix solidus <js>'/'</js> characters with escapes.
@@ -133,11 +140,11 @@ public class JsonSerializer extends WriterSerializer {
public static final String JSON_escapeSolidus = PREFIX + "escapeSolidus.b";
/**
- * Configuration property: Add <js>"_type"</js> properties when needed.
+ * Configuration property: Simple JSON mode.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"JsonSerializer.addBeanTypeProperties.b"</js>
+ * <li><b>Name:</b> <js>"JsonSerializer.simpleMode.b"</js>
* <li><b>Data type:</b> <code>Boolean</code>
* <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>true</jk>
@@ -145,17 +152,10 @@ public class JsonSerializer extends WriterSerializer {
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
- * through reflection.
- * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
- * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined from
- * the value type.
- *
- * <p>
- * When present, this value overrides the {@link #SERIALIZER_addBeanTypeProperties} setting and is
- * provided to customize the behavior of specific serializers in a {@link SerializerGroup}.
+ * If <jk>true</jk>, JSON attribute names will only be quoted when necessary.
+ * Otherwise, they are always quoted.
*/
- public static final String JSON_addBeanTypeProperties = PREFIX + "addBeanTypeProperties.b";
+ public static final String JSON_simpleMode = PREFIX + "simpleMode.b";
//-------------------------------------------------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/juneau/blob/4eaa0728/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
index 1447814..2d2a2f1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
@@ -140,22 +140,64 @@ public abstract class Parser extends BeanContext {
private static final String PREFIX = "Parser.";
/**
- * Configuration property: Trim parsed strings.
+ * Configuration property: File charset.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"Parser.trimStrings.b"</js>
- * <li><b>Data type:</b> <code>Boolean</code>
- * <li><b>Default:</b> <jk>false</jk>
+ * <li><b>Name:</b> <js>"Parser.fileCharset.s"</js>
+ * <li><b>Data type:</b> <code>String</code>
+ * <li><b>Default:</b> <js>"default"</js>
* <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to
- * the POJO.
+ * The character set to use for reading <code>Files</code> from the file system.
+ *
+ * <p>
+ * Used when passing in files to {@link Parser#parse(Object, Class)}.
+ *
+ * <p>
+ * <js>"default"</js> can be used to indicate the JVM default file system charset.
*/
- public static final String PARSER_trimStrings = PREFIX + "trimStrings.b";
+ public static final String PARSER_fileCharset = PREFIX + "fileCharset.s";
+
+ /**
+ * Configuration property: Input stream charset.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"Parser.inputStreamCharset.s"</js>
+ * <li><b>Data type:</b> <code>String</code>
+ * <li><b>Default:</b> <js>"UTF-8"</js>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * The character set to use for converting <code>InputStreams</code> and byte arrays to readers.
+ *
+ * <p>
+ * Used when passing in input streams and byte arrays to {@link Parser#parse(Object, Class)}.
+ */
+ public static final String PARSER_inputStreamCharset = PREFIX + "inputStreamCharset.s";
+
+ /**
+ * Configuration property: Parser listener.
+ *
+ * <h5 class='section'>Property:</h5>
+ * <ul>
+ * <li><b>Name:</b> <js>"Parser.listener.c"</js>
+ * <li><b>Data type:</b> <code>Class<? extends ParserListener></code>
+ * <li><b>Default:</b> <jk>null</jk>
+ * <li><b>Session-overridable:</b> <jk>true</jk>
+ * </ul>
+ *
+ * <h5 class='section'>Description:</h5>
+ * <p>
+ * Class used to listen for errors and warnings that occur during parsing.
+ */
+ public static final String PARSER_listener = PREFIX + "listener.c";
/**
* Configuration property: Strict mode.
@@ -203,64 +245,22 @@ public abstract class Parser extends BeanContext {
public static final String PARSER_strict = PREFIX + "strict.b";
/**
- * Configuration property: Input stream charset.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"Parser.inputStreamCharset.s"</js>
- * <li><b>Data type:</b> <code>String</code>
- * <li><b>Default:</b> <js>"UTF-8"</js>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The character set to use for converting <code>InputStreams</code> and byte arrays to readers.
- *
- * <p>
- * Used when passing in input streams and byte arrays to {@link Parser#parse(Object, Class)}.
- */
- public static final String PARSER_inputStreamCharset = PREFIX + "inputStreamCharset.s";
-
- /**
- * Configuration property: File charset.
- *
- * <h5 class='section'>Property:</h5>
- * <ul>
- * <li><b>Name:</b> <js>"Parser.fileCharset.s"</js>
- * <li><b>Data type:</b> <code>String</code>
- * <li><b>Default:</b> <js>"default"</js>
- * <li><b>Session-overridable:</b> <jk>true</jk>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The character set to use for reading <code>Files</code> from the file system.
- *
- * <p>
- * Used when passing in files to {@link Parser#parse(Object, Class)}.
- *
- * <p>
- * <js>"default"</js> can be used to indicate the JVM default file system charset.
- */
- public static final String PARSER_fileCharset = PREFIX + "fileCharset.s";
-
- /**
- * Configuration property: Parser listener.
+ * Configuration property: Trim parsed strings.
*
* <h5 class='section'>Property:</h5>
* <ul>
- * <li><b>Name:</b> <js>"Parser.listener.c"</js>
- * <li><b>Data type:</b> <code>Class<? extends ParserListener></code>
- * <li><b>Default:</b> <jk>null</jk>
+ * <li><b>Name:</b> <js>"Parser.trimStrings.b"</js>
+ * <li><b>Data type:</b> <code>Boolean</code>
+ * <li><b>Default:</b> <jk>false</jk>
* <li><b>Session-overridable:</b> <jk>true</jk>
* </ul>
*
* <h5 class='section'>Description:</h5>
* <p>
- * Class used to listen for errors and warnings that occur during parsing.
+ * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to
+ * the POJO.
*/
- public static final String PARSER_listener = PREFIX + "listener.c";
+ public static final String PARSER_trimStrings = PREFIX + "trimStrings.b";
static Parser DEFAULT = new Parser(PropertyStore.create().build()) {
@Override