function serializeArray($result, $instance, $isSimpleResult, $serverKey) { $json = ""; if (is_array($result)) { if (ArrayUtils::isAssociative($result)) { $json .= "{"; foreach ($result as $key => $value) { $json .= '"' . $key . '":'; if (is_object($value)) { $json .= serializeObject($value, $instance, false, $serverKey); } else { if (is_array($value)) { $json .= serializeArray($value, $instance, $isSimpleResult, $serverKey); } else { $json .= serializeObject($value, $instance, !is_object($value), $serverKey); } } $json .= ","; } } else { $json .= "["; for ($i = 0; $i < count($result); $i++) { $json .= serializeObject($result[$i], $instance, $isSimpleResult, $serverKey) . ","; } } $json = JsonUtils::removeLastChar($result, $json); if (ArrayUtils::isAssociative($result)) { $json .= "}"; } else { $json .= "]"; } } return $json; }
function serializeMethodResult($method, $result, $instance, $serverKey) { $json = ""; if (isNoResult($method)) { return "{}"; } $isSimpleResult = isSimpleResult($method); if ($result === null) { if ($isSimpleResult) { $json .= '{"' . $method->getResult() . '":null}'; } else { $json .= "{}"; } } else { if ($isSimpleResult) { $json .= '{"' . $method->getResult() . '":'; } if ($method->isArray()) { if (is_array($result)) { $json .= serializeArray($result, $instance, $isSimpleResult, $serverKey); } else { // The result it's not an array although it was described IT WAS an array throw new MashapeException(EXCEPTION_EXPECTED_ARRAY_RESULT_SIMPLE, EXCEPTION_GENERIC_LIBRARY_ERROR_CODE); } } else { if (is_array($result)) { // The result it's an array although it was described IT WAS NOT an array throw new MashapeException(EXCEPTION_UNEXPECTED_ARRAY_RESULT_SIMPLE, EXCEPTION_GENERIC_LIBRARY_ERROR_CODE); } else { $json .= serializeObject($result, $instance, $isSimpleResult, $serverKey); } } if ($isSimpleResult) { $json .= '}'; } } return $json; }
function serializeObject($result, $instance, $isSimpleResult, $serverKey) { $json = ""; if ($isSimpleResult) { // It's a simple result, just serialize it $json = JsonUtils::encodeToJson($result); } else { // It's a custom object, let's serialize recursively every field $className = get_class($result); $reflectedClass = new ReflectionClass($className); $xmlObject = RESTConfigurationLoader::getObject($className, $serverKey); if (empty($xmlObject)) { throw new MashapeException(sprintf(EXCEPTION_UNKNOWN_OBJECT, $className), EXCEPTION_GENERIC_LIBRARY_ERROR_CODE); } // Start element $json .= "{"; // Serialize fields $fields = $xmlObject->getFields(); for ($i = 0; $i < count($fields); $i++) { $field = $fields[$i]; $fieldName = $field->getName(); $fieldMethod = $field->getMethod(); $fieldValue = null; if (empty($fieldMethod)) { if ($reflectedClass->hasProperty($fieldName)) { $reflectedProperty = $reflectedClass->getProperty($fieldName); if ($reflectedProperty->isPublic()) { $fieldValue = $reflectedProperty->getValue($result); } else { // Try using the __get magic method $fieldValue = $reflectedClass->getMethod("__get")->invokeArgs($result, array($fieldName)); } } else { if (ArrayUtils::existKey($fieldName, get_object_vars($result))) { $fieldValue = $result->{$fieldName}; } else { throw new MashapeException(sprintf(EXCEPTION_FIELD_NOTFOUND, $fieldName), EXCEPTION_GENERIC_LIBRARY_ERROR_CODE); } } } else { $fieldValue = $reflectedClass->getMethod($fieldMethod)->invoke($result); } if ($fieldValue === null && $field->isOptional()) { // Don't serialize the field continue; } $json .= '"' . $fieldName . '":'; if ($fieldValue === null) { $json .= JsonUtils::encodeToJson($fieldValue); } else { $isSimpleField = isSimpleField($field); if ($field->isArray()) { if (is_array($fieldValue)) { $json .= serializeArray($fieldValue, $instance, isSimpleField($field), $serverKey); } else { // The result it's not an array although it was described IT WAS an array throw new MashapeException(sprintf(EXCEPTION_EXPECTED_ARRAY_RESULT, $fieldName, $className), EXCEPTION_GENERIC_LIBRARY_ERROR_CODE); } } else { if (is_array($fieldValue)) { // The result it's an array although it was described IT WAS NOT an array throw new MashapeException(sprintf(EXCEPTION_UNEXPECTED_ARRAY_RESULT, $fieldName, $className), EXCEPTION_GENERIC_LIBRARY_ERROR_CODE); } else { $json .= serializeObject($fieldValue, $instance, $isSimpleField, $serverKey); } } } $json .= ","; } if (substr($json, strlen($json) - 1, 1) != "{") { $json = JsonUtils::removeLastChar($fields, $json); } // Close element $json .= "}"; } return $json; }