in lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java [381:449]
protected void writeEntity(final ServiceMetadata metadata, final EdmEntityType entityType, final Entity entity,
final ContextURL contextURL, final ExpandOption expand, Integer toDepth,
final SelectOption select, final boolean onlyReference, Set<String> ancestors,
String name, final JsonGenerator json)
throws IOException, SerializerException, DecoderException {
boolean cycle = false;
if (expand != null) {
if (ancestors == null) {
ancestors = new HashSet<>();
}
cycle = !ancestors.add(getEntityId(entity, entityType, name));
}
try {
json.writeStartObject();
if (!isODataMetadataNone) {
// top-level entity
if (contextURL != null) {
writeContextURL(contextURL, json);
writeMetadataETag(metadata, json);
}
if (entity.getETag() != null) {
json.writeStringField(constants.getEtag(), entity.getETag());
}
if (entityType.hasStream()) {
if (entity.getMediaETag() != null) {
json.writeStringField(constants.getMediaEtag(), entity.getMediaETag());
}
if (entity.getMediaContentType() != null) {
json.writeStringField(constants.getMediaContentType(), entity.getMediaContentType());
}
if (entity.getMediaContentSource() != null) {
json.writeStringField(constants.getMediaReadLink(), entity.getMediaContentSource().toString());
}
if (entity.getMediaEditLinks() != null && !entity.getMediaEditLinks().isEmpty()) {
json.writeStringField(constants.getMediaEditLink(), entity.getMediaEditLinks().get(0).getHref());
}
}
}
if (cycle || onlyReference) {
json.writeStringField(constants.getId(), getEntityId(entity, entityType, name));
} else {
final EdmEntityType resolvedType = resolveEntityType(metadata, entityType, entity.getType());
if ((!isODataMetadataNone && !resolvedType.equals(entityType)) || isODataMetadataFull) {
json.writeStringField(constants.getType(), "#" + entity.getType());
}
if ((!isODataMetadataNone && !areKeyPredicateNamesSelected(select, resolvedType)) || isODataMetadataFull) {
json.writeStringField(constants.getId(), getEntityId(entity, resolvedType, name));
}
if (isODataMetadataFull) {
if (entity.getSelfLink() != null) {
json.writeStringField(constants.getReadLink(), entity.getSelfLink().getHref());
}
if (entity.getEditLink() != null) {
json.writeStringField(constants.getEditLink(), entity.getEditLink().getHref());
}
}
instanceAnnotSerializer.writeInstanceAnnotationsOnEntity(entity.getAnnotations(), json);
writeProperties(metadata, resolvedType, entity.getProperties(), select, json, entity, expand);
writeNavigationProperties(metadata, resolvedType, entity, expand, toDepth, ancestors, name, json);
writeOperations(entity.getOperations(), json);
}
json.writeEndObject();
} finally {
if (expand != null && !cycle && ancestors != null) {
ancestors.remove(getEntityId(entity, entityType, name));
}
}
}