in lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java [442:542]
protected void writeEntity(final ServiceMetadata metadata, final EdmEntityType entityType,
final Entity entity, final ContextURL contextURL, final ExpandOption expand, final Integer toDepth,
final SelectOption select, final String xml10InvalidCharReplacement,
final XMLStreamWriter writer, final boolean top, final boolean writeOnlyRef,String name, Set<String> ancestors)
throws XMLStreamException, SerializerException {
boolean cycle = false;
if (expand != null) {
if (ancestors == null) {
ancestors = new HashSet<String>();
}
cycle = !ancestors.add(getEntityId(entity, entityType, name));
}
if (cycle || writeOnlyRef) {
writeReference(entity, contextURL, writer, top);
return;
}
try {
writer.writeStartElement(ATOM, Constants.ATOM_ELEM_ENTRY, NS_ATOM);
if (top) {
writer.writeNamespace(ATOM, NS_ATOM);
writer.writeNamespace(METADATA, NS_METADATA);
writer.writeNamespace(DATA, NS_DATA);
if (contextURL != null) { // top-level entity
writer.writeAttribute(METADATA, NS_METADATA, Constants.CONTEXT,
ContextURLBuilder.create(contextURL).toASCIIString());
writeMetadataETag(metadata, writer);
}
}
if (entity.getETag() != null) {
writer.writeAttribute(METADATA, NS_METADATA, Constants.ATOM_ATTR_ETAG, entity.getETag());
}
if (entity.getId() != null) {
writer.writeStartElement(NS_ATOM, Constants.ATOM_ELEM_ID);
writer.writeCharacters(entity.getId().toASCIIString());
writer.writeEndElement();
}
writerAuthorInfo(entity.getTitle(), writer);
if (entity.getId() != null) {
writer.writeStartElement(NS_ATOM, Constants.ATOM_ELEM_LINK);
writer.writeAttribute(Constants.ATTR_REL, Constants.EDIT_LINK_REL);
writer.writeAttribute(Constants.ATTR_HREF, entity.getId().toASCIIString());
writer.writeEndElement();
}
if (entityType.hasStream()) {
writer.writeStartElement(NS_ATOM, Constants.ATOM_ELEM_CONTENT);
writer.writeAttribute(Constants.ATTR_TYPE, entity.getMediaContentType());
if (entity.getMediaContentSource() != null) {
writer.writeAttribute(Constants.ATOM_ATTR_SRC, entity.getMediaContentSource().toString());
} else {
String id = entity.getId().toASCIIString();
writer.writeAttribute(Constants.ATOM_ATTR_SRC,
id + (id.endsWith("/") ? "" : "/") + "$value");
}
writer.writeEndElement();
}
// write media links
for (Link link : entity.getMediaEditLinks()) {
writeLink(writer, link);
}
EdmEntityType resolvedType = resolveEntityType(metadata, entityType, entity.getType());
writeNavigationProperties(metadata, resolvedType, entity, expand,
toDepth, xml10InvalidCharReplacement, ancestors, name, writer);
writer.writeStartElement(ATOM, Constants.ATOM_ELEM_CATEGORY, NS_ATOM);
writer.writeAttribute(Constants.ATOM_ATTR_SCHEME, Constants.NS_SCHEME);
writer.writeAttribute(Constants.ATOM_ATTR_TERM,
"#" + resolvedType.getFullQualifiedName().getFullQualifiedNameAsString());
writer.writeEndElement();
// In the case media, content is sibiling
if (!entityType.hasStream()) {
writer.writeStartElement(NS_ATOM, Constants.ATOM_ELEM_CONTENT);
writer.writeAttribute(Constants.ATTR_TYPE, "application/xml");
}
writer.writeStartElement(METADATA, Constants.PROPERTIES, NS_METADATA);
writeProperties(metadata, resolvedType, entity.getProperties(), select,
xml10InvalidCharReplacement, writer, entity, expand);
writer.writeEndElement(); // properties
if (!entityType.hasStream()) { // content
writer.writeEndElement();
}
writeOperations(entity.getOperations(), writer);
writer.writeEndElement(); // entry
} finally {
if (!cycle && ancestors != null) {
ancestors.remove(getEntityId(entity, entityType, name));
}
}
}