Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
titleSearchJSONServlet.java
linenumberstrue
collapsetrue
package org.dspace.app.webui.servlet;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.sql.SQLException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.stream.TransformerStreamResult;

import javaxorg.xmlapache.transformlog4j.TransformerConfigurationExceptionLogger;
import javaxorg.xmldspace.transformauthorize.TransformerExceptionAuthorizeException;
import javaxorg.xmldspace.transformcore.TransformerFactoryContext;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.apache.log4j.Logger;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.TokenMgrError;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.dspace.app.webui.util.JSPManager;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Bitstream;
import org.dspace.content.Bundle;
import org.dspace.content.DCValue;
import org.dspace.content.Item;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.core.LogManager;
import org.dspace.handle.HandleManager;
import org.dspace.search.CustomQueryParser;
import org.dspace.search.DSIndexer;
import org.dspace.search.DSQuery;
import org.dspace.usage.UsageEvent;
import org.dspace.utils.DSpace;

public class SearchJSONServlet extends DSpaceServlet
{
    /** log4j category */
    private static Logger log = Logger.getLogger(SearchJSONServlet.class);

    /* Create an DSpaceServlet Servlet */
   public SearchJSONServlet()
    {
        super();
    }

    protected void doDSPost(Context context, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException,
            SQLException, AuthorizeException
    {
        doDSGet(context, request, response);
    }

    protected void doDSGet(Context context, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException,
            SQLException, AuthorizeException
    {
        String pathString = request.getPathInfo();
        String queryString = request.getQueryString();

        //Build localhost solr query path
        String scheme = request.getScheme();             // http
        String serverName = "127.0.0.1";                 // Solr can only be accessed from localhost
        int serverPort = request.getServerPort
public class SearchJSONServlet extends DSpaceServlet
{
 private static final long serialVersionUID = 1L;
 /** log4j category */
 private static Logger log = Logger.getLogger(SearchJSONServlet.class);

 /**
 * Create an DSpaceServlet Servlet
 */
 public SearchJSONServlet()
 {
 super();
 }

 protected void doDSPost(Context context, HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException,
 SQLException, AuthorizeException
 {
 doDSGet(context, request, response);
 }

 protected void doDSGet(Context context, HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException,
 SQLException, AuthorizeException
 {
 String pathString = request.getPathInfo();
 String queryString = request.getQueryString();

 //Build localhost solr query path
 String scheme = request.getScheme();        // 80
    // http
   String parentContextPathserverName = "127.0.0.1";                   // ChangeSolr thiscan valueonly ifbe dspace webpages are placed in a different folder other than html service root folder
accessed from localhost
 int serverPort = request.getServerPort();        // 80
 String contextPath = "/solr";
        String servletPath = "/searchJSPUI";

        StringBuffer url =  new StringBuffer();
        url.append(scheme).append("://").append(serverName);
        if (serverPort != 80)
            url.append(":").append(serverPort);
        url.append(parentContextPath).append(contextPath).append(servletPath);
        url.append(pathString + "?");
        url.append(queryString);
        String solrPath = url.toString();

        //Get response from solr server and send it as servlet reponse
        StringBuilder jsonResponse = new StringBuilder();
        URL sorlURL = new URL(solrPath);
        URLConnection solrConnection = sorlURL.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(solrConnection.getInputStream()));
        String inputLine;
        String inputLine;
 while ((inputLine = in.readLine()) != null)
            jsonResponse.append(inputLine + "\n");
        in.close();
        StreamResult result = new StreamResult(response.getOutputStream());
        response.setHeader("Content-Length", String.valueOf(jsonResponse.length()));
        response.getOutputStream().flush();

        byte[] buf = jsonResponse.toString().getBytes();
        response.setContentLength(buf.length);
        ServletOutputStream servletOut = response.getOutputStream();
        servletOut.write(buf);
    }
}

This code captures input query string and builds a conformant SOLR query string that is send to SOLR server, it's reponse it's directly returned via result variable to reponse output stream.

...