in src/main/java/org/apache/sling/feature/io/json/FeatureJSONReader.java [613:639]
private void readCapabilities(final JsonObject json, final List<Capability> container) throws IOException {
if ( json.containsKey(JSONConstants.FEATURE_CAPABILITIES)) {
for(final JsonValue cap : checkTypeArray(JSONConstants.FEATURE_REQUIREMENTS, json.get(JSONConstants.FEATURE_CAPABILITIES))) {
final JsonObject obj = checkTypeObject("Capability", cap);
if ( !obj.containsKey(JSONConstants.REQCAP_NAMESPACE) ) {
throw new IOException(this.exceptionPrefix.concat("Namespace is missing for capability"));
}
final String namespace = checkTypeString("Capability namespace", obj.get(JSONConstants.REQCAP_NAMESPACE));
Map<String, Object> attrMap = new HashMap<>();
if ( obj.containsKey(JSONConstants.REQCAP_ATTRIBUTES) ) {
final JsonObject attrs = checkTypeObject("Capability attributes", obj.get(JSONConstants.REQCAP_ATTRIBUTES));
attrs.forEach(rethrowBiConsumer((key, value) -> ManifestUtils.unmarshalAttribute(key, value, attrMap::put)));
}
Map<String, String> dirMap = new HashMap<>();
if ( obj.containsKey(JSONConstants.REQCAP_DIRECTIVES) ) {
final JsonObject dirs = checkTypeObject("Capability directives", obj.get(JSONConstants.REQCAP_DIRECTIVES));
dirs.forEach(rethrowBiConsumer((key, value) -> ManifestUtils.unmarshalDirective(key, value, dirMap::put)));
}
final Capability c = new CapabilityImpl(null, namespace, dirMap, attrMap);
container.add(c);
}
}
}