Configuring

Runtime behavior is controlled by DecoderSettings. You can pass settings to ByteDecoderFactory when you create ByteDecoder.

Custom composite classes

If the template contains custom composites, provide Java interfaces/classes for them:

Value narrowing

Narrowing is numeric conversion between different integer widths or between signed/unsigned types. Examples: int32 -> int16, uint32 -> int16, int64 -> uint32.

Use narrowing only when you clearly control source ranges. For details, see Advanced: Value narrowing.

Write narrowing

setEnableNarrowingOnWrite(...) / enableNarrowingOnWrite()
Turns write narrowing on or off. Default: false.

setValidateNarrowingOnWrite(...) / validateNarrowingOnWrite()
Turns runtime range validation on write narrowing on or off. Default: false.

Read narrowing

setEnableNarrowingOnRead(...) / enableNarrowingOnRead()
Turns read narrowing on or off. Default: false.

setValidateNarrowingOnRead(...) / validateNarrowingOnRead()
Turns runtime range validation on read narrowing on or off. Default: false.

Null data behavior

setEnableNullDataReturn(...) / enableNullDataReturn()

This option controls behavior of getters for optional fields when field value is SBE null:

  • true (default): getters return null representation;
  • false: getters throw NullValueException.

When disabled, prefer tryGetInt(...) and tryGetString(...) style methods to test presence before reading value.

Range checking

setValidateValueRanges(...) / validateValueRanges()

When enabled, decoder validates values against minValue and maxValue from schema (if defined):

  • on write, while setter methods are called;
  • on read, while wire data is converted by getters.

If value is outside range, decoder throws WrongValueException. Default: false.

Custom class loader

setParentLoader(...) / getParentLoader()

Sets parent class loader for generated classes. Default is null, which means system class loader.

Default presets

Two presets are available:

  • Default: backward-compatible behavior and minimal runtime checks.
  • Full control: strict runtime checks for read/write operations.

Use DecoderSettings.createFullControlSettings() to get the strict preset.

Setting name Default Full control
validateValueRanges false true
enableNullDataReturn true false
enableNarrowingOnWrite false true
validateNarrowingOnWrite false true
enableNarrowingOnRead false true
validateNarrowingOnRead false true

Example:

Default preset:

DecoderSettings defaultSettings = new DecoderSettings();
ByteDecoder decoderWithDefaults = factory.create(defaultSettings, schema);

Full-control preset:

DecoderSettings fullControl = DecoderSettings.createFullControlSettings();
ByteDecoder decoderWithFullControl = factory.create(fullControl, schema);