in lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializer.java [290:344]
protected void primitiveValue(final JsonGenerator json, final EdmPrimitiveType valueType, final String typeName,
final EdmProperty edmProperty, final Object value) throws IOException, SerializerException {
EdmPrimitiveType type = valueType;
if (type == null) {
final EdmPrimitiveTypeKind kind =
typeName == null ? EdmTypeInfo.determineTypeKind(value) : new EdmTypeInfo.Builder().setTypeExpression(
typeName).build().getPrimitiveTypeKind();
type = kind == null ? null : EdmPrimitiveTypeFactory.getInstance(kind);
}
if (value == null) {
json.writeNull();
} else if (type == null) {
throw new SerializerException("The primitive type could not be determined.",
MessageKeys.INCONSISTENT_PROPERTY_TYPE, "");
} else if (type == EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Boolean)) {
json.writeBoolean((Boolean) value);
} else {
String serialized = null;
try {
Integer scale = null;
if (value instanceof BigDecimal) {
scale = Math.max(0, ((BigDecimal) value).scale());
} else {
scale = Constants.DEFAULT_SCALE;
}
serialized = type.valueToString(value,
edmProperty == null ? null : edmProperty.isNullable(),
edmProperty == null ? null : edmProperty.getMaxLength(),
edmProperty == null ? null : edmProperty.getPrecision(),
edmProperty == null ? scale : edmProperty.getScale(),
edmProperty == null ? null : edmProperty.isUnicode());
} catch (final EdmPrimitiveTypeException e) {
final String name = edmProperty == null ? "" : edmProperty.getName();
throw new SerializerException("Wrong value for property '" + name + "'!", e,
SerializerException.MessageKeys.WRONG_PROPERTY_VALUE, name, value.toString());
}
if (isIEEE754Compatible &&
(type == EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Int64)
|| type == EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Decimal))
|| type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Byte)
&& type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.SByte)
&& type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Single)
&& type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Double)
&& type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Int16)
&& type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Int32)
&& type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Int64)
&& type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Decimal)) {
json.writeString(serialized);
} else {
json.writeNumber(serialized);
}
}
}