Hi folks!

I created the following servlet and have trouble getting the "getTotalSize"
method to work (environment: Jackrabbit 2.14.0, Java 7).

///////////////////////////////////////////////////////////////////////////////

import java.io.IOException;
import java.io.PrintWriter;
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.jackrabbit.api.query.JackrabbitQueryResult;

public class QueryResultTotalSize extends HttpServlet {

  protected void doPost(HttpServletRequest request,
                        HttpServletResponse response)
                 throws ServletException, IOException {

    PrintWriter out = response.getWriter();
    String queryStatement = request.getParameter("queryStatement");
    String queryLanguage = request.getParameter("queryLanguage");

    try {
      ServletContext jackrabbitCtx =
        this.getServletContext().getContext("/jackrabbit");

      Repository repository =
        (Repository)jackrabbitCtx.getAttribute(Repository.class.getName());

      Session session = repository.login(
        new SimpleCredentials("admin", "admin".toCharArray()), "default"
      );

      QueryManager queryManager = session.getWorkspace().getQueryManager();
      Query query = queryManager.createQuery(queryStatement, queryLanguage);
      query.setLimit(1);
      QueryResult result = query.execute();

      // variant 1: compile time error (method getTotalSize not found)
      // int totalSize = result.getTotalSize();

      // variant 2: runtime error (ClassCastException)
      // int totalSize = ((JackrabbitQueryResult)result).getTotalSize();

      out.println(totalSize);
      session.logout();
    }
    catch ( Exception e ) {
      e.printStackTrace();
    }
  }
}

///////////////////////////////////////////////////////////////////////////////

With variant 1 I get a compiler error:

  cannot find symbol
    symbol:   method getTotalSize()
    location: variable result of type javax.jcr.query.QueryResult

With variant 2 I get a runtime error:

  java.lang.ClassCastException: \
    org.apache.jackrabbit.core.query.lucene.SingleColumnQueryResult \
    cannot be cast to org.apache.jackrabbit.api.query.JackrabbitQueryResult

I have also tried other casting variants, but all my attempts result in a
ClassCastException.

Is there anyone out there who can enlighten me?

Thanks.

        Ronald Appelfelder

Reply via email to