Source:
public MultiValuedAttribute buildComplexMultiValuedAttribute (AttributeSchema attributeSchema, JSONArray attributeValues) throws CharonException, BadRequestException { try { MultiValuedAttribute multiValuedAttribute = new MultiValuedAttribute(attributeSchema.getName()); List<Attribute> complexAttributeValues = new ArrayList<Attribute>(); List<Object> simpleAttributeValues = new ArrayList<>(); for (int i = 0; i < attributeValues.length(); i++) { Object attributeValue = attributeValues.get(i); if (attributeValue instanceof JSONObject) { JSONObject complexAttributeValue = (JSONObject) attributeValue; complexAttributeValues.add(buildComplexValue(attributeSchema, complexAttributeValue)); } else if (attributeValue instanceof String || attributeValue instanceof Integer || attributeValue instanceof Double || attributeValue instanceof Boolean || attributeValue == null) { if (logger.isDebugEnabled()) { logger.debug("Primitive attribute type detected. Attribute value: " + attributeValue); } if (attributeValue == null) { continue; } simpleAttributeValues.add(attributeValue); } else { String error = "Unknown JSON representation for the MultiValued attribute " + attributeSchema.getName() + " which has data type as " + attributeSchema.getType(); throw new BadRequestException(error, ResponseCodeConstants.INVALID_SYNTAX); } } multiValuedAttribute.setAttributeValues(complexAttributeValues); multiValuedAttribute.setAttributePrimitiveValues(simpleAttributeValues); return (MultiValuedAttribute) DefaultAttributeFactory.createAttribute(attributeSchema, multiValuedAttribute); } catch (JSONException e) { String error = "Error in accessing JSON value of multivalued attribute"; throw new CharonException(error, e); } }

Target:
public MultiValuedAttribute buildComplexMultiValuedAttribute (AttributeSchema attributeSchema, JSONArray attributeValues) throws CharonException, BadRequestException { try { MultiValuedAttribute multiValuedAttribute = new MultiValuedAttribute(attributeSchema.getName()); List<Attribute> complexAttributeValues = new ArrayList<Attribute>(); List<Object> simpleAttributeValues = new ArrayList<>(); for (int i = 0; i < attributeValues.length(); i++) { Object attributeValue = attributeValues.get(i); if (attributeValue instanceof JSONObject) { JSONObject complexAttributeValue = (JSONObject) attributeValue; complexAttributeValues.add(buildComplexValue(attributeSchema, complexAttributeValue)); } else if (attributeValue instanceof String || attributeValue instanceof Integer || attributeValue instanceof Double || attributeValue instanceof Boolean || attributeValue == null) { if (logger.isDebugEnabled()) { if (attributeValue != null) { logger.debug( "Primitive attribute type detected. Attribute type: " + attributeValue.getClass() .getName() + ", attribute value: " + attributeValue); } else { logger.debug("Attribute value is null."); } } if (attributeValue == null) { continue; } simpleAttributeValues.add(attributeValue); } else { String error = "Unknown JSON representation for the MultiValued attribute " + attributeSchema.getName() + " which has data type as " + attributeSchema.getType(); throw new BadRequestException(error, ResponseCodeConstants.INVALID_SYNTAX); } } multiValuedAttribute.setAttributeValues(complexAttributeValues); multiValuedAttribute.setAttributePrimitiveValues(simpleAttributeValues); return (MultiValuedAttribute) DefaultAttributeFactory.createAttribute(attributeSchema, multiValuedAttribute); } catch (JSONException e) { String error = "Error in accessing JSON value of multivalued attribute"; throw new CharonException(error, e); } }