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