Java 无法使用Rally Rest API从TestCase上的TestSets集合中删除TestSet

Java 无法使用Rally Rest API从TestCase上的TestSets集合中删除TestSet,java,api,rest,collections,rally,Java,Api,Rest,Collections,Rally,对TestSets属性的添加可以工作,但不能进行减法。如下所示清除TestSets属性是不可操作的 JsonObject updates = new JsonObject(); updates.add("TestSets", newTestSets); UpdateRequest updateRequest = new UpdateRequest(ref, updates) 但由于添加工作,我知道该属性不是只读的 我使用Chrome Advanced Rest Client和此端点和负载在一个

对TestSets属性的添加可以工作,但不能进行减法。如下所示清除TestSets属性是不可操作的

JsonObject updates = new JsonObject();
updates.add("TestSets", newTestSets);
UpdateRequest updateRequest = new UpdateRequest(ref, updates)

但由于添加工作,我知道该属性不是只读的

我使用Chrome Advanced Rest Client和此端点和负载在一个测试用例上测试了从测试集集合中删除测试集,它成功了:

https://rally1.rallydev.com/slm/webservice/v2.0/testcase/12458269829/testsets/remove

{"CollectionItems":[{"_ref":"https://rally1.rallydev.com/slm/webservice/v2.0/testset/19255956341"}]}

我使用Rally Java toolkit进行了尝试,它需要gson-2.2.4.jar。该版本的gson没有
remove
方法。 gson-2.3.1具有
删除方法

我将gson-2.3.1与一段代码一起使用,该代码试图从testcase的TestSets集合中删除testset

现在,autocomplete显示“remove”,并且没有“no method”错误,但是从集合中删除元素会以静默方式失败。我提交了一个bug

以下是我测试的代码:

public class RemoveTestSetFromCollection {

    public static void main(String[] args) throws URISyntaxException, IOException {


        String host = "https://rally1.rallydev.com";
        String apiKey = "_abc123";
        String workspaceRef = "/workspace/12352608129";
        String applicationName = "RestExample_updateTestSetsOnTC";


        RallyRestApi restApi = new RallyRestApi(new URI(host),apiKey);
        restApi.setApplicationName(applicationName);

        try {
            String setID = "TS25";
            String testid = "TC3";
            QueryRequest  tsRequest = new QueryRequest("TestSet");
            tsRequest.setWorkspace(workspaceRef);
            tsRequest.setQueryFilter(new QueryFilter("FormattedID", "=", setID));
            QueryResponse tsQueryResponse = restApi.query(tsRequest);
            if(tsQueryResponse.getTotalResultCount() == 0){
                System.out.println("Cannot find tag: " + setID);
                return;
            }
            JsonObject tsJsonObject = tsQueryResponse.getResults().get(0).getAsJsonObject();
            String tsRef = tsJsonObject.get("_ref").getAsString();
            System.out.println(tsRef);

            QueryRequest testCaseRequest = new QueryRequest("TestCase");
            testCaseRequest.setWorkspace(workspaceRef);
            testCaseRequest.setFetch(new Fetch("FormattedID", "Name", "TestSets"));
            testCaseRequest.setQueryFilter(new QueryFilter("FormattedID", "=",  testid));
            QueryResponse testCaseQueryResponse = restApi.query(testCaseRequest);;

            if (testCaseQueryResponse.getTotalResultCount() == 0) {
                System.out.println("Cannot find test case : " + testid);
                return;
            }
            JsonObject testCaseJsonObject = testCaseQueryResponse.getResults().get(0).getAsJsonObject();
            String testCaseRef = testCaseJsonObject.get("_ref").getAsString();
            System.out.println(testCaseRef);

            int numberOfTestSets = testCaseJsonObject.getAsJsonObject("TestSets").get("Count").getAsInt();
            System.out.println(numberOfTestSets + " testset(s) on " + testid);
            QueryRequest testsetCollectionRequest = new QueryRequest(testCaseJsonObject.getAsJsonObject("TestSets"));
            testsetCollectionRequest.setFetch(new Fetch("FormattedID"));
            JsonArray testsets = restApi.query(testsetCollectionRequest).getResults();

            for (int j=0;j<numberOfTestSets;j++){
                System.out.println("FormattedID: " + testsets.get(j).getAsJsonObject().get("FormattedID"));
            }

            testsets.remove(tsJsonObject);
            JsonObject testCaseUpdate = new JsonObject();
            testCaseUpdate.add("TestSets", testsets);
            UpdateRequest updateTestCaseRequest = new UpdateRequest(testCaseRef,testCaseUpdate);
            UpdateResponse updateTestCaseResponse = restApi.update(updateTestCaseRequest);
            if (updateTestCaseResponse.wasSuccessful()) {
                QueryRequest testsetCollectionRequest2 = new QueryRequest(testCaseJsonObject.getAsJsonObject("TestSets"));
                testsetCollectionRequest2.setFetch(new Fetch("FormattedID"));
                JsonArray testsetsAfterUpdate = restApi.query(testsetCollectionRequest2).getResults();
                int numberOfTestSetsAfterUpdate = restApi.query(testsetCollectionRequest2).getResults().size();
                System.out.println("Successfully updated : " + testid + " TestSets after update: " + numberOfTestSetsAfterUpdate);
                for (int j=0;j<numberOfTestSetsAfterUpdate;j++){
                    System.out.println("FormattedID: " + testsetsAfterUpdate.get(j).getAsJsonObject().get("FormattedID"));
                }
            }
        } finally {
            restApi.close();
        }

    }
}
公共类RemoveTestSetFromCollection{
公共静态void main(字符串[]args)抛出URISyntaxException、IOException{
字符串主机=”https://rally1.rallydev.com";
字符串apiKey=“_abc123”;
字符串workspaceRef=“/workspace/12352608129”;
字符串applicationName=“RestExample\u updateTestSetContenc”;
RallyRestApi restApi=新的RallyRestApi(新URI(主机),apiKey);
restApi.setApplicationName(applicationName);
试一试{
字符串setID=“TS25”;
字符串testid=“TC3”;
QueryRequest tsRequest=新的QueryRequest(“测试集”);
tsRequest.setWorkspace(workspaceRef);
setQueryFilter(新的QueryFilter(“FormattedID”,“=”,setID));
QueryResponse tsQueryResponse=restApi.query(tsRequest);
if(tsQueryResponse.getTotalResultCount()==0){
System.out.println(“找不到标记:+setID”);
回来
}
JsonObject tsJsonObject=tsQueryResponse.getResults().get(0.getAsJsonObject();
字符串tsRef=tsJsonObject.get(“\u ref”).getAsString();
系统输出打印项次(tsRef);
QueryRequest testCaseRequest=新的QueryRequest(“TestCase”);
setWorkspace(workspaceRef);
setFetch(新的Fetch(“FormattedID”、“Name”、“testset”);
setQueryFilter(新的QueryFilter(“FormattedID”,“=”,testid));
QueryResponse testCaseQueryResponse=restApi.query(testCaseRequest);;
if(testCaseQueryResponse.getTotalResultCount()==0){
System.out.println(“找不到测试用例:+testid”);
回来
}
JsonObject testCaseJsonObject=testCaseQueryResponse.getResults().get(0.getAsJsonObject();
字符串testCaseRef=testCaseJsonObject.get(“_ref”).getAsString();
System.out.println(testCaseRef);
int numberOfTestSets=testCaseJsonObject.getAsJsonObject(“TestSets”).get(“Count”).getAsInt();
System.out.println(numberOfTestSets+“+testid”上的“测试集”);
QueryRequest testsetCollectionRequest=新的QueryRequest(testCaseJsonObject.getAsJsonObject(“测试集”);
setFetch(newfetch(“FormattedID”);
JsonArray testsets=restApi.query(testsetCollectionRequest.getResults();
对于(int j=0;j