Class JcsSerializer
- All Implemented Interfaces:
Function<Object,,String> ThrowingFunction<Object,,String> JsonMetaProvider,ArrayRecordWritable,RecordWritable,TokenWritable
Media types
Produces media type:
Description
JCS (JSON Canonicalization Scheme) produces a deterministic, byte-for-byte canonical representation of JSON, enabling reliable cryptographic operations such as hashing and digital signing. All canonicalization rules are defined in RFC 8785.
- No whitespace between tokens.
- Object properties sorted by UTF-16 code unit order, applied recursively to all nested objects.
- Numbers serialized using ECMAScript-compatible rules: shortest round-trip representation,
no trailing zeros, lowercase
e, positive exponent sign included (e.g.1e+30). - Negative zero serialized as
0. - Non-ASCII characters emitted as literal UTF-8 bytes (no unnecessary unicode escape sequences).
- Array element order is preserved (not sorted).
Example:
Example output (bean with name/age):
{
Example output with nested object:
{
Notes:
- This class is thread safe and reusable.
-
JCS output is valid JSON and can be parsed using the standard
JsonParser. TheJcsmarshaller pairs this serializer withJsonParserfor full round-trip support. -
BigDecimalandBigIntegervalues beyond IEEE 754 double precision range will lose precision or throw aSerializeException. This is a spec-level constraint defined by RFC 8785. -
Double.NaN,Double.POSITIVE_INFINITY, andDouble.NEGATIVE_INFINITYare not permitted and will throw aSerializeException. -
Strings containing lone UTF-16 surrogate code units will throw
SerializeException. -
Uses
application/jcs+jsonto avoid content-negotiation collision withJsonSerializer(application/json). Request explicitly viaAccept: application/jcs+json for canonical output.
See Also:
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class org.apache.juneau.marshall.json.JsonSerializer
JsonSerializer.DefaultBuilder, JsonSerializer.ReadableNested classes/interfaces inherited from class org.apache.juneau.marshall.serializer.Serializer
Serializer.Null -
Field Summary
FieldsFields inherited from class org.apache.juneau.marshall.json.JsonSerializer
addBeanTypesJson, DEFAULT_READABLE, escapeSolidusFields 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 JcsSerializer.Buildercreate()Creates a new builder for this object.Create a session builder based on the properties defined on this context.booleanStreaming-quality signal queryable before opening a cursor.writeRecords(Object output) Convenience delegator (default session args) for a record writer that emits canonical JCS for the value passed towrite(...).writeTokens(Object output) Convenience delegator (default session args) for the raw-JSON token writer.Methods inherited from class org.apache.juneau.marshall.json.JsonSerializer
getJsonBeanPropertyMeta, getJsonClassMeta, getSchemaSerializer, getSession, isAddBeanTypes, isEscapeSolidus, properties, writeArrayRecordsMethods inherited from class org.apache.juneau.marshall.serializer.WriterSerializer
applyThrows, getMaxIndent, getQuoteChar, 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, 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.marshall.stream.ArrayRecordWritable
isArrayRecordStreaming, writeArrayRecordsMethods inherited from interface org.apache.juneau.commons.function.ThrowingFunction
apply
-
Field Details
-
DEFAULT
Default serializer.
-
-
Constructor Details
-
JcsSerializer
Constructor.- Parameters:
builder- The builder for this object.
-
-
Method Details
-
create
Creates a new builder for this object.- Returns:
- A new 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 classJsonSerializer- Returns:
- A new Builder object.
-
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 classJsonSerializer- Returns:
- A new session builder.
-
writeTokens
Convenience delegator (default session args) for the raw-JSON token writer. Real impl onJcsSerializerSession.writeTokens(Object).Note: the cursor's structural methods (
startObject,fieldName,string, ...) produce ordinary JSON; they do not apply the JCS canonicalization rules (sorted keys, normalized number formatting, etc.) thatWriterSerializer.write(Object)produces. Theobject(Object)bridge is disabled on this writer. UseWriterSerializer.write(Object)for canonical output.- Specified by:
writeTokensin interfaceTokenWritable- Overrides:
writeTokensin classJsonSerializer- Parameters:
output- The output.- Returns:
- A new
JsonTokenWriterwithobject(...)disabled. - Throws:
IOException- If the output type is not supported or could not be opened.
-
writeRecords
Convenience delegator (default session args) for a record writer that emits canonical JCS for the value passed towrite(...). Real impl onJcsSerializerSession.writeRecords(Object).- Parameters:
output- The output.- Returns:
- A new
RecordWriter. - Throws:
IOException- If the output type is not supported or could not be opened.
-
isRecordStreaming
Description copied from interface:RecordWritableStreaming-quality signal queryable before opening a cursor.- Returns:
true ifRecordWritable.writeRecords(Object)returns an O(1)-memory streaming cursor;false for buffered (whole-value) formats backed byRecordAdapter.
-