public static function build(array $constructorArguments = array(), $additionalProperties = array())
    {
        $constructorDefaults = array('message' => null, 'code' => null, 'previous' => null);
        $constructorArguments = array_merge($constructorDefaults, $constructorArguments);

        $message = self::prepareMessage($constructorArguments['message'], $additionalProperties);
        $code = self::prepareCode($constructorArguments['code']);
        $previous = $constructorArguments['previous'];

        $e = new static($message, $code, $previous);

        $e = self::addAdditionalProperties($e, $additionalProperties);

        return $e;
    }