code: @Override
      public StartExecutionResult startExecution(StartExecutionRequest request) {
          request = beforeClientExecution(request);
          return executeStartExecution(request);
      }
docs: <p>
  Starts a state machine execution.
  </p>
  <note>
  <p>
  <code>StartExecution</code> is idempotent. If <code>StartExecution</code> is called with the same name and input
  as a running execution, the call will succeed and return the same response as the original request. If the
  execution is closed or if the input is different, it will return a 400 <code>ExecutionAlreadyExists</code> error.
  Names can be reused after 90 days.
  </p>
  </note>
  
  @param startExecutionRequest
  @return Result of the StartExecution operation returned by the service.
  @throws ExecutionLimitExceededException
  The maximum number of running executions has been reached. Running executions must end or be stopped
  before a new execution can be started.
  @throws ExecutionAlreadyExistsException
  The execution has the same <code>name</code> as another execution (but a different <code>input</code>
  ).</p> <note>
  <p>
  Executions with the same <code>name</code> and <code>input</code> are considered idempotent.
  </p>
  @throws InvalidArnException
  The provided Amazon Resource Name (ARN) is invalid.
  @throws InvalidExecutionInputException
  The provided JSON input data is invalid.
  @throws InvalidNameException
  The provided name is invalid.
  @throws StateMachineDoesNotExistException
  The specified state machine does not exist.
  @throws StateMachineDeletingException
  The specified state machine is being deleted.
  @sample AWSStepFunctions.StartExecution
  @see <a href="http://docs.aws.amazon.com/goto/WebAPI/states-2016-11-23/StartExecution" target="_top">AWS API
  Documentation</a>