final Attribute attribute = attributes.get(attributeName);
final Object value;
if (attribute instanceof PrimitiveAttribute) {
PrimitiveAttribute<?> pAtt = (PrimitiveAttribute<?>) attribute;
Object defaultVal = pAtt.getDefault();
PObject jsonToUse = requestJsonAttributes;
if (defaultVal != null) {
final JSONObject obj = new JSONObject();
obj.put(attributeName, defaultVal);
PObject[] pValues = new PObject[]{requestJsonAttributes, new PJsonObject(obj, "default_" + attributeName)};
jsonToUse = new PMultiObject(pValues);
}
value = parser.parsePrimitive(attributeName, pAtt.getValueClass(), jsonToUse);
} else if (attribute instanceof DataSourceAttribute) {
DataSourceAttribute dsAttribute = (DataSourceAttribute) attribute;
value = dsAttribute.parseAttribute(parser, template, requestJsonAttributes.optArray(attributeName));
} else if (attribute instanceof ReflectiveAttribute) {
boolean errorOnExtraParameters = template.getConfiguration().isThrowErrorOnExtraParameters();
ReflectiveAttribute<?> rAtt = (ReflectiveAttribute<?>) attribute;
value = rAtt.createValue(template);
PObject pValue = requestJsonAttributes.optObject(attributeName);
if (pValue != null) {
PObject[] pValues = new PObject[]{pValue, rAtt.getDefaultValue()};
pValue = new PMultiObject(pValues);
} else {