Вызов конструктора класса с параметрами - PullRequest
0 голосов
/ 18 июня 2019

Нужна помощь с преобразованием этого Java-кода UserNameTermQuery query = new UserNameTermQuery("*"); в Velocity.

До сих пор пробовали

#set($query = $content.class.getConstructor('com.atlassian.user.search.query.UserNameTermQuery').newInstance("*"))

без удачи.Проблема в том, что мне нужно запустить #set($usernames = $userAccessor.findUsers($query)) в пользовательском макросе, а findUsers не принимает строку, но требует Object в определенном классе.И для API объект должен быть инициализирован одним параметром - String.

Соответствующий код Java очень прост, хотя я просто не могу использовать его в пользовательском макросе Confluence

import com.atlassian.confluence.user.UserAccessor;
import com.atlassian.user.search.query.UserNameTermQuery;
import com.atlassian.user.search.SearchResult;
import com.atlassian.user.User;

UserNameTermQuery query = new UserNameTermQuery("*");
SearchResult<User> users = userAccessor.findUsers(query);

1 Ответ

0 голосов
/ 21 июня 2019

Метод getConstructor должен вызываться для соответствующего класса с правильными аргументами.Прямо сейчас вы ищете конструктор в классе объекта $content, а не присваиваете getConstructor классы ожидаемых параметров.

Попробуйте:

#set($queryClass = $content.class.forName('com.atlassian.user.search.query.UserNameTermQuery'))
#set($dummyString = 'foo')
#set($stringClass = $dummyString.class)
#set($queryConstructor = $queryClass.getConstructor($stringClass))
#set($query = $queryConstructor.newInstance('*'))

Конечно, тебе лучше попробовать сделать все это на стороне Java ...

...