Author: ehatcher
Date: Sun Dec 21 02:05:06 2008
New Revision: 728415
URL: http://svn.apache.org/viewvc?rev=728415&view=rev
Log:
Fix issue with AnalysisRequestHandlers response choking up QueryResponse
Modified:
lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java
Modified:
lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java?rev=728415&r1=728414&r2=728415&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java
(original)
+++
lucene/solr/trunk/contrib/velocity/src/main/java/org/apache/solr/request/VelocityResponseWriter.java
Sun Dec 21 02:05:06 2008
@@ -20,6 +20,7 @@
import org.apache.solr.common.util.NamedList;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.SolrResponseBase;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
@@ -47,12 +48,31 @@
context.put("request", request);
+ // Turn the SolrQueryResponse into a SolrResponse.
+ // QueryResponse has lots of conveniences suitable for a view
+ // Problem is, which SolrResponse class to use?
+ // One patch to SOLR-620 solved this by passing in a class name as
+ // as a parameter and using reflection and Solr's class loader to
+ // create a new instance. But for now the implementation simply
+ // uses QueryResponse, and if it chokes in a known way, fall back
+ // to bare bones SolrResponseBase.
+ // TODO: Can this writer know what the handler class is? With
echoHandler=true it can get its string name at least
SolrResponse rsp = new QueryResponse();
- rsp.setResponse(new
EmbeddedSolrServer(request.getCore()).getParsedResponse(request, response));
+ NamedList<Object> parsedResponse = new
EmbeddedSolrServer(request.getCore()).getParsedResponse(request, response);
+ try {
+ rsp.setResponse(parsedResponse);
+
+ // page only injected if QueryResponse works
+ context.put("page",new PageTool(request,response)); // page tool only
makes sense for a SearchHandler request... *sigh*
+ } catch (ClassCastException e) {
+ // known edge case where QueryResponse's extraction assumes "response"
is a SolrDocumentList
+ // (AnalysisRequestHandler emits a "response")
+ rsp = new SolrResponseBase();
+ rsp.setResponse(parsedResponse);
+ }
context.put("response", rsp);
// Velocity context tools - TODO: make these pluggable
- context.put("page",new PageTool(request,response));
context.put("esc", new EscapeTool());
context.put("sort", new SortTool());
context.put("number", new NumberTool());