Java tutorial
/***************************************************************************** * Copyright 2011 , UT-Battelle, LLC All rights reserved * * OPEN SOURCE LICENSE * * Subject to the conditions of this License, UT-Battelle, LLC (the * "Licensor") hereby grants to any person (the "Licensee") obtaining a copy * of this software and associated documentation files (the "Software"), a * perpetual, worldwide, non-exclusive, irrevocable copyright license to use, * copy, modify, merge, publish, distribute, and/or sublicense copies of the * Software. * * 1. Redistributions of Software must retain the above open source license * grant, copyright and license notices, this list of conditions, and the * disclaimer listed below. Changes or modifications to, or derivative works * of the Software must be noted with comments and the contributor and * organization's name. If the Software is protected by a proprietary * trademark owned by Licensor or the Department of Energy, then derivative * works of the Software may not be distributed using the trademark without * the prior written approval of the trademark owner. * * 2. Neither the names of Licensor nor the Department of Energy may be used * to endorse or promote products derived from this Software without their * specific prior written permission. * * 3. The Software, with or without modification, must include the following * acknowledgment: * * "This product includes software produced by UT-Battelle, LLC under * Contract No. DE-AC05-00OR22725 with the Department of Energy." * * 4. Licensee is authorized to commercialize its derivative works of the * Software. All derivative works of the Software must include paragraphs 1, * 2, and 3 above, and the DISCLAIMER below. * * * DISCLAIMER * * UT-Battelle, LLC AND THE GOVERNMENT MAKE NO REPRESENTATIONS AND DISCLAIM * ALL WARRANTIES, BOTH EXPRESSED AND IMPLIED. THERE ARE NO EXPRESS OR * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, * OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY PATENT, COPYRIGHT, * TRADEMARK, OR OTHER PROPRIETARY RIGHTS, OR THAT THE SOFTWARE WILL * ACCOMPLISH THE INTENDED RESULTS OR THAT THE SOFTWARE OR ITS USE WILL NOT * RESULT IN INJURY OR DAMAGE. The user assumes responsibility for all * liabilities, penalties, fines, claims, causes of action, and costs and * expenses, caused by, resulting from or arising out of, in whole or in part * the use, storage or disposal of the SOFTWARE. * * ******************************************************************************/ /** * * @author Feiyi Wang (fwang2@ornl.gov) * */ package org.esgf.solr.proxy; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.ws.http.HTTPException; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/solrproxy") public class SolrProxyController { private String solrURL = "http://localhost:8983/solr/"; private final static Logger LOG = Logger.getLogger(SolrProxyController.class); @RequestMapping(method = RequestMethod.GET) public @ResponseBody String doGet(HttpServletRequest request, HttpServletResponse response) { LOG.debug("doGet"); return relay(request, response); } @RequestMapping(method = RequestMethod.POST) public @ResponseBody String doPost(HttpServletRequest request, HttpServletResponse response) { LOG.debug("doPost"); return relay(request, response); } private String relay(HttpServletRequest request, HttpServletResponse response) { System.out.println("--TIME MEASUREMENT FOR LOADING RESULTS--"); long beginTime = System.nanoTime(); String queryString = request.getQueryString(); LOG.debug("queryString=" + queryString); String requestUri = request.getRequestURI(); LOG.debug("requestUri=" + requestUri); String urlString = solrURL + "select?" + queryString + "&wt=json"; String responseBody = null; // create an http client HttpClient client = new HttpClient(); // create a method instance GetMethod method = new GetMethod(urlString); // custom retry method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { // execute the method int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { LOG.error("Method failed: " + method.getStatusLine()); } // read the response responseBody = method.getResponseBodyAsString(); } catch (HTTPException e) { LOG.error("Fatal protocol violation"); e.printStackTrace(); } catch (IOException e) { LOG.error("Fatal transport error"); e.printStackTrace(); } finally { method.releaseConnection(); } LOG.debug("Solr URL = " + urlString); //LOG.debug("responseBody = " + responseBody); long endTime = System.nanoTime(); System.out.println("\tTotal Time: " + ((int) (endTime - beginTime)) + "ns"); System.out.println("-----------------------------------------"); return responseBody; } }