Я пытался использовать JIRA REST JAVA CLIENT API, чтобы закрыть заявку (установить статус «Закрыто»), используя ее IssueID.
При объединении в цепочку асинхронных вызовов с .done(x->y)
последний вызов заканчивается тупиком внутри метода клиента JIRA transition
в первой строке при вызове getServerInfo().claim();
.
Когда я использую блокирующий вызов .claim()
везде, тогда код работает, но также блокирует приложение на 4 секунды.
public void closeIssue(String issueId) {
final IssueRestClient issueClient = jiraRestClient.getIssueClient();
issueClient.getIssue(issueId).done(issue ->
{
issueClient.getTransitions(issue.getTransitionsUri()).done(transitions ->
{
final Optional<Transition> closedTransition =
getTransitionByName(transitions, "Closed");
closedTransition
.map(Transition::getId)
.map(TransitionInput::new)
.ifPresent(transitionInput ->
issueClient.transition(
issue.getTransitionsUri(),
transitionInput
).done(log()));
});
});
}
private Consumer<Void> log(String issueId) {
return aVoid -> LOG.info("Closed JIRA issue {}!", issueId);
}
private static Optional<Transition> getTransitionByName(
Iterable<Transition> transitions,
String transitionName
) {
return StreamSupport
.stream(transitions.spliterator(), false)
.filter(t->t.getName().equals(transitionName))
.findFirst();
}
Что я могу сделать, чтобы это исправить?