Package org.OpenGeoPortal.Proxy

Source Code of org.OpenGeoPortal.Proxy.GenericProxyImpl

package org.OpenGeoPortal.Proxy;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.OpenGeoPortal.Utilities.Http.OgpHttpClient;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

public class GenericProxyImpl implements GenericProxy {
  final Logger logger = LoggerFactory.getLogger(this.getClass());
  private HttpEntity responseEntity;
  @Autowired @Qualifier("httpClient.pooling")
  protected OgpHttpClient ogpHttpClient;
 
  public void proxyRequest(HttpServletRequest request,
      HttpServletResponse response, String remoteUrl){
    this.abstractRequest(request, response, remoteUrl, "copy");
  }
 
  public void abstractRequest(HttpServletRequest request, HttpServletResponse response, String remoteUrl, String action){
    HttpClient httpclient = ogpHttpClient.getHttpClient();
    try {

      HttpGet internalRequest = new HttpGet(remoteUrl);
      HttpResponse internalResponse = httpclient.execute(internalRequest);

      this.checkStatus(internalResponse, response);

      if (action.equalsIgnoreCase("copy")){
        this.copyResponse(internalResponse, response);
      } else if (action.equalsIgnoreCase("stream")){
        responseEntity = internalResponse.getEntity();
      }
   
     
    } catch (Exception e){
      logger.error("generic proxy failed");
      logger.error(e.getMessage());
      try {
        response.getOutputStream().print(e.getMessage());
      } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
      e.getStackTrace();
    } finally {
      // When HttpClient instance is no longer needed,
      // shut down the connection manager to ensure
      // immediate deallocation of all system resources
      //httpclient.getConnectionManager().shutdown();
    }
  }
 
  public InputStream getContentStream(HttpServletRequest request, HttpServletResponse response, String remoteUrl){
    this.abstractRequest(request, response, remoteUrl, "stream");
    try {
      return this.responseEntity.getContent();
    } catch (IllegalStateException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return null;
  }
 
  public void checkStatus (HttpResponse internalResponse, HttpServletResponse externalResponse) throws IOException{
    if (internalResponse.getStatusLine().getStatusCode() != 200){
      externalResponse.sendError(internalResponse.getStatusLine().getStatusCode());
      logger.error("Status returned: " + internalResponse.getStatusLine());
    }
  }
 
  public void copyHeaders (HttpResponse internalResponse, HttpServletResponse externalResponse){
    Header[] headers = internalResponse.getAllHeaders();
    for (int i = 0; i < headers.length; i++) {
       //System.out.println(headers[i]);
      if (!headers[i].getName().equals("Content-Disposition")){
        externalResponse.setHeader(headers[i].getName(), headers[i].getValue());
      }
    }
  }
 
  public void copyResponse(HttpResponse internalResponse, HttpServletResponse externalResponse) throws IOException{
    HttpEntity entity = internalResponse.getEntity();
    //System.out.println(entity.getContentType());
   
    OutputStream outputStream = externalResponse.getOutputStream();
    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
    BufferedInputStream bufferedInputStream = new BufferedInputStream(entity.getContent());

    try {
      int currentBytes;
      while ((currentBytes = bufferedInputStream.read()) != -1) {
         //System.out.println("Receiving " + currentBytes + " bytes");
        bufferedOutputStream.write(currentBytes);
      }
    } catch (Exception e){
      e.getStackTrace();
      }
    finally {
      try {
        bufferedInputStream.close();
      } finally {
        bufferedOutputStream.close();
      }
    }

    EntityUtils.consume(entity);
  }
}
TOP

Related Classes of org.OpenGeoPortal.Proxy.GenericProxyImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.