@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { traceRequest(req); SolrQuery query = buildSolrQuery(req); if (query == null) { handleException(resp, "Invalid search request", null, HttpServletResponse.SC_BAD_REQUEST); return; } try { QueryResponse solrResponse = SearchActivator.getInstance().getSolrServer().query(query); writeResponse(query, req, resp, solrResponse); } catch (SolrServerException e) { LogHelper.log(e); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } }
/** Writes the response to the search query to the HTTP response's output stream. */ private void writeResponse( SolrQuery query, HttpServletRequest httpRequest, HttpServletResponse httpResponse, QueryResponse queryResponse) throws IOException { SolrCore core = SearchActivator.getInstance().getSolrCore(); // this seems to be the only way to obtain the JSON response representation SolrQueryRequest solrRequest = new LocalSolrQueryRequest(core, query.toNamedList()); SolrQueryResponse solrResponse = new SolrQueryResponse(); // bash the query in the response to remove user info NamedList<Object> params = (NamedList<Object>) queryResponse.getHeader().get("params"); // $NON-NLS-1$ params.remove(CommonParams.Q); params.add(CommonParams.Q, httpRequest.getParameter(CommonParams.Q)); NamedList<Object> values = queryResponse.getResponse(); String contextPath = httpRequest.getContextPath(); if (contextPath.length() > 0) setSearchResultContext(values, contextPath); solrResponse.setAllValues(values); QueryResponseWriter writer = core.getQueryResponseWriter("json"); // $NON-NLS-1$ writer.write(httpResponse.getWriter(), solrRequest, solrResponse); }