@Override
  public TaskResult getTaskResult(String jobId, String taskName)
      throws NotConnectedException, UnknownJobException, UnknownTaskException, PermissionException {
    TaskResultImpl taskResult = null;
    try {
      TaskResultData taskResultData = restApi().taskresult(sid, jobId, taskName);
      taskResult = (TaskResultImpl) toTaskResult(JobIdImpl.makeJobId(jobId), taskResultData);
      if (taskResult.value() == null) {
        Serializable value = restApi().valueOftaskresult(sid, jobId, taskName);
        if (value != null) {
          taskResult.setHadException(true);
          taskResult.setValue(value);
        }
      }

      String all = restApi().tasklog(sid, jobId, taskName);
      String out = restApi().tasklogout(sid, jobId, taskName);
      String err = restApi().tasklogErr(sid, jobId, taskName);

      taskResult.setOutput(DataUtility.toTaskLogs(all, out, err));

    } catch (Throwable t) {
      throwUJEOrNCEOrPEOrUTE(exception(t));
    }
    return taskResult;
  }
  @Test
  public void testValueOfTaskResult_ExceptionNoMessage() throws Throwable {
    SchedulerRestInterface restInterface = new SchedulerStateRest();

    SchedulerProxyUserInterface mockOfScheduler = mock(SchedulerProxyUserInterface.class);
    String sessionId = SharedSessionStoreTestUtils.createValidSession(mockOfScheduler);

    TaskResultImpl taskResultWithException =
        new TaskResultImpl(
            TaskIdImpl.createTaskId(JobIdImpl.makeJobId("42"), "mytask", 1),
            null,
            new byte[0],
            null);
    when(mockOfScheduler.getTaskResult("42", "mytask")).thenReturn(taskResultWithException);

    String exceptionStackTrace =
        (String) restInterface.valueOftaskresult(sessionId, "42", "mytask");

    assertNotNull(exceptionStackTrace);
  }
  @Test
  public void testValueOfJobResult_ExceptionNoMessage() throws Throwable {
    SchedulerRestInterface restInterface = new SchedulerStateRest();

    SchedulerProxyUserInterface mockOfScheduler = mock(SchedulerProxyUserInterface.class);
    String sessionId = SharedSessionStoreTestUtils.createValidSession(mockOfScheduler);

    TaskResultImpl taskResultWithException =
        new TaskResultImpl(
            TaskIdImpl.createTaskId(JobIdImpl.makeJobId("42"), "mytask", 1),
            null,
            new byte[0],
            null);
    JobResultImpl jobResultWithException = new JobResultImpl();
    jobResultWithException.addTaskResult("mytask", taskResultWithException, false);
    when(mockOfScheduler.getJobResult("42")).thenReturn(jobResultWithException);

    Map<String, String> jobResult = restInterface.jobResultValue(sessionId, "42");
    String exceptionStackTrace = jobResult.get("mytask");

    assertNotNull(exceptionStackTrace);
  }