SOAP в 4.0.14

Обсуждаем TrackStudio по-русски

SOAP в 4.0.14

Postby xpepex » Mon Sep 12, 2011 4:06 pm

Здравтсвуйте, есть вот такой код:
Code: Select all
$soap = new SoapClient($wsdl, array('soap_version'   => SOAP_1_2,
                                    'style'    => SOAP_DOCUMENT,
                                    'login' => '***',
                                    'password' => '***',
                                    'trace' => true,
                                    'exceptions' => true,
                                    'cache_wsdl' => WSDL_CACHE_NONE,
                                    )
                      );
$params = array('9599');
$res = $soap->__call('findTaskByNumber',$params);

При его выполнении вываливается эксепшен:
SoapFault exception: [S:Receiver] InvalidParameterException: className=com.trackstudio.securedkernel.SecuredTaskAdapterManager, method=findTaskByNumber, parameter=sc, userId=null in
, в котором смущают два момента - parameter (почему sc - это внутреннее имя переменной?) и userId равное null (хотя логин/пароль передаются).
Вполне возможно, что требуется отдельная аутентификация, но и с ней всё плохо: использую authenticate из User?wsdl, передаю пары логин/пароль и пароль/логин (и так и так пробовал), судя по tcpdump - всё уходит серверу:
Content-Type: application/soap+xml; charset=utf-8; action="authenticate"
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://user.service.soap.trackstudio.com/"><env:Body><ns1:authenticate/><param1>логин</param1><param2>пароль</param2></env:Body></env:Envelope>
а назад опять получаем кукиш в виде: SoapFault exception: [S:Receiver] InvalidParameterException: className=com.trackstudio.securedkernel.SecuredUserAdapterManager, method=authenticate, parameter=login, userId=null

Ну и очевидный вопрос - ЧЯДНТ?

Версия TrackStudio - 4.0.14
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Re: SOAP в 4.0.14

Postby admin » Mon Sep 12, 2011 6:46 pm

Так, не очень понял. Сначала нужно вызвать authenticate с логином и паролем, получить там sessionid, а потом его передавать при поиске задачи по номеру.
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 7454
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: SOAP в 4.0.14

Postby xpepex » Tue Sep 13, 2011 12:15 am

admin wrote:Сначала нужно вызвать authenticate с логином и паролем, получить там sessionid

Увы, с этим-то и проблема.

Подробнее:
Отправляем пользовательские данные:
Code: Select all
$soap = new SoapClient('сервер_трекстудии/services/User?wsdl');
$params = array($login, $password); // отправлять пароль первым, а логин вторым - тоже пробовал, результат один и тот же
$res = $soap->__call('authenticate',$params);

Получаем в ответе от сервера SoapFault exception: [S:Receiver] InvalidParameterException: className=com.trackstudio.securedkernel.SecuredUserAdapterManager, method=authenticate, parameter=login, userId=null

При этом содержание пакета, отправляемого серверу выглядит вполне нормальным:
Code: Select all
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://user.service.soap.trackstudio.com/"><env:Body><ns1:authenticate/><param1>логин</param1><param2>пароль</param2></env:Body></env:Envelope>


Хотя тот же REST работает на ура :(
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Re: SOAP в 4.0.14

Postby admin » Tue Sep 13, 2011 11:00 am

xpepex wrote:При этом содержание пакета, отправляемого серверу выглядит вполне нормальным:
Code: Select all
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://user.service.soap.trackstudio.com/"><env:Body><ns1:authenticate/><param1>логин</param1><param2>пароль</param2></env:Body></env:Envelope>



Похоже, проблема в том, что параметры передаются как param1, param2, а надо по именам. Вот тут посмотрите пример того, как должен выглядеть отправляемый пакет

issue-17992.html
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 7454
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: SOAP в 4.0.14

Postby xpepex » Tue Sep 13, 2011 1:57 pm

Спасибо, проблема была именно в этом.
Теперь всё работает :)
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Re: SOAP в 4.0.14

Postby xpepex » Thu Sep 22, 2011 5:44 pm

Здрасьте опять )
Подскажите, как правильно пользоваться getTaskListByQuery из класса Task?
Пытаюсь сделать по аналогии из документации простой запрос "SELECT count(t.id) FROM com.trackstudio.model.Task AS t" - выдает java.lang.Long cannot be cast to java.lang.String, но какое здесь может быть преобразование данных? о_О И можно ли использовать его для обращения к другим сущностям, или там для сложных запросов с джойнами месседжей, фильтров и всего прочего - т.к. ничего аналогичного в остальных не нашел. Или всё надо делать через фильтры?
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Re: SOAP в 4.0.14

Postby vic » Thu Sep 22, 2011 7:45 pm

xpepex wrote:Подскажите, как правильно пользоваться getTaskListByQuery из класса Task?
Пытаюсь сделать по аналогии из документации простой запрос "SELECT count(t.id) FROM com.trackstudio.model.Task AS t" - выдает java.lang.Long cannot be cast to java.lang.String, но какое здесь может быть преобразование данных? о_О И можно ли использовать его для обращения к другим сущностям, или там для сложных запросов с джойнами месседжей, фильтров и всего прочего - т.к. ничего аналогичного в остальных не нашел. Или всё надо делать через фильтры?


Да кстати, аналогичный вопрос.

Путем всяких экспериментов остановился на варианте (на вашем примере)
Code: Select all
new HibernateUtil().getList("SELECT count(t.id) FROM com.trackstudio.model.Task AS t").get(0)
для получения разнообразных сущностей. Как без создания нового объекта сделать, я не нашел.

Либо, если нужно именно таски получать + с проверкой всяких прав
Code: Select all
AdapterManager.getInstance().getSecuredTaskAdapterManager().getTaskListByQuery(sc, "SELECT t.id FROM com.trackstudio.model.Task AS t WHERE LOWER(t.category.name) = 'bug'");


Или я тут влез совсем не к месту? С SOAP не работал, это я применительно к beanshell'у написал...
vic
 
Posts: 229
Joined: Thu Apr 21, 2011 4:07 pm

Re: SOAP в 4.0.14

Postby xpepex » Fri Sep 23, 2011 1:11 pm

Vic, нет, к сожалению это не совсем то.
Тем не менее, пока ответов нет - вопросы продолжают появляться.

Есть ситуация - необходимо смотреть сообщения тасков за определенный временной промежуток (да, всё - через SOAP). Если нет возможности выбирать соапом месседжи через sql, то как вариант - клонировать существующий фильтр, менять ему параметр выборки по времени, применять его на таски, и получать необходимый результат.

Но: заглядываю в документацию по Filter.html#setTaskFValue - там ожидается одним из параметров "TaskFvalueBean map".
По идее я его могу получить, просто склонировав нужный фильтр, и запросив новый обьект через getTaskFValue (в доке написано, что возвращается UserFValue, но это скорее всего опечатка, должен быть TaskFValue), но глядя на то, что приходит
Code: Select all
object(stdClass)#11 (9) {
  ["budgetMsg"]=>  string(1) "1"
  ["category"]=>  string(32) "d0c4748b2c2ad9cd012c2fa9b33b089e"
  ["display"]=>  string(8) "fullpath"
  ["messageView"]=>  string(2) "-1"
  ["msgSubmitter"]=>  string(13) "CurrentUserID"
  ["onPage"]=>  string(2) "50"
  ["sortOrder"]=>  string(43) "_task_number;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
  ["subtask"]=>  string(1) "1"
  ["udf"]=>  string(0) ""
}

очень трудно представить, что тут и как модифицировать? Если полученный обьект отдать в setTaskFValue в качестве параметров для тестового фильтра - он принимается, но через веб-интерфейс можно увидеть, что после этого все настройки фильтра становятся просто удалены.
У TaskFvalueBean есть заманчиво выглядящие методы setDateMsg, setMessageFilter, setSubmitDate и много других - но ничего, кроме того что они принимают в себя какую-то строку, понять из доки невозможно, да и подобных методов в отдаваемом wdsl тоже не замечено - это привилегия исключительно явы?
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Re: SOAP в 4.0.14

Postby Petr » Mon Sep 26, 2011 12:21 pm

1. getTaskListByQuery внутри метода происходить преобразование к TaskExtendedBean. Вы когда запрашиваете count(*) Ответ приходит ввиде integer и все падает.
2. для того что бы ничего не падало можно самому создать в запросе свои параметны ввиде Map.
3. Вам лучше просто объяснить что вы ходите получить.
TS Support
email: parsentev@yandex.ru
Petr
 
Posts: 1317
Joined: Wed Aug 12, 2009 4:38 pm

Re: SOAP в 4.0.14

Postby xpepex » Tue Sep 27, 2011 10:03 am

Petr wrote:Вам лучше просто объяснить что вы ходите получить.

Как и писал ранее - есть необходимость через соап получить сообщения пользователя в задачах за произвольный период времени по определенным критериям. Фильтр с параметрами есть, пытаюсь его склонировать и изменить условия выборки по времени в нем (в веб-интерфейсе - поле "Дата выполнения операции"), и пока ничего не получается - непонятно, в какой форме отдавать новые параметры :)

upd:
Кажется, нашел проблему. Но еще не нашел решения - может вы что подскажете.

Изначально отправленный запрос:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://filter.service.soap.trackstudio.com/"><env:Body><ns1:setTaskFValue><sessionId>1446ffcc2fa612eca5880665fe98197d</sessionId><filterId>d0c4748b32a8663e0132aa11c7f506f6</filterId><map/></ns1:setTaskFValue></env:Body></env:Envelope>

Видно, что map улетает пустым, если передавать параметры строкой/массивом, что видимо и обьясняет факт ресета фильтра.

Не беда, сделаем обьект и отдадим так:
Code: Select all
$filterObject = new \Tracker\Soap\TaskFValueBean(
  array('display'=>'fullpath', 'onPage'=>200)
);
$tracker->setTaskFilterParams($clonedFilterId,$filterObject);

и получаем симпатично выглядящий запрос
Code: Select all
Content-Type: application/soap+xml; charset=utf-8; action="setTaskFValue"
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://filter.service.soap.trackstudio.com/"><env:Body><ns1:setTaskFValue><sessionId>1446ffcc2fa612eca5880665fe98197d</sessionId><filterId>d0c4748b32a8663e0132aa2c4c6f0775</filterId><map><display>fullpath</display><onPage>200</onPage></map></ns1:setTaskFValue></env:Body></env:Envelope>

который приводит к тому же результату - при просмотре склонированного фильтра из веб-интерфейса параметры задач и операций отсутствуют, переданного значения количества задач на странице - тоже нет (поле отсутствует).
Такие вот дела :(
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Next

Return to TrackStudio Support [Russian]

Who is online

Users browsing this forum: No registered users and 0 guests

cron