All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ksyun.ks3.service.response.Ks3WebServiceResponse Maven / Gradle / Ivy

package com.ksyun.ks3.service.response;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.xml.sax.helpers.DefaultHandler;

import com.ksyun.ks3.dto.Ks3Result;
import com.ksyun.ks3.exception.Ks3ClientException;
import com.ksyun.ks3.http.HttpHeaders;

/**
 * @author lijunwei[[email protected]]  
 * 
 * @date 2014年10月17日 下午2:40:32
 * 
 * @description KS3 http response处理器
 **/
public abstract class Ks3WebServiceResponse extends DefaultHandler{
	private HttpRequest httpRequest;
	private HttpResponse httpResponse;
	protected abstract T abstractHandleResponse();
	public T handleResponse(){
		T ret = abstractHandleResponse();
		if(ret instanceof Ks3Result){
			((Ks3Result)ret).setRequestId(this.getRequestId());
			((Ks3Result)ret).setOriginRequest(httpRequest);
			((Ks3Result)ret).setOriginResponse(httpResponse);
		}
		return ret;
	}
	public HttpRequest getHttpRequest() {
		return httpRequest;
	}

	public void setHttpRequest(HttpRequest httpRequest) {
		this.httpRequest = httpRequest;
	}

	public HttpResponse getHttpResponse() {
		return httpResponse;
	}

	public void setHttpResponse(HttpResponse httpResponse) {
		this.httpResponse = httpResponse;
	}
	protected Header[] getHeaders(String key)
	{
		return this.httpResponse.getHeaders(key);
	}
	protected String getHeader(String key)
	{
		Header[] headers = getHeaders(key);
		if(headers.length>0)
		{
			return headers[0].getValue();
		}
		return "";
	}
	protected InputStream getContent()
	{
		try {
			return this.httpResponse.getEntity().getContent();
		} catch (Exception e) {
			e.printStackTrace();
			throw new Ks3ClientException("无法读取http response的body("+e+")",e);
		}
	}
	public String getRequestId()
	{
		return this.getHeader(HttpHeaders.RequestId.toString());
	}
	protected void closeRequestInputStream() throws IOException{
		if(this.httpRequest == null)
			return;
		HttpEntity entity = null;
		if(httpRequest instanceof HttpPut){
			entity = ((HttpPut)httpRequest).getEntity();
		}else if(httpRequest instanceof HttpPost){
			entity = ((HttpPost)httpRequest).getEntity();
		}
		if(entity != null){
			InputStream input = entity.getContent();
			if(input!=null)
				input.close();
		}
	}
	protected void closeResponseInputStream() throws IOException{
		if(this.httpResponse ==null)
			return;
		HttpEntity entity = this.httpResponse.getEntity();
		if(entity != null){
			InputStream input = null;
			try{
				input = entity.getContent();
			}catch(IllegalStateException e){
				input = null;
			}
			if(input != null)
				input.close();
		}
	}
	protected void abortRequest(){
		if(this.httpRequest!=null&&this.httpRequest instanceof HttpRequestBase)
			((HttpRequestBase) this.httpRequest).abort();
	}
	/**
	 * 
	 * @return 期望的 http status
	 */
	public abstract int[] expectedStatus();
	public void onFinally(){
		try {
			closeRequestInputStream();
		} catch (IOException e) {
			LogFactory.getLog(this.getClass()).error("handle response on finally close request inputstream error ,"+e.getMessage());
		}
		try {
			closeResponseInputStream();
		} catch (IOException e) {
			LogFactory.getLog(this.getClass()).error("handle response on finally close response inputstream error ,"+e.getMessage());
		}
		abortRequest();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy