使用Java中的Rally Rest客户端创建BE Initiative、BE特性和CPM特性
我们正在尝试自动化从一个Rally工作区到另一个工作区的项目迁移。一切似乎都很好,就像我们能够将项目和相关版本/迭代/用户故事/任务从一个工作区迁移到另一个工作区一样。 但是在尝试迁移BE Initiative/BE Feature/CPM Feature时,我们得到了一些与空指针异常相关的异常,但是我们在响应中得到的错误似乎没有提供太多信息 代码示例如下:使用Java中的Rally Rest客户端创建BE Initiative、BE特性和CPM特性,java,rest,rally,Java,Rest,Rally,我们正在尝试自动化从一个Rally工作区到另一个工作区的项目迁移。一切似乎都很好,就像我们能够将项目和相关版本/迭代/用户故事/任务从一个工作区迁移到另一个工作区一样。 但是在尝试迁移BE Initiative/BE Feature/CPM Feature时,我们得到了一些与空指针异常相关的异常,但是我们在响应中得到的错误似乎没有提供太多信息 代码示例如下: String oldProjectObjectId = "12345"; String newProjectObject
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]);
}
}
}
}
因此,现在我没有创建初始主题,而是尝试仅在新工作区中创建主题,但出现以下错误-
请求的类型名称\“/portfolioitem/theme\”未知
我传递给CreateResponse函数的对象是-
{"Name":"xyz","Project":"/project/1804","Workspace":"/workspace/139"}
CreateInraly函数的代码如下所述-
public CreateResponse createInRally( String query, JsonObject object) throws IOException{
CreateRequest createRequest = new CreateRequest(query, object);
CreateResponse createResponse = restApi.create(createRequest);
return createResponse;
}
因此,这肯定是web服务api中的一个错误。对于未处理的空指针,您永远不会得到500个响应。我最初的猜测是,当您创建新对象时,其中的某个字段仍在引用旧工作区中的对象,而当我们尝试正确连接所有关联时,它无法读取新工作区中的其中一个对象。你能提供更多关于你要创建的实际对象的信息吗?具体来说,您包括哪些对象关系(在新工作区中可能无效)?由于未传递我们试图在其中创建公文包项目的工作区的对象id,因此发生了未知类型错误。 因此,在修改createInraly函数以包含工作区对象id之后,我们能够创建initiative portfolio项。 修改后的createInraly函数如下所示-
CreateRequest createRequest = new CreateRequest(query, object);
createRequest.addParam("workspace", "/workspace/1333333333");
CreateResponse createResponse = restApi.create(createRequest);
return createResponse;
你能再具体一点吗?上面哪一行是错误的?很抱歉没有在问题本身中指出这一点。当尝试执行
if(beInitiativeCreateResponse.wassucccessful())
时,它将执行else块,从而执行else{String[]errorList;errorList=beInitiativeCreateResponse.getErrors();for(int j=0;j
在问题中也更新了相同的内容。@KyleMorse请您调查一下这个问题,因为我已经用信息更新了它。必需。谢谢您的回答。我已经用必需的信息更新了问题。在更新1标题下。
CreateRequest createRequest = new CreateRequest(query, object);
createRequest.addParam("workspace", "/workspace/1333333333");
CreateResponse createResponse = restApi.create(createRequest);
return createResponse;