Class HoconSerializer
- All Implemented Interfaces:
Function<Object,,String> ThrowingFunction<Object,,String> HoconMetaProvider,RecordWritable
Media types
Accepts
Produces
Description
HOCON is a superset of JSON used extensively in the JVM ecosystem for configuration files.
This serializer produces output that is valid HOCON and can be parsed back by HoconParser.
The conversion is as follows:
-
HashMap/ bean → HOCON object with unquoted keys and= separator ({ key = value } ). -
Collection/ array → HOCON array ([a, b, c] ). -
String(simple, no special chars) → unquoted string (name = myapp ). -
String(contains special chars or is ambiguous like"true" ,"42" ,"null" ) → quoted string (path = "/usr/local/bin" ). -
String(multi-line) → triple-quoted string (desc = """...""" ). -
Number→ number literal (port = 8080 ). -
Boolean→true orfalse . -
null →null keyword. -
Non-primitive types (e.g.
Date,URI) → converted viaObjectSwapbefore serialization.
Behavior-specific subclasses
-
DEFAULT— readable, unquoted keys/values,= separator, root braces omitted (config-file style). -
DEFAULT_BRACES— same asDEFAULTbut includes root{ } braces. -
DEFAULT_COMPACT— single-line compact output, JSON-compatible.
Example:
Example output (bean, root braces omitted):
name = myapp port = 8080 debug = true database { host = localhost port = 5432 } tags = [web, api, rest]
Example output (with root braces — DEFAULT_BRACES):
{ name = myapp port = 8080 debug = true }
Limitations:
- Substitutions (
${var} ) are never emitted — the serializer always writes resolved (concrete) values. - Value concatenation is never emitted — the serializer always writes complete strings.
- Path expressions (
a.b.c = value ) are never emitted — the serializer always uses nested-brace form. include directives are never emitted — these require file-system access outside the scope of a serializer.
Notes:
- This class is thread safe and reusable.
See Also:
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class org.apache.juneau.marshall.serializer.WriterSerializer
WriterSerializer.DefaultBuilderNested classes/interfaces inherited from class org.apache.juneau.marshall.serializer.Serializer
Serializer.Null -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final HoconSerializerDefault serializer (readable, root braces omitted).static final HoconSerializerDefault serializer with root braces.static final HoconSerializerCompact serializer (single line).protected final booleanOmit root object braces.protected final booleanUse = (not :) for key-value separator.protected final booleanUse triple-quoted """ for strings with newlines.protected final booleanUse newlines instead of commas between members.protected final booleanUse unquoted keys when safe.protected final booleanUse unquoted strings for simple values.Fields inherited from class org.apache.juneau.marshall.serializer.WriterSerializer
maxIndent, quoteChar, quoteCharOverride, useWhitespaceFields inherited from class org.apache.juneau.marshall.serializer.Serializer
accept, addBeanTypes, addRootType, keepNullProperties, listener, nonDefault, produces, sortCollections, sortMaps, trimEmptyCollections, trimEmptyMaps, trimStringsFields inherited from class org.apache.juneau.marshall.MarshallingContextable
marshallingContextFields inherited from class org.apache.juneau.marshall.Context
CONTEXT_APPLY_FILTER -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncopy()Creates a builder from this context object.static HoconSerializer.Buildercreate()Creates a new builder.Create a session builder based on the properties defined on this context.Returns the HOCON-specific metadata on the specified bean property.getHoconClassMeta(ClassMeta<?> cm) Returns the HOCON-specific metadata on the specified class.booleanStreaming-quality signal queryable before opening a cursor.Returns the properties on this bean as a map for debugging.writeRecords(Object output) Convenience delegator that opens aRecordWriterover the output using default session arguments (mirrorsWriterSerializer.write(Object)).Methods inherited from class org.apache.juneau.marshall.serializer.WriterSerializer
applyThrows, getMaxIndent, getQuoteChar, getSession, getStreamCharset, isUseWhitespace, isWriterSerializer, println, quoteChar, toString, writeMethods inherited from class org.apache.juneau.marshall.serializer.Serializer
createSerializerBuilder, doWrite, forEachAcceptMediaType, getListener, getMediaTypeRanges, getPrimaryMediaType, getResponseContentType, getResponseHeaders, getUriContext, getUriRelativity, getUriResolution, isAddBeanTypes, isAddRootType, isKeepNullProperties, isNonDefault, isSortCollections, isSortMaps, isTrimEmptyCollections, isTrimEmptyMaps, isTrimStrings, write, writeToStringMethods inherited from class org.apache.juneau.marshall.MarshallingTraverseContext
getDetectRecursions, getIgnoreRecursions, getInitialDepth, getMaxDepth, isDetectRecursions, isIgnoreRecursions, shouldDetectRecursionsMethods inherited from class org.apache.juneau.marshall.MarshallingContextable
getDurationFormat, getMarshallingContext, getPeriodFormatMethods inherited from class org.apache.juneau.marshall.Context
createBuilder, getAnnotationProvider, init, isDebug, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.juneau.commons.function.ThrowingFunction
apply
-
Field Details
-
useEqualsSign
Use = (not :) for key-value separator. -
useUnquotedStrings
Use unquoted strings for simple values. -
useUnquotedKeys
Use unquoted keys when safe. -
omitRootBraces
Omit root object braces. -
useMultilineStrings
Use triple-quoted """ for strings with newlines. -
useNewlineSeparators
Use newlines instead of commas between members. -
DEFAULT
Default serializer (readable, root braces omitted). -
DEFAULT_BRACES
Default serializer with root braces. -
DEFAULT_COMPACT
Compact serializer (single line).
-
-
Constructor Details
-
HoconSerializer
Constructor.- Parameters:
builder- The builder.
-
-
Method Details
-
create
Creates a new builder.- Returns:
- A new builder.
-
createSession
Description copied from class:ContextCreate a session builder based on the properties defined on this context.Use this method for creating sessions where you want to override basic settings. Otherwise, use
Context.getSession()directly.- Overrides:
createSessionin classWriterSerializer- Returns:
- A new session builder.
-
copy
Description copied from class:ContextCreates a builder from this context object.Builders are used to define new contexts (e.g. serializers, parsers) based on existing configurations.
- Overrides:
copyin classWriterSerializer- Returns:
- A new Builder object.
-
getHoconBeanPropertyMeta
Description copied from interface:HoconMetaProviderReturns the HOCON-specific metadata on the specified bean property.- Specified by:
getHoconBeanPropertyMetain interfaceHoconMetaProvider- Parameters:
bpm- The bean property to return the metadata on.- Returns:
- The metadata.
-
getHoconClassMeta
Description copied from interface:HoconMetaProviderReturns the HOCON-specific metadata on the specified class.- Specified by:
getHoconClassMetain interfaceHoconMetaProvider- Parameters:
cm- The class to return the metadata on.- Returns:
- The metadata.
-
properties
Description copied from class:ContextReturns the properties on this bean as a map for debugging.- Overrides:
propertiesin classWriterSerializer- Returns:
- The properties on this bean as a map for debugging.
-
writeRecords
Convenience delegator that opens aRecordWriterover the output using default session arguments (mirrorsWriterSerializer.write(Object)).The real implementation lives on
HoconSerializerSession.writeRecords(Object). Callers that need request-derived configuration should callcreateSession()and invokeHoconSerializerSession.writeRecords(Object)on the built session instead.- Specified by:
writeRecordsin interfaceRecordWritable- Parameters:
output- The output.- Returns:
- A new
RecordWriter. - Throws:
IOException- If a problem occurred opening the underlying output.
-
isRecordStreaming
Description copied from interface:RecordWritableStreaming-quality signal queryable before opening a cursor.- Specified by:
isRecordStreamingin interfaceRecordWritable- Returns:
true ifRecordWritable.writeRecords(Object)returns an O(1)-memory streaming cursor;false for buffered (whole-value) formats backed byRecordAdapter.
-