in src/main/java/org/apache/sling/models/jacksonexporter/impl/ResourceSerializer.java [117:167]
private void createProperty(
final JsonGenerator jgen,
final ValueMap valueMap,
final String key,
final Object value,
final SerializerProvider provider)
throws IOException {
Object[] values = null;
if (value.getClass().isArray()) {
final int length = Array.getLength(value);
// write out empty array
if (length == 0) {
jgen.writeArrayFieldStart(key);
jgen.writeEndArray();
return;
}
values = new Object[Array.getLength(value)];
for (int i = 0; i < length; i++) {
values[i] = Array.get(value, i);
}
}
// special handling for binaries: we dump the length and not the data!
if (value instanceof InputStream || (values != null && values[0] instanceof InputStream)) {
// TODO for now we mark binary properties with an initial colon in
// their name
// (colon is not allowed as a JCR property name)
// in the name, and the value should be the size of the binary data
if (values == null) {
jgen.writeNumberField(":" + key, getLength(valueMap, -1, key, (InputStream) value));
} else {
jgen.writeArrayFieldStart(":" + key);
for (int i = 0; i < values.length; i++) {
jgen.writeNumber(getLength(valueMap, i, key, (InputStream) values[i]));
}
jgen.writeEndArray();
}
return;
}
if (!value.getClass().isArray()) {
jgen.writeFieldName(key);
writeValue(jgen, value, provider);
} else {
jgen.writeArrayFieldStart(key);
for (Object v : values) {
writeValue(jgen, v, provider);
}
jgen.writeEndArray();
}
}