Index: src/java/org/apache/hadoop/hbase/rest/ScannerHandler.java =================================================================== --- src/java/org/apache/hadoop/hbase/rest/ScannerHandler.java (revision 705875) +++ src/java/org/apache/hadoop/hbase/rest/ScannerHandler.java (working copy) @@ -44,7 +44,8 @@ * ScannderHandler fields all scanner related requests. */ public class ScannerHandler extends GenericHandler { - + private static final String ROWS = "rows"; + public ScannerHandler(HBaseConfiguration conf, HBaseAdmin admin) throws ServletException{ super(conf, admin); @@ -145,7 +146,7 @@ if (sr.hasNext()) { switch (ContentType.getContentType(request.getHeader(ACCEPT))) { case XML: - outputScannerEntryXML(response, sr); + outputScannerEntryXML(request, response, sr); break; case MIME: /* outputScannerEntryMime(response, sr);*/ @@ -161,25 +162,48 @@ } } - private void outputScannerEntryXML(final HttpServletResponse response, - final ScannerRecord sr) - throws IOException { - RowResult rowResult = sr.next(); - + private void outputScannerEntryXML(final HttpServletRequest request, + final HttpServletResponse response, final ScannerRecord sr) + throws IOException { // respond with a 200 and Content-type: text/xml setResponseHeader(response, 200, ContentType.XML.toString()); // setup an xml outputter + String limitString = request.getParameter(LIMIT); + int limit = 1; + if (limitString != null && limitString.length() > 0) { + limit = Integer.valueOf(limitString); + } XMLOutputter outputter = getXMLOutputter(response.getWriter()); - outputter.startTag(ROW); + boolean rows = false; - // write the row key - doElement(outputter, "name", - org.apache.hadoop.hbase.util.Base64.encodeBytes(rowResult.getRow())); + if (limit > 1) { + outputter.startTag(ROWS); + rows = true; + } - outputColumnsXml(outputter, rowResult); - outputter.endTag(); + while (limit > 0) { + RowResult rowResult = sr.next(); + outputter.startTag(ROW); + + // write the row key + doElement(outputter, "name", + org.apache.hadoop.hbase.util.Base64.encodeBytes(rowResult.getRow())); + + outputColumnsXml(outputter, rowResult); + outputter.endTag(); + + --limit; + if (!sr.hasNext()) { + break; + } + } + + if (rows) { + outputter.endTag(); + } + outputter.endDocument(); outputter.getWriter().close(); } Index: src/java/org/apache/hadoop/hbase/rest/GenericHandler.java =================================================================== --- src/java/org/apache/hadoop/hbase/rest/GenericHandler.java (revision 705875) +++ src/java/org/apache/hadoop/hbase/rest/GenericHandler.java (working copy) @@ -25,6 +25,7 @@ import java.net.URLDecoder; import java.util.Map; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; @@ -56,6 +57,8 @@ protected static final String ROW = "row"; protected static final String REGIONS = "regions"; protected static final String VERSION = "version"; + protected static final String OFFSET = "offset"; + protected static final String LIMIT = "limit"; protected final Log LOG = LogFactory.getLog(this.getClass());