2014-10-11 8 views
1

여기에 '구독'을 쿼리하고 액세스하려는 작업 영역의 참조를 반환하는 데 사용하는 코드가 있습니다. 작업 영역 목록에 액세스 할 수 없습니다.랠리 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"); 
    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에서 작업 공간 목록에 어떻게 액세스합니까?

감사합니다.

답변

3

랠리 api v2.0에서는 성능상의 이유로 같은 응답으로 하위 컬렉션을 반환하는 기능이 제거되었습니다. v2.0에서 컬렉션을 가져 오면 컬렉션 데이터를 가져올 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; 
} 

:

그래서, 나는 당신이 당신의 코드를 업데이트 할 경우이 상황에서, 생각합니다.