@Override public void setResponse(final InvalidTaskException invalidTaskException) { if (invalidTaskException == null) { throw new IllegalArgumentException(); } incrementResponseCount(true); LOG.error("Task data is invalid for {}, returning status {}", taskMessage.getTaskId(), TaskStatus.INVALID_TASK, invalidTaskException); final String taskClassifier = MoreObjects.firstNonNull(taskMessage.getTaskClassifier(), ""); final String invalidTaskExceptionMessage = invalidTaskException.getMessage(); final byte[] taskData = invalidTaskExceptionMessage == null ? new byte[]{} : invalidTaskExceptionMessage.getBytes(StandardCharsets.UTF_8); final Map<String, byte[]> context = MoreObjects.firstNonNull( taskMessage.getContext(), Collections.<String, byte[]>emptyMap()); final TaskMessage invalidResponse = new TaskMessage( MoreObjects.firstNonNull(taskMessage.getTaskId(), ""), taskClassifier, taskMessage.getTaskApiVersion(), taskData, TaskStatus.INVALID_TASK, context, workerFactory.getInvalidTaskQueue(), taskMessage.getTracking(), new TaskSourceInfo(getWorkerName(taskClassifier), getWorkerVersion())); completeResponse(invalidResponse); }