Java 使用Rally api v2.0,我在查询订阅对象时无法访问工作区列表

Java 使用Rally api v2.0,我在查询订阅对象时无法访问工作区列表,java,api,rally,toolkit,wsapi,Java,Api,Rally,Toolkit,Wsapi,以下是我用来查询“订阅”并返回我要访问的工作区的引用的代码: public static String query_for_workspace(String ws, RallyRestApi r) throws IOException{ String Wspace_ref=null; //Read Subscription QueryRequest subscriptionRequest = new QueryRequest("Subscriptions");

以下是我用来查询“订阅”并返回我要访问的工作区的引用的代码:

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;
}
这段代码使用的是1.xapi。如何访问2.x中的工作区列表


谢谢大家!

在Rally api v2.0中,由于性能原因,在同一响应中返回子集合的功能被删除。在v2.0中,获取集合将返回一个对象,该对象包含计数和从中获取集合数据的url

在较旧版本的WS-API中,某些fetch列表创建了大量递归调用,并且fetch中包含的所有集合使得调用非常昂贵。在WSAPIv2.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;
}
工作区(字符串ws,RallyRestApi r)的公共静态字符串查询抛出IOException{ 字符串Wspace_ref=null; //阅读订阅 QueryRequest subscriptionRequest=新的QueryRequest(“订阅”); QueryResponse subscriptionQueryResponse=r.query(subscriptionRequest); String subName=subscriptionQueryResponse.getResults().get(0.getAsJsonObject().get(“Name”).toString(); System.out.println(“读取订阅:+subName”); //抓取工作区集合 QueryRequest workspaceRequest=新的QueryRequest(subscriptionQueryResponse.getResults().get(0).getAsJsonObject().getAsJsonObject(“工作空间”); setFetch(新的Fetch(“Name”,“_ref”)); JsonArray myWorkspaces=r.query(workspaceRequest).getResults(); //遍历工作区以找到正确的工作区 字符串workspaceName=“”; 对于(int i=0;i
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;
}