这是我用来查询“订阅”,然后返回我要访问的工作空间的引用的代码:
public static String query_for_workspace(String ws, RallyRestApi r) throws IOException{
String Wspace_ref=null;
//Read Subscription
QueryRequest subscriptionRequest = new QueryRequest("Subscriptions");
subscriptionRequest.setFetch(new Fetch("Name", "Workspaces"));
QueryResponse subscriptionQueryResponse = r.query(subscriptionRequest);
String subName = subscriptionQueryResponse.getResults().get(0).getAsJsonObject().get("Name").toString();
System.out.println("Read Subscription: " + subName);
// Grab Workspaces Collection
JsonArray myWorkspaces = subscriptionQueryResponse.getResults().get(0).getAsJsonObject().get("Workspaces").getAsJsonArray();
// iterates through all workspaces and fetch 'ref' (string attribute) of the useful workspace
for (int i=0; i<myWorkspaces.size(); i++) {
JsonObject workspaceObject = myWorkspaces.get(i).getAsJsonObject();
String workspaceRef = workspaceObject.get("_ref").getAsString();
GetRequest workspaceRequest = new GetRequest(workspaceRef);
workspaceRequest.setFetch(new Fetch("Name"));
GetResponse workspaceResponse = r.get(workspaceRequest);
JsonObject workspaceObj = workspaceResponse.getObject();
String workspaceName = workspaceObj.get("Name").getAsString();
if(workspaceName.equals(ws)){
System.out.printf("Workspace found ==> %s\n", workspaceName);
Wspace_ref=workspaceRef;
}
}
return Wspace_ref;
}
错误来自此行:
JsonArray myWorkspaces=subscriptionQueryResponse.getResults().get(0).getAsJsonObject().get("Workspaces").getAsJsonArray();
此代码与1.x API配合使用。如何访问2.x中的工作区列表?
谢谢!
最佳答案
在Rally api v2.0中,出于性能原因,删除了在同一响应中返回子集合的功能。在v2.0中,获取集合将返回一个对象,该对象带有从中获取集合数据的count和url。
在旧版本的WS API中,某些提取列表创建了许多递归调用,并且提取中包含的所有集合使调用相当昂贵。在WS API v2.0中,不会发生这种情况,因为必须进行单独的调用才能获取集合的对象。
因此,我相信,在这种情况下,如果将代码更新为:
public static String query_for_workspace(String ws, RallyRestApi r) throws IOException{
String Wspace_ref=null;
//Read Subscription
QueryRequest subscriptionRequest = new QueryRequest("Subscriptions");
QueryResponse subscriptionQueryResponse = r.query(subscriptionRequest);
String subName = subscriptionQueryResponse.getResults().get(0).getAsJsonObject().get("Name").toString();
System.out.println("Read Subscription: " + subName);
//Grab Workspaces Collection
QueryRequest workspaceRequest = new QueryRequest(subscriptionQueryResponse.getResults().get(0).getAsJsonObject().getAsJsonObject("Workspaces"));
workspaceRequest.setFetch(new Fetch("Name", "_ref”));
JsonArray myWorkspaces = r.query(workspaceRequest).getResults();
//Iterate through the Workspaces to find the correct one
String workspaceName = "";
for (int i=0; i<myWorkspaces.size(); i++){
workspaceName = myWorkspaces.get(i).getAsJsonObject().get("Name").getAsString();
if(workspaceName.equals(ws)){
System.out.printf("Workspace found ==> %s\n", workspaceName);
Wspace_ref = myWorkspaces.get(i).getAsJsonObject().get("_ref").getAsString();
}
}
return Wspace_ref;
}
那应该提供您需要的参考。