Как использовать интерфейс SOAP для TrackStudio
Как получить классы из WSDL
wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Acl?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Attachment?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Bookmark?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Category?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Constants?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Export?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Filter?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Find?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Index?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/MailImport?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Message?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Prstatus?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Registration?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Report?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/SCM?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Step?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Task?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Template?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Udf?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/User?wsdl wsimport -d bin -s src http://localhost:8800/TrackStudio/services/Workflow?wsdl
Либо использовать ant task:
<property name="temp.dir" value="./temp"/>
<property name="lib.dir" value="./lib"/>
<property name="classpath.dir" value="${lib.dir}/commons-discovery.jar:
${lib.dir}/commons-logging-1.1.1.jar:
${lib.dir}/jaxrpc.jar:
${lib.dir}/log4j-1.2.15.jar:
${lib.dir}/opencsv-1.8.jar:
${lib.dir}/xerces-2.6.2.jar:
${lib.dir}/webservices-rt.jar:
${lib.dir}/webservices-tools.jar:
${lib.dir}/saaj.jar"/>
<property name="soapURL" value="http://localhost:8800/TrackStudio/services"/>
<target name="ts-client">
<delete dir="${temp.dir}"/>
<mkdir dir="${temp.dir}"/>
<mkdir dir="${temp.dir}/compiled"/>
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
<classpath path="${classpath.dir}"/>
</taskdef>
<wsimport wsdl="${soapURL}/Acl?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Attachment?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Bookmark?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Category?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Constants?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Export?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Filter?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Find?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Index?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/MailImport?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Message?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Prstatus?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Registration?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Report?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/SCM?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Step?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Task?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Template?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Udf?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/User?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<wsimport wsdl="${soapURL}/Workflow?wsdl" destdir="${temp.dir}/compiled" keep="true" extension="true"/>
<jar basedir="${temp.dir}/compiled" jarfile="${lib.dir}/ts-soapclient.jar"/>
<delete dir="${temp.dir}"/>
</target>
После того, как вы получите классы, можно приступать к написанию своего SOAP-клиента. В SOAP вы можете оперировать сервисами или контейнерами. Сервисы нужны для выполнения различных функций, в контейнерах, соответственно, переносятся данные.
Сервис для манипулирования задачами можно получить, например, так:
public static final String url = "http://localhost:8800/TrackStudio/services/";
public Task getTaskService(url) throws MalformedURLException {
TaskService service = new TaskService(new URL(url + Task.class.getSimpleName() + "?wsdl"),
new QName("http://task.service.soap.trackstudio.com/", "TaskService"));
return service.getTaskPort();
}
url, разумеется, нужно подставить свой.
Теперь чтобы, например, создать задачу, нужно выполнить метод createTask сервиса TaskService:
public String createTask(@WebParam(name = "sessionId") String sessionId,
@WebParam(name = "categoryId") String categoryId, @WebParam(name = "shortname") String shortname,
@WebParam(name = "name") String name, @WebParam(name = "description") String description,
@WebParam(name = "budget") long budget, @WebParam(name = "deadline") long deadline,
@WebParam(name = "priorityId") String priorityId, @WebParam(name = "parentId") String parentId,
@WebParam(name = "handlerUserId") String handlerUserId,
@WebParam(name = "handlerGroupId") String handlerGroupId,
@WebParam(name = "udfNames") String[] udfNames,
@WebParam(name = "udfValues") String[] udfValues) throws Exception;
В примере ниже мы будем получать список задач, у которых определенное дополнительное поле (UDF) равно заданному значению (скачать исходный код)
package soap.client;
import com.trackstudio.soap.service.task.*;
import com.trackstudio.soap.service.udf.Udf;
import com.trackstudio.soap.service.udf.UdfService;
import com.trackstudio.soap.service.user.User;
import com.trackstudio.soap.service.user.UserService;
import javax.xml.namespace.QName;
import java.lang.Exception;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String[] args) throws Exception {
String url = "http://localhost:8080/services/", login = "root",
password = "root", taskId = "1";
String sessionId = getSessionId(url, login, password);
Task task = task(url);
Udf udf = udf(url);
TaskFvalueBean taskFvalueBean = new TaskFvalueBean();
taskFvalueBean.setSubtask("1");
taskFvalueBean.setUdf("UDFff8080812ceeeb53012ceeec55cf0002->_eq_test;");
TaskSliderBean sliderBean = task.getTaskList(sessionId, taskId, taskFvalueBean, true, 20,
new ArrayList<String>());
for (TaskBean bean : sliderBean.getTasks()) {
List<com.trackstudio.soap.service.udf.UdfValueBean> udfs =
udf.getUdfValues(sessionId, bean.getId());
System.out.print(bean.getName() + ":\t\t");
for (com.trackstudio.soap.service.udf.UdfValueBean valueBean : udfs) {
System.out.print(valueBean.getName() +"->"+valueBean.getValue()+
", ");
}
System.out.println();
}
}
private static String getSessionId(String url, String login, String password) throws Exception {
UserService service = new UserService(new URL(url + User.class.getSimpleName() +
"?wsdl"), new QName("http://user.service.soap.trackstudio.com/",
"UserService"));
User user = service.getUserPort();
return user.authenticate(login, password);
}
private static Task task(String url) throws Exception {
TaskService service = new TaskService(new URL(url + Task.class.getSimpleName() +
"?wsdl"), new QName("http://task.service.soap.trackstudio.com/",
"TaskService"));
return service.getTaskPort();
}
private static Udf udf(String url) throws Exception {
UdfService service = new UdfService(new URL(url + Udf.class.getSimpleName() +
"?wsdl"), new QName("http://udf.service.soap.trackstudio.com/",
"UdfService"));
return service.getUdfPort();
}
}
| Attachment | Size |
|---|---|
| Client.java | 2.34 KB |