Java tutorial
/** * Project: ocean.client.java.basic * * File Created at 2011-10-26 * $Id: AliNHttpRequstExecutionHandler.java 311300 2013-12-23 06:15:28Z yichun.wangyc $ * * Copyright 2008 Alibaba.com Croporation Limited. * All rights reserved. * * This software is the confidential and proprietary information of * Alibaba Company. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Alibaba.com. */ package com.alibaba.openapi.client.rpc; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.nio.ContentDecoder; import org.apache.http.nio.IOControl; import org.apache.http.nio.entity.ConsumingNHttpEntity; import org.apache.http.nio.entity.ConsumingNHttpEntityTemplate; import org.apache.http.nio.entity.ContentInputStream; import org.apache.http.nio.entity.ContentListener; import org.apache.http.nio.protocol.NHttpRequestExecutionHandler; import org.apache.http.nio.util.ByteBufferAllocator; import org.apache.http.nio.util.SimpleInputBuffer; import org.apache.http.protocol.HttpContext; import com.alibaba.openapi.client.FutureCallback; import com.alibaba.openapi.client.Response; import com.alibaba.openapi.client.util.LoggerHelper; /** * Comment of AliNHttpRequstExecutionHandler * HTTP??????HTTP??HTTP?? * * ?httphttp: * policy&SDK request->HttpRequest; * httpinputStream->response->result * * ?HTTP I/O * @author jade * */ public class AliNHttpRequstExecutionHandler implements NHttpRequestExecutionHandler { public static final String CONTEXT_ATTACHMENT = "context.attachment"; private final ProtocolProvider protocolProvider; private final ByteBufferAllocator allocator; public AliNHttpRequstExecutionHandler(ProtocolProvider protocolProvider, ByteBufferAllocator allocator) { this.protocolProvider = protocolProvider; this.allocator = allocator; } public void initalizeContext(HttpContext context, Object attachment) { context.setAttribute(CONTEXT_ATTACHMENT, attachment); } public HttpRequest submitRequest(HttpContext context) { //System.out.println("AliNHttpRequstExecutionHandler submitRequest"); InvokeContext invokeContext = (InvokeContext) context.getAttribute(CONTEXT_ATTACHMENT); if (invokeContext.isCompleted()) return null; HttpRequest request = protocolProvider.getRequestBuilder(invokeContext.getPolicy().getRequestProtocol()) .getHttpRequest(invokeContext); LoggerHelper.getClientLogger().finer("--submit Request--" + request.toString()); return request; } //,,contentAvailable? public ConsumingNHttpEntity responseEntity(final HttpResponse httpResponse, final HttpContext context) throws IOException { //System.out.println("AliNHttpRequstExecutionHandler responseEntity"); LoggerHelper.getClientLogger().finer("Enter request handler's response entity."); final InvokeContext invokeContext = (InvokeContext) context.getAttribute(CONTEXT_ATTACHMENT); final Response response = protocolProvider .getResponseParser(invokeContext.getPolicy().getResponseProtocol()) .initResponse(httpResponse, invokeContext); //ConsumingNHttpEntityTemplateContentListener?? ContentListener contentListener = new ContentListener() { private final SimpleInputBuffer buffer = new SimpleInputBuffer(2048, allocator); @SuppressWarnings("unchecked") public void finished() { InputStream istream = new ContentInputStream(this.buffer); protocolProvider.getResponseParser(invokeContext.getPolicy().getResponseProtocol()) .parseResponse(httpResponse, istream, response, invokeContext); invokeContext.completed(); if (response.getException() != null) { invokeContext.failed(response.getException()); } else { try { ((FutureCallback<Object>) invokeContext.getCallback()).completed(response.getResult()); } catch (RuntimeException e) { invokeContext.failed(e); } } } //TODO ??,?? public void contentAvailable(ContentDecoder decoder, IOControl ioctrl) throws IOException { this.buffer.consumeContent(decoder); LoggerHelper.getClientLogger().finer("content Listener " + this.buffer.available()); } }; HttpEntity entity = httpResponse.getEntity(); return new ConsumingNHttpEntityTemplate(entity, contentListener); } public void handleResponse(HttpResponse httpResponse, HttpContext context) throws IOException { //System.out.println("AliNHttpRequstExecutionHandler handleResponse"); //final InvokeContext invokeContext = (InvokeContext) context.getAttribute(CONTEXT_ATTACHMENT); //LoggerHelper.getClientLogger().finer("Enter request handler's handleResponse."); } public void finalizeContext(HttpContext context) { context.removeAttribute(CONTEXT_ATTACHMENT); } }