}
try {
if (fieldInfo.isPersisted()) {
if (fieldType.isPrimitiveType()) {
/* a primitive field */
AbstractConverter binaryConverter;
binaryConverter = (AbstractConverter) helperBinaryConversion
.fromBinary(binary, offset, fieldType);
if (!binaryConverter.valueDefinedFromBinary) {
throw new ObjectIOException(
"field value must be defined");
}
final Object fieldValue = binaryConverter.objectFromBinary;
binaryConverter.objectFromBinary = null;// NOPMD
/* primitive not persisted */
fieldValueAndPersistInfo = objectIOManager
.getOrCreateObjectPersistInfoOfObject(fieldValue,
false, fieldType, Boolean.FALSE);
// offset += helperBinaryConversion.byteSize(type);
offset += fieldType.getBinarySize();
} else if (helperBinaryConversion.getType(binary, offset) ==
/* */HelperBinaryConversion.REFERENCE_TYPE) {
/* a reference field */
fieldValueAndPersistInfo = referenceInput.fromBinary(
binary, offset);
offset += HelperBinaryConversion.REFERENCE_NULLABLE_BYTE_SIZE;
if (!fieldValueAndPersistInfo.valueDefined) {
throw new ObjectIOException(
"field value must be defined");
}
} else {
/* a basic field */
AbstractConverter binaryConverter;
try {
binaryConverter = (AbstractConverter) helperBinaryConversion
.fromBinary(binary, offset);
} catch (BinaryConverterException exception) {
throw new ObjectIOException(exception);