public String getWorkflowState(WorkflowExecution execution) throws WorkflowException {
   String workflowId = execution.getWorkflowId();
   if (workflowId == null) {
     throw new IllegalArgumentException("null workflowId");
   }
   final ChildWorkflowTryCatchFinally childTryCatch = workflowExecutions.get(workflowId);
   if (childTryCatch == null) {
     throw new UnknownResourceException(execution.toString());
   }
   String openExecutionRunId = childTryCatch.getWorkflowExecution().getRunId();
   if (execution.getRunId() != null && !openExecutionRunId.equals(execution.getRunId())) {
     throw new UnknownResourceException("Unknown Execution (runId doesn't match)");
   }
   return childTryCatch.getWorkflowState();
 }