Where is the REST/OSLC API for CRUD of RTC Releases?
Accepted answer
Try do execute a POST request to <ccm_url_with_port>/service/com.ibm.team.workitem.common.internal.rest.IWorkItemRestService/releases informing the Content Type as application/x-www-form-urlencoded and Accept as text/json. The Form Entity must be as follows:
projectAreaItemId: <projectArea_UUID>
releases:[{"sequenceValue":3,"isArchived":false,"isFiltered":<true_or_false>,"name":"<release_name>","description":"<description>","creationDate":<milliseconds_representing_the_desired_date>,"isModified":true}]
Example in Java using Eclipse Lyo's infrastructure:
Example in Java using Eclipse Lyo's infrastructure:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import com.sun.jersey.api.representation.Form;
JSONObject releaseObj = new JSONObject();
releaseObj.put("sequenceValue", 3);
releaseObj.put("isArchived", false);
releaseObj.put("isFiltered", false);
releaseObj.put("name", releaseValue);
releaseObj.put("description", "Description");
releaseObj.put("creationDate", new Date().getTime());
releaseObj.put("isModified", true);
JSONArray array = new JSONArray();
array.add(releaseObj);
Form form = new Form();
form.add("projectAreaItemId", projectAreaUuid);
form.add("releases", array.toString());
JazzRootServicesHelper helper = new JazzRootServicesHelper(rtcUrl, OSLCConstants.OSLC_CM_V2);
JazzFormAuthClient client = helper.initFormClient( userName,password);
client.formLogin();
ClientResponse response = client
.createResource(rtcUrl+ "/service/com.ibm.team.workitem.common.internal.rest.IWorkItemRestService/releases",
form, "application/x-www-form-urlencoded", "text/json");
Comments
To update an existing release, first you need to retrieve the list of releases using a GET request to /service/com.ibm.team.workitem.common.internal.rest.IWorkItemRestService/releases?includeArchived=<true_or_false>&projectAreaItemId=<project_area_uuid> using Accept as text/json. Use the response to find the desired release and finally, execute the same POST above but now informing the new data, the itemId and the _eQualifiedClassName:
[{"creationDate":1436583600000,"description":"Desc2","name":"1.2.6","_eQualifiedClassName":"com.ibm.team.workitem.rest.dto:ReleaseDTO","isArchived":false,"isFiltered":false,"itemId":"_2g134Sg9EeWyhrGcjiBgww","sequenceValue":3,"isModified":true}]
Regards, Fernando.
2 other answers
HI Rophy,
I have tried on RTC 6.02M2 for this solution, but it is failed. Could you give me some suggestion on how to fix it? Thanks!
First, I use the following link to GET current release:
<server:port>/ccm /service/com.ibm.team.workitem.common.internal.rest.IWorkItemRestService/releases?includeArchived=<true_or_false>&projectAreaItemId=<project_area_uuid> using Accept astext/json.
It can return content properly.
{"_eQualifiedClassName":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/:Envelope","soapenv:Body":{"response":{"returnValue":{"values":[{"creationDate":1458057600000,"description":"","name":"test_build_001","_eQualifiedClassName":"com.ibm.team.workitem.rest.dto:ReleaseDTO","isArchived":false,"isFiltered":false,"itemId":"_mwyCAOuZEeWQNIfNlw2urw","sequenceValue":1}],"_eQualifiedClassName":"http:\/\/\/com\/ibm\/team\/core\/services.ecore:ComplexArrayDataArg","type":"COMPLEX"},"method":"getReleases","_eQualifiedClassName":"http:\/\/\/com\/ibm\/team\/core\/services.ecore:Response","interface":"com.ibm.team.workitem.common.internal.rest.IWorkItemRestService"},"_eQualifiedClassName":"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/:Body"}}
Then I use it to generate my content with json type:
{ "projectAreaItemId": "_4tIsgOIaEeWAtoLsweCfow","releases":[{"creationDate":1436583600000, "description":"Desc2","name":"1.2.6","_eQualifiedClassName":"com.ibm.team.workitem.rest.dto:ReleaseDTO", "isArchived":false,"isFiltered":false,"itemId":"_mwyCAOuZEeWQNIfNlw2urw","sequenceValue":1,"isModified":true}]}
And use POST method to send it to the same URI for GET
<server:port>/ccm /service/com.ibm.team.workitem.common.internal.rest.IWorkItemRestService/releases?includeArchived=<true_or_false>&projectAreaItemId=<project_area_uuid>
Then system report system internal error. I checked the log, which indicated POST request triggered something wrong inside RTC. And I have tried to remove my content with "{ }", the error is the same. So, it should not be my content which trigger the issue.
I am wondering any update for this interface? Maybe it is not supported anymore? or there is BUG here?
CRJAZ1163E NullPointerException error occurred while processing a POST request for com.ibm.team.workitem.common.internal.rest.IWorkItemRestService.postReleases(). CRJAZ1170I The request was made by user "ming_zhou" from "10.100.24.141".CRJAZ1166I The stack trace hash is A70752CD706E8465712DDD0A7B667274381C7DB2.
Throwable
java.lang.NullPointerException
at java.io.StringReader.(StringReader.java:62)
at com.ibm.team.workitem.service.internal.rest.WorkItemRestService.postReleases(WorkItemRestService.java:3129)
at sun.reflect.GeneratedMethodAccessor50279.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)