使用Java中的Rally Rest Client创建BE Initiative,BE Feature和CPM功能

问题描述 投票:0回答:2

我们正在尝试将项目迁移从一个Rally工作区自动迁移到其他工作区。一切似乎工作得很好,就像我们能够将项目和相关版本/迭代/用户事务/任务从一个工作区迁移到另一个工作区。但是在尝试迁移BE Initiative / BE Feature / CPM Feature时,我们得到了一些与Null Pointer异常相关的异常,但我们在Response中得到的错误似乎没有提供太多信息。

代码示例是 -

    String oldProjectObjectId = "12345";
    String  newProjectObjectId = "67890";

    String oldRallyWorkspaceObjectId = "32145";
    String newRallyWorkspaceObjectId = "67894";
    QueryResponse beInitiativeResponse = queryRally("portfolioitem/beinitiative", "/project/"+this.oldProjectObjectId, "/workspace/"+this.oldRallyWorkspaceObjectId);

    int beInitiativeCount = beInitiativeResponse.getTotalResultCount();

    if(beInitiativeCount >0){

        JsonArray initiativeArray = beInitiativeResponse.getResults();

        for(int i=0; i< initiativeArray.size();i++){        

            JsonObject beInitiativeObject = initiativeArray.get(i).getAsJsonObject();

            String oldBeInitiativeObjectId = beInitiativeObject.get("ObjectID").getAsString();
            String oldBeInitiativeName = beInitiativeObject.get("_refObjectName").getAsString();

            String owner = getObjectId(beInitiativeObject, "Owner");

            JsonObject BeInitiativeCreateObject = getJsonObject(oldBeInitiativeName, "/project/"+this.newProjectObjectId, "/workspace/"+this.newRallyWorkspaceObjectId, owner);
            CreateResponse beInitiativeCreateResponse = createInRally("portfolioitem/beinitiative", BeInitiativeCreateObject);

            if(beInitiativeCreateResponse.wasSuccessful()){
                String newBeInitiativeObjectId = beInitiativeCreateResponse.getObject().get("ObjectID").getAsString();

                String mapKey = oldBeInitiativeObjectId;
                String mapValue= newBeInitiativeObjectId;
                this.beInitiativesHashMap.put(mapKey, mapValue);
            }
            else{   
                String[] errorList;
                errorList = beInitiativeCreateResponse.getErrors();
                for (int j = 0; j < errorList.length; j++) {
                    System.out.println(errorList[j]);
                }
            }

        }
    }

queryRally和createInRally函数使用Rally rest客户端来获取和创建所需的项目以及相关的属性,如发布,迭代等。

执行CreateResponse beInitiativeCreateResponse = createInRally("portfolioitem/beinitiative", BeInitiativeCreateObject);后,当它试图执行if(beInitiativeCreateResponse.wasSuccessful())时,它会转到else块,从而打印出下面提到的错误。

发生意外的错误。 我们已经记录了这个错误,并将开始调查它。与此同时,如果您想与我们的支持团队联系,请参考以下信息: 显示java.lang.NullPointerException 2017-12-05太平洋标准时间上午11:01美国/洛杉矶

但是重要的一点是,当尝试迁移项目及其相关属性(如发布/迭代等)和相同的Rally工作区时,上面的代码就可以了。

UPDATE1:

在分析问题时,我做了以下观察 -

我正在尝试创建BeInitiative的工作空间在Portfolio items下拉列表中没有BEinitiative,Be Feature,CPM Feature选项。相反,它有主题,主动和功能选项。因此,我认为我得到了前面提到的错误。现在我对代码进行了以下更改。

CreateResponse beInitiativeCreateResponse = createInRally("portfolioitem/theme", themeCreateObject);

所以现在而不是创建BEInitiative我试图只在新的工作区创建主题,但得到以下错误 -

请求的类型名称\“/ portfolioitem / theme \”未知。

我传递给CreateResponse函数的对象是 -

{"Name":"xyz","Project":"/project/1804","Workspace":"/workspace/139"}

此外,createInRally函数的代码如下所述 -

public CreateResponse createInRally( String query, JsonObject object) throws IOException{

    CreateRequest createRequest = new CreateRequest(query, object);

    CreateResponse createResponse = restApi.create(createRequest);

    return createResponse;
}
java rest rally
2个回答
1
投票

由于未传递我们尝试创建项目组合项的工作空间的对象ID,因此发生了“未知类型”错误。因此,在修改createInRally函数以包含工作空间对象id之后,我们能够创建计划组合项。修改后的createInRally函数如下所示 -

    CreateRequest createRequest = new CreateRequest(query, object);

    createRequest.addParam("workspace", "/workspace/1333333333");

    CreateResponse createResponse = restApi.create(createRequest);

    return createResponse;

0
投票

所以这肯定是Web服务api中的一个错误。您永远不应该使用未处理的nullpointer获得500个响应。我最初的猜测是,当你创建新对象时,它上面的某个字段仍然引用旧工作区中的对象,当我们尝试正确连接所有关联时,它无法读取新工作区中的其中一个对象。您能否提供一些有关您要发送的实际对象的更多信息?具体而言,您包括哪些对象关系(在新工作区中可能无效)?

© www.soinside.com 2019 - 2024. All rights reserved.