in src/main/java/org/apache/sling/models/jacksonexporter/impl/ResourceSerializer.java [53:111]
private void create(
final Resource resource,
final JsonGenerator jgen,
final int currentRecursionLevel,
final SerializerProvider provider)
throws IOException {
jgen.writeStartObject();
final ValueMap valueMap = resource.adaptTo(ValueMap.class);
final Map propertyMap = (valueMap != null) ? valueMap : resource.adaptTo(Map.class);
if (propertyMap == null) {
// no map available, try string
final String value = resource.adaptTo(String.class);
if (value != null) {
// single value property or just plain String resource or...
jgen.writeStringField(resource.getName(), value);
} else {
// Try multi-value "property"
final String[] values = resource.adaptTo(String[].class);
if (values != null) {
jgen.writeArrayFieldStart(resource.getName());
for (final String s : values) {
jgen.writeString(s);
}
jgen.writeEndArray();
}
}
} else {
@SuppressWarnings("unchecked")
final Iterator<Map.Entry> props = propertyMap.entrySet().iterator();
// the node's actual properties
while (props.hasNext()) {
final Map.Entry prop = props.next();
if (prop.getValue() != null) {
createProperty(jgen, valueMap, prop.getKey().toString(), prop.getValue(), provider);
}
}
}
// the child nodes
if (recursionLevelActive(currentRecursionLevel)) {
for (final Resource n : resource.getChildren()) {
jgen.writeFieldName(n.getName());
create(n, jgen, currentRecursionLevel + 1, provider);
}
}
jgen.writeEndObject();
}