【发布时间】:2017-12-05 19:19:03
【问题描述】:
我们正在尝试将项目从一个 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 AM PST America/洛杉矶
但重要点是在尝试迁移项目时,它的相关属性(如发布/迭代等)使用相同的 Rally 工作区,上面的代码工作得很好。
更新1:
在分析问题时,我做了以下观察 -
我尝试在其中创建 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;
}
【问题讨论】:
-
你能再具体一点吗?上面哪一行因该错误而失败?
-
很抱歉没有在问题本身中指出这一点。当尝试执行
if(beInitiativeCreateResponse.wasSuccessful())时,它会阻塞并因此执行else{ String[] errorList; errorList = beInitiativeCreateResponse.getErrors(); for (int j = 0; j < errorList.length; j++) { System.out.println(errorList[j]); }} -
在问题中也更新了同样的内容。
-
@KyleMorse 请您调查一下这个问题,因为我已经用信息更新了它。必需的。谢谢