public void requestCancelWorkflowExecution(WorkflowExecution execution) {
   String workflowId = execution.getWorkflowId();
   if (workflowId == null) {
     throw new IllegalArgumentException("null workflowId");
   }
   final ChildWorkflowTryCatchFinally childTryCatch = workflowExecutions.get(workflowId);
   if (childTryCatch == null) {
     throw new UnknownResourceException("Unknown excution: " + execution.toString());
   }
   String openExecutionRunId = childTryCatch.getWorkflowExecution().getRunId();
   if (execution.getRunId() != null && !openExecutionRunId.equals(execution.getRunId())) {
     throw new UnknownResourceException("Unknown Execution (runId doesn't match)");
   }
   childTryCatch.cancel(new CancellationException());
 }