Class SerializerSession
- Direct Known Subclasses:
OutputStreamSerializerSession
,WriterSerializerSession
Serializer
.
Used by serializers for the following purposes:
- Keeping track of how deep it is in a model for indentation purposes.
- Ensuring infinite loops don't occur by setting a limit on how deep to traverse a model.
- Ensuring infinite loops don't occur from loops in the model (when detectRecursions is enabled.
- Allowing serializer properties to be overridden on method calls.
Notes:
- This class is not thread safe and is typically discarded after one use.
See Also:
-
Nested Class Summary
-
Field Summary
Fields inherited from class org.apache.juneau.BeanTraverseSession
indent
-
Constructor Summary
ModifierConstructorDescriptionprotected
Constructor. -
Method Summary
Modifier and TypeMethodDescriptionaddVarBean
(Class<T> c, T value) Adds a session object to theVarResolverSession
in this session.final boolean
canIgnoreValue
(ClassMeta<?> cm, String attrName, Object value) Returnstrue if the specified value should not be serialized.static SerializerSession.Builder
create
(Serializer ctx) Creates a new builder for this object.protected static final BeanPropertyValue
createBeanTypeNameProperty
(BeanMap<?> m, String typeName) Create a "_type" property that contains the dictionary name of the bean.protected VarResolverSession
Adds a session object to theVarResolverSession
in this session.protected SerializerPipe
createPipe
(Object output) Wraps the specified input object into aParserPipe
object so that it can be easily converted into a stream or reader.protected void
doSerialize
(SerializerPipe pipe, Object o) Serializes a POJO to the specified pipe.final <E> void
forEachEntry
(Collection<E> c, Consumer<E> consumer) Consumes each entry in the list.final <K,
V> void forEachEntry
(Map<K, V> m, Consumer<Map.Entry<K, V>> consumer) Consumes each map entry in the map.protected final Object
generalize
(Object o, ClassMeta<?> type) Generalize the specified object if a POJO swap is associated with it.protected final String
getBeanTypeName
(SerializerSession session, ClassMeta<?> eType, ClassMeta<?> aType, BeanPropertyMeta pMeta) Resolves the dictionary name for the actual type.protected final ClassMeta<?>
Returns the parser-side expected type for the object.protected final Method
Returns the Java method that invoked this serializer.Returns the listener associated with this session.<T extends SerializerListener>
TgetListener
(Class<T> c) Returns the listener associated with this session.Optional method that specifies HTTP request headers for this serializer.final HttpPartSchema
HTTP part schema of object being serialized.protected final UriContext
URI context bean.protected final UriRelativity
URI relativity.protected final UriResolution
URI resolution.protected final UriResolver
Returns the URI resolver.Returns the variable resolver session.protected static <T extends Throwable>
voidhandleThrown
(T causedBy) Converts the specified throwable to either aRuntimeException
orSerializeException
.protected boolean
Add"_type" properties when needed.protected final boolean
Add type attribute to root nodes.protected final boolean
Don't trim null bean property values.protected final boolean
Sort arrays and collections alphabetically.protected final boolean
Sort maps alphabetically.protected final boolean
Trim empty lists and arrays.protected final boolean
Trim empty maps.protected boolean
Trim strings.boolean
Returnstrue if this serializer subclasses fromWriterSerializer
.protected final void
Specialized warning when an exception is thrown while executing a bean getter.protected void
Logs a warning message.protected JsonMap
Returns the properties on this bean as a map for debugging.protected final ClassMeta<?>
Same asBeanTraverseSession.push(String, Object, ClassMeta)
but wrapsBeanRecursionException
insideSerializeException
.protected final String
relativizeUri
(Object relativeTo, Object uri) Opposite ofresolveUri(Object)
.Resolves any variables in the specified string.final String
resolveUri
(Object uri) Converts a String to an absolute URI based on theUriContext
on this session.Shortcut method for serializing objects directly to either aString or
depending on the serializer type.byte []final void
Serialize the specified object using the specified session.Shortcut method for serializing an object to a String.final <E> Collection<E>
sort
(Collection<E> c) Sorts the specified collection ifisSortCollections()
returnstrue .final <E> List<E>
Sorts the specified collection ifisSortCollections()
returnstrue .final <K,
V> Map<K, V> Sorts the specified map ifisSortMaps()
returnstrue .protected Object
swap
(ObjectSwap swap, Object o) Invokes the specified swap on the specified object if the swap is not null.Converts the contents of the specified object array to a list.final String
Converts the specified object to aString .final String
Trims the specified string ifisTrimStrings()
returnstrue .Methods inherited from class org.apache.juneau.BeanTraverseSession
getInitialDepth, getLastLocation, getMaxDepth, getOptionalType, getOptionalValue, getStack, isDetectRecursions, isIgnoreRecursions, isOptional, isRoot, pop, push, setCurrentClass, setCurrentProperty, willExceedDepth, willRecurse
Methods inherited from class org.apache.juneau.BeanSession
_class, addWarning, convertToMemberType, convertToMemberType, convertToType, convertToType, convertToType, create, getArgsClassMeta, getBeanClassVisibility, getBeanConstructorVisibility, getBeanDictionary, getBeanFieldVisibility, getBeanMeta, getBeanMethodVisibility, getBeanRegistry, getBeanTypePropertyName, getBeanTypePropertyName, getClassMeta, getClassMeta, getClassMetaForObject, getClassMetaForObject, getLocale, getMediaType, getNamePropertyName, getNotBeanClasses, getNotBeanPackagesNames, getNotBeanPackagesPrefixes, getPropertyNamer, getSwaps, getTimeZone, getTimeZoneId, isBean, isBean, isBeanMapPutReturnsOldValue, isBeansRequireDefaultConstructor, isBeansRequireSerializable, isBeansRequireSettersForGetters, isBeansRequireSomeProperties, isFindFluentSetters, isIgnoreInvocationExceptionsOnGetters, isIgnoreInvocationExceptionsOnSetters, isIgnoreMissingSetters, isIgnoreUnknownBeanProperties, isIgnoreUnknownNullBeanProperties, isSortProperties, isUseEnumNames, isUseInterfaceProxies, isUseJavaBeanIntrospector, newBean, newBean, newBeanMap, newBeanMap, newGenericMap, object, string, toArray, toBeanMap, toBeanMap, toBeanMap
Methods inherited from class org.apache.juneau.ContextSession
checkForWarnings, getContext, getSessionProperties, getWarnings, isDebug, toString
-
Constructor Details
-
SerializerSession
Constructor.- Parameters:
builder
- The builder for this object.
-
-
Method Details
-
create
Creates a new builder for this object.- Parameters:
ctx
- The context creating this session.- Returns:
- A new builder.
-
addVarBean
Adds a session object to theVarResolverSession
in this session.- Type Parameters:
T
- The bean type.- Parameters:
c
- The bean type being added.value
- The bean being added.- Returns:
- This object.
-
createDefaultVarResolverSession
Adds a session object to theVarResolverSession
in this session.- Returns:
- This object.
-
getVarResolver
Returns the variable resolver session.- Returns:
- The variable resolver session.
-
getSchema
HTTP part schema of object being serialized.- Returns:
- HTTP part schema of object being serialized, or
null if not specified.
-
doSerialize
Serializes a POJO to the specified pipe.This method should NOT close the context object.
The default implementation of this method simply calls
Serializer.doSerialize(SerializerSession,SerializerPipe,Object)
.- Parameters:
pipe
- Where to send the output from the serializer.o
- The object to serialize.- Throws:
IOException
- Thrown by underlying stream.SerializeException
- Problem occurred trying to serialize object.
-
serialize
Shortcut method for serializing objects directly to either aString or
depending on the serializer type.byte []- Parameters:
o
- The object to serialize.- Returns:
- The serialized object.
Character-based serializers will return aString .
Stream-based serializers will return a
.byte [] - Throws:
SerializeException
- If a problem occurred trying to convert the output.
-
serializeToString
Shortcut method for serializing an object to a String.- Parameters:
o
- The object to serialize.- Returns:
- The serialized object.
Character-based serializers will return aString
Stream-based serializers will return a
converted to a string based on thebyte []OutputStreamSerializer.Builder.binaryFormat(BinaryFormat)
setting. - Throws:
SerializeException
- If a problem occurred trying to convert the output.
-
isWriterSerializer
Returnstrue if this serializer subclasses fromWriterSerializer
.- Returns:
true if this serializer subclasses fromWriterSerializer
.
-
createPipe
Wraps the specified input object into aParserPipe
object so that it can be easily converted into a stream or reader.- Parameters:
output
- The output location.
For character-based serializers, this can be any of the following types:Writer
OutputStream
- Output will be written as UTF-8 encoded stream.File
- Output will be written as system-default encoded stream.StringBuilder
For byte-based serializers, this can be any of the following types:- Returns:
- A new
ParserPipe
wrapper around the specified input object.
-
serialize
Serialize the specified object using the specified session.- Parameters:
out
- Where to send the output from the serializer.o
- The object to serialize.- Throws:
SerializeException
- If a problem occurred trying to convert the output.IOException
- Thrown by the underlying stream.
-
getJavaMethod
Returns the Java method that invoked this serializer.When using the REST API, this is the Java method invoked by the REST call. Can be used to access annotations defined on the method or class.
- Returns:
- The Java method that invoked this serializer.
-
getUriResolver
Returns the URI resolver.- Returns:
- The URI resolver.
-
onBeanGetterException
protected final void onBeanGetterException(BeanPropertyMeta p, Throwable t) throws SerializeException Specialized warning when an exception is thrown while executing a bean getter.- Parameters:
p
- The bean map entry representing the bean property.t
- The throwable that the bean getter threw.- Throws:
SerializeException
- Thrown if ignoreInvocationExceptionOnGetters is false.
-
onError
Logs a warning message.- Overrides:
onError
in classBeanTraverseSession
- Parameters:
t
- The throwable that was thrown (if there was one).msg
- The warning message.args
- OptionalMessageFormat
-style arguments.
-
trim
Trims the specified string ifisTrimStrings()
returnstrue .- Parameters:
o
- The input string to trim.- Returns:
- The trimmed string, or
null if the input wasnull .
-
generalize
Generalize the specified object if a POJO swap is associated with it.- Parameters:
o
- The object to generalize.type
- The type of object.- Returns:
- The generalized object, or
null if the object isnull . - Throws:
SerializeException
- If a problem occurred trying to convert the output.
-
canIgnoreValue
public final boolean canIgnoreValue(ClassMeta<?> cm, String attrName, Object value) throws SerializeException Returnstrue if the specified value should not be serialized.- Parameters:
cm
- The class type of the object being serialized.attrName
- The bean attribute name, ornull if this isn't a bean attribute.value
- The object being serialized.- Returns:
true if the specified value should not be serialized.- Throws:
SerializeException
- If recursion occurred.
-
sort
Sorts the specified map ifisSortMaps()
returnstrue .- Type Parameters:
K
- The key type.V
- The value type.- Parameters:
m
- The map being sorted.- Returns:
- A new sorted
TreeMap
.
-
forEachEntry
Consumes each map entry in the map.- Type Parameters:
K
- The key type.V
- The value type.- Parameters:
m
- The map being consumed.consumer
- The map entry consumer.
-
sort
Sorts the specified collection ifisSortCollections()
returnstrue .- Type Parameters:
E
- The element type.- Parameters:
c
- The collection being sorted.- Returns:
- A new sorted
TreeSet
.
-
forEachEntry
Consumes each entry in the list.- Type Parameters:
E
- The element type.- Parameters:
c
- The collection being sorted.consumer
- The entry consumer.
-
sort
Sorts the specified collection ifisSortCollections()
returnstrue .- Type Parameters:
E
- The element type.- Parameters:
c
- The collection being sorted.- Returns:
- A new sorted
TreeSet
.
-
toList
Converts the contents of the specified object array to a list.Works on both object and primitive arrays.
In the case of multi-dimensional arrays, the outgoing list will contain elements of type n-1 dimension. i.e. if
type
is
thenint [][]list
will have entries of type
.int []- Parameters:
type
- The type of array.array
- The array being converted.- Returns:
- The array as a list.
-
resolveUri
Converts a String to an absolute URI based on theUriContext
on this session.- Parameters:
uri
- The input URI. Can be any of the following: URI can be any of the following forms:"foo://foo" - Absolute URI."/foo" - Root-relative URI."/" - Root URI."context:/foo" - Context-root-relative URI."context:/" - Context-root URI."servlet:/foo" - Servlet-path-relative URI."servlet:/" - Servlet-path URI."request:/foo" - Request-path-relative URI."request:/" - Request-path URI."foo" - Path-info-relative URI."" - Path-info URI.
- Returns:
- The resolved URI.
-
relativizeUri
Opposite ofresolveUri(Object)
.Converts the URI to a value relative to the specified
relativeTo parameter.Both parameters can be any of the following:
Both URIs can be any of the following forms:
"foo://foo" - Absolute URI."/foo" - Root-relative URI."/" - Root URI."context:/foo" - Context-root-relative URI."context:/" - Context-root URI."servlet:/foo" - Servlet-path-relative URI."servlet:/" - Servlet-path URI."request:/foo" - Request-path-relative URI."request:/" - Request-path URI."foo" - Path-info-relative URI."" - Path-info URI.
- Parameters:
relativeTo
- The URI to relativize against.uri
- The URI to relativize.- Returns:
- The relativized URI.
-
toString
Converts the specified object to aString .Also has the following effects:
Class object is converted to a readable name. SeeClassInfo.getFullName()
.- Whitespace is trimmed if the trim-strings setting is enabled.
- Parameters:
o
- The object to convert to aString .- Returns:
- The object converted to a String, or
null if the input wasnull .
-
createBeanTypeNameProperty
Create a "_type" property that contains the dictionary name of the bean.- Parameters:
m
- The bean map to create a class property on.typeName
- The type name of the bean.- Returns:
- A new bean property value.
-
getBeanTypeName
protected final String getBeanTypeName(SerializerSession session, ClassMeta<?> eType, ClassMeta<?> aType, BeanPropertyMeta pMeta) Resolves the dictionary name for the actual type.- Parameters:
session
- The current serializer session.eType
- The expected type of the bean property.aType
- The actual type of the bean property.pMeta
- The current bean property being serialized.- Returns:
- The bean dictionary name, or
null if a name could not be found.
-
getExpectedRootType
Returns the parser-side expected type for the object.The return value depends on the
Serializer.Builder.addRootType()
setting. When disabled, the parser already knows the Java POJO type being parsed, so there is no reason to add"_type" attributes to the root-level object.- Parameters:
o
- The object to get the expected type on.- Returns:
- The expected type.
-
getResponseHeaders
Optional method that specifies HTTP request headers for this serializer.For example,
SoapXmlSerializer
needs to set aSOAPAction header.This method is typically meaningless if the serializer is being used stand-alone (i.e. outside of a REST server or client).
The default implementation of this method simply calls
Serializer.getResponseHeaders(SerializerSession)
.- Returns:
- The HTTP headers to set on HTTP requests.
Never
null .
-
getListener
Returns the listener associated with this session.- Type Parameters:
T
- The listener type.- Parameters:
c
- The listener class to cast to.- Returns:
- The listener associated with this session, or
null if there is no listener.
-
resolve
Resolves any variables in the specified string.- Parameters:
string
- The string to resolve values in.- Returns:
- The string with variables resolved.
-
push2
protected final ClassMeta<?> push2(String attrName, Object o, ClassMeta<?> eType) throws SerializeException Same asBeanTraverseSession.push(String, Object, ClassMeta)
but wrapsBeanRecursionException
insideSerializeException
.- Parameters:
attrName
- The attribute name.o
- The current object being traversed.eType
- The expected class type.- Returns:
- The
ClassMeta
of the object so thatinstanceof operations only need to be performed once (since they can be expensive). - Throws:
SerializeException
- If recursion occurred.
-
swap
Invokes the specified swap on the specified object if the swap is not null.- Parameters:
swap
- The swap to invoke. Can benull .o
- The input object.- Returns:
- The swapped object.
- Throws:
SerializeException
- If swap method threw an exception.
-
isAddBeanTypes
Add"_type" properties when needed.- Returns:
true if"_type" properties added to beans if their type cannot be inferred through reflection.- See Also:
-
isAddRootType
Add type attribute to root nodes.- Returns:
true if type property should be added to root node.- See Also:
-
getListener
Returns the listener associated with this session.- Returns:
- The listener associated with this session, or
null if there is no listener.
-
isSortCollections
Sort arrays and collections alphabetically.- Returns:
true if arrays and collections are copied and sorted before serialization.- See Also:
-
isSortMaps
Sort maps alphabetically.- Returns:
true if maps are copied and sorted before serialization.- See Also:
-
isTrimEmptyCollections
Trim empty lists and arrays.- Returns:
true if empty lists and arrays are not serialized to the output.- See Also:
-
isTrimEmptyMaps
Trim empty maps.- Returns:
true if empty map values are not serialized to the output.- See Also:
-
isKeepNullProperties
Don't trim null bean property values.- Returns:
true if null bean values are serialized to the output.- See Also:
-
isTrimStrings
Trim strings.- Returns:
true if string values will be trimmed of whitespace usingString.trim()
before being serialized.- See Also:
-
getUriContext
URI context bean.- Returns:
- Bean used for resolution of URIs to absolute or root-relative form.
- See Also:
-
getUriRelativity
URI relativity.- Returns:
- Defines what relative URIs are relative to when serializing any of the following:
- See Also:
-
getUriResolution
URI resolution.- Returns:
- Defines the resolution level for URIs when serializing URIs.
- See Also:
-
handleThrown
Converts the specified throwable to either aRuntimeException
orSerializeException
.- Type Parameters:
T
- The throwable type.- Parameters:
causedBy
- The exception to cast or wrap.
-
properties
Description copied from class:ContextSession
Returns the properties on this bean as a map for debugging.- Overrides:
properties
in classBeanTraverseSession
- Returns:
- The properties on this bean as a map for debugging.
-