Although setting :
queryRequest.setLimit(Integer.MAX_VALUE);
does take care of many types, it does not work for all types.
For example, types Defect and Iteration seem to return thousands of results in a single page (a single query call to Rally), while other types such as User and HierarchicalRequirement ignored that limit, and instead, forced me to use pagination (setting the Start and then a requery) to get all the results.
Here's an example of how I handle both :
// NOTE : no pagination needed for defect or iteration, but required for hierarchicalrequirement or user
QueryRequest queryRequest = new QueryRequest("hierarchicalrequirement");
queryRequest.setFetch(new Fetch(new String[] {"ObjectID", "CreationDate", "LastUpdateDate", "FormattedId"}));
queryRequest.setQueryFilter(new QueryFilter("CreationDate", ">=", "2013-01-01T07:00:00.000Z"));
queryRequest.setLimit(Integer.MAX_VALUE);
int responseTotalResultsCount = Integer.MAX_VALUE;// So we enter while loop first time
int actualResultsProcessedSoFar = 0;
// Handle both cases
while ((queryRequest.getStart()) < responseTotalResultsCount && actualResultsProcessedSoFar < responseTotalResultsCount) {
QueryResponse queryResponse = restApi.query(queryRequest);
responseTotalResultsCount = queryResponse.getTotalResultCount();// Set to correct value here
JsonArray results = queryResponse.getResults();
if (results.size() == 0) {
return;
} else {
for (JsonElement jsonElement : queryResponse.getResults()) {
// Process this particular JsonElement here
// If no pagination required, this counter lets us exit while loop
actualResultsProcessedSoFar++;
}// end for loop
}// end if (results.size() == 0)
// Setting this to handle pagination, if required
queryRequest.setStart(queryRequest.getStart() + queryRequest.getPageSize());
} // end while loop