public function parse($request)
    {
        $object = clone $this->requestObject;
        foreach ($this->propertyParsers as $propertyParser) {
            try {
                $this->setProperty($request, $object, $propertyParser);
            } catch (InvalidValueException $e) {
                $propertyName = $propertyParser->getName();
                $exception = new InvalidRequestException($propertyName . ': ' . $e->getMessage());
                $exception->setErrors([$propertyName => $e->getMessage()]);
                throw $exception;
            }
        }

        return clone $object;
    }