From 6f892ebbf4fd2e5028e176280a6491c208a3ef8e Mon Sep 17 00:00:00 2001 From: jinyu Date: Tue, 18 Aug 2015 23:00:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EHttpComponent4.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin4j/http/factory/HttpComponent4.java | 89 +++++++++++++++++++ .../http/factory/HttpComponent4_1.java | 68 +------------- .../http/factory/HttpComponent4_2.java | 70 +-------------- .../factory/HttpComponent4_2Response.java | 1 - .../http/weixin/WeixinRequestExecutor.java | 2 - .../foxinmy/weixin4j/mp/test/MenuTest.java | 3 +- 6 files changed, 96 insertions(+), 137 deletions(-) create mode 100644 weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4.java diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4.java new file mode 100644 index 00000000..5e90d1f9 --- /dev/null +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4.java @@ -0,0 +1,89 @@ +package com.foxinmy.weixin4j.http.factory; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpHead; +import org.apache.http.client.methods.HttpOptions; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.client.methods.HttpTrace; +import org.apache.http.entity.AbstractHttpEntity; +import org.apache.http.entity.InputStreamEntity; + +import com.foxinmy.weixin4j.http.AbstractHttpClient; +import com.foxinmy.weixin4j.http.HttpHeaders; +import com.foxinmy.weixin4j.http.HttpMethod; +import com.foxinmy.weixin4j.http.apache.MultipartEntity; +import com.foxinmy.weixin4j.http.entity.HttpEntity; +import com.foxinmy.weixin4j.util.StringUtil; + +/** + * Apache HttpComponents 4.x + * + * @className HttpComponent4 + * @author jy + * @date 2015年8月18日 + * @since JDK 1.7 + * @see + */ +public abstract class HttpComponent4 extends AbstractHttpClient { + protected static final Map methodMap; + static { + methodMap = new HashMap(); + methodMap.put(HttpMethod.GET, new HttpGet()); + methodMap.put(HttpMethod.HEAD, new HttpHead()); + methodMap.put(HttpMethod.POST, new HttpPost()); + methodMap.put(HttpMethod.PUT, new HttpPut()); + methodMap.put(HttpMethod.DELETE, new HttpDelete()); + methodMap.put(HttpMethod.OPTIONS, new HttpOptions()); + methodMap.put(HttpMethod.TRACE, new HttpTrace()); + } + + protected void addHeaders(HttpHeaders headers, HttpRequestBase uriRequest) { + if (headers != null) { + for (Iterator>> headerIterator = headers + .entrySet().iterator(); headerIterator.hasNext();) { + Entry> header = headerIterator.next(); + if (HttpHeaders.COOKIE.equalsIgnoreCase(header.getKey())) { + uriRequest.addHeader(header.getKey(), + StringUtil.join(header.getValue(), ';')); + } else { + for (String headerValue : header.getValue()) { + uriRequest.addHeader(header.getKey(), + headerValue != null ? headerValue : ""); + } + } + } + } + } + + protected void addEntity(HttpEntity entity, HttpRequestBase uriRequest) + throws IOException { + if (entity != null) { + AbstractHttpEntity httpEntity = null; + if (entity instanceof MultipartEntity) { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + entity.writeTo(os); + os.flush(); + httpEntity = new org.apache.http.entity.ByteArrayEntity( + os.toByteArray()); + os.close(); + } else { + httpEntity = new InputStreamEntity(entity.getContent(), + entity.getContentLength()); + } + httpEntity.setContentType(entity.getContentType().toString()); + ((HttpEntityEnclosingRequestBase) uriRequest).setEntity(httpEntity); + } + } +} diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java index 0fda8be7..bc1db10f 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_1.java @@ -1,45 +1,24 @@ package com.foxinmy.weixin4j.http.factory; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.InetSocketAddress; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import org.apache.http.HttpHost; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpHead; -import org.apache.http.client.methods.HttpOptions; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.client.methods.HttpTrace; import org.apache.http.conn.params.ConnRoutePNames; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.entity.AbstractHttpEntity; -import org.apache.http.entity.InputStreamEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.params.CoreProtocolPNames; -import com.foxinmy.weixin4j.http.AbstractHttpClient; import com.foxinmy.weixin4j.http.HttpClient; import com.foxinmy.weixin4j.http.HttpClientException; import com.foxinmy.weixin4j.http.HttpHeaders; -import com.foxinmy.weixin4j.http.HttpMethod; import com.foxinmy.weixin4j.http.HttpParams; import com.foxinmy.weixin4j.http.HttpRequest; import com.foxinmy.weixin4j.http.HttpResponse; -import com.foxinmy.weixin4j.http.apache.MultipartEntity; -import com.foxinmy.weixin4j.http.entity.HttpEntity; import com.foxinmy.weixin4j.model.Consts; -import com.foxinmy.weixin4j.util.StringUtil; /** * Requires Apache HttpComponents 4.2 or lower @@ -50,21 +29,12 @@ import com.foxinmy.weixin4j.util.StringUtil; * @since JDK 1.7 * @see */ -public class HttpComponent4_1 extends AbstractHttpClient implements HttpClient { +public class HttpComponent4_1 extends HttpComponent4 implements HttpClient { private final org.apache.http.client.HttpClient httpClient; - private final Map methodMap; public HttpComponent4_1() { this.httpClient = new DefaultHttpClient(); - this.methodMap = new HashMap(); - methodMap.put(HttpMethod.GET, new HttpGet()); - methodMap.put(HttpMethod.HEAD, new HttpHead()); - methodMap.put(HttpMethod.POST, new HttpPost()); - methodMap.put(HttpMethod.PUT, new HttpPut()); - methodMap.put(HttpMethod.DELETE, new HttpDelete()); - methodMap.put(HttpMethod.OPTIONS, new HttpOptions()); - methodMap.put(HttpMethod.TRACE, new HttpTrace()); } @Override @@ -106,40 +76,8 @@ public class HttpComponent4_1 extends AbstractHttpClient implements HttpClient { .register(scheme); } } - HttpHeaders headers = request.getHeaders(); - if (headers != null) { - for (Iterator>> headerIterator = headers - .entrySet().iterator(); headerIterator.hasNext();) { - Entry> header = headerIterator.next(); - if (HttpHeaders.COOKIE.equalsIgnoreCase(header.getKey())) { - uriRequest.addHeader(header.getKey(), - StringUtil.join(header.getValue(), ';')); - } else { - for (String headerValue : header.getValue()) { - uriRequest.addHeader(header.getKey(), - headerValue != null ? headerValue : ""); - } - } - } - } - HttpEntity entity = request.getEntity(); - if (entity != null) { - AbstractHttpEntity httpEntity = null; - if (entity instanceof MultipartEntity) { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - entity.writeTo(os); - os.flush(); - httpEntity = new org.apache.http.entity.ByteArrayEntity( - os.toByteArray()); - os.close(); - } else { - httpEntity = new InputStreamEntity(entity.getContent(), - entity.getContentLength()); - } - httpEntity.setContentType(entity.getContentType().toString()); - ((HttpEntityEnclosingRequestBase) uriRequest) - .setEntity(httpEntity); - } + addHeaders(request.getHeaders(), uriRequest); + addEntity(request.getEntity(), uriRequest); org.apache.http.HttpResponse httpResponse = httpClient .execute(uriRequest); response = new HttpComponent4_1Response(httpClient, httpResponse); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java index 5ba8ddbe..aeec3093 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2.java @@ -1,44 +1,21 @@ package com.foxinmy.weixin4j.http.factory; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.InetSocketAddress; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig.Builder; import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpHead; -import org.apache.http.client.methods.HttpOptions; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.client.methods.HttpTrace; -import org.apache.http.entity.AbstractHttpEntity; -import org.apache.http.entity.InputStreamEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; -import com.foxinmy.weixin4j.http.AbstractHttpClient; import com.foxinmy.weixin4j.http.HttpClient; import com.foxinmy.weixin4j.http.HttpClientException; -import com.foxinmy.weixin4j.http.HttpHeaders; -import com.foxinmy.weixin4j.http.HttpMethod; import com.foxinmy.weixin4j.http.HttpParams; import com.foxinmy.weixin4j.http.HttpRequest; import com.foxinmy.weixin4j.http.HttpResponse; -import com.foxinmy.weixin4j.http.apache.MultipartEntity; -import com.foxinmy.weixin4j.http.entity.HttpEntity; -import com.foxinmy.weixin4j.model.Consts; -import com.foxinmy.weixin4j.util.StringUtil; /** * Requires Apache HttpComponents 4.3 or higher @@ -49,21 +26,12 @@ import com.foxinmy.weixin4j.util.StringUtil; * @since JDK 1.7 * @see */ -public class HttpComponent4_2 extends AbstractHttpClient implements HttpClient { +public class HttpComponent4_2 extends HttpComponent4 implements HttpClient { private CloseableHttpClient httpClient; - private final Map methodMap; public HttpComponent4_2() { this.httpClient = HttpClients.createDefault(); - this.methodMap = new HashMap(); - methodMap.put(HttpMethod.GET, new HttpGet()); - methodMap.put(HttpMethod.HEAD, new HttpHead()); - methodMap.put(HttpMethod.POST, new HttpPost()); - methodMap.put(HttpMethod.PUT, new HttpPut()); - methodMap.put(HttpMethod.DELETE, new HttpDelete()); - methodMap.put(HttpMethod.OPTIONS, new HttpOptions()); - methodMap.put(HttpMethod.TRACE, new HttpTrace()); } @Override @@ -91,40 +59,8 @@ public class HttpComponent4_2 extends AbstractHttpClient implements HttpClient { } uriRequest.setConfig(requestConfig.build()); } - HttpHeaders headers = request.getHeaders(); - if (headers != null) { - for (Iterator>> headerIterator = headers - .entrySet().iterator(); headerIterator.hasNext();) { - Entry> header = headerIterator.next(); - if (HttpHeaders.COOKIE.equalsIgnoreCase(header.getKey())) { - uriRequest.addHeader(header.getKey(), - StringUtil.join(header.getValue(), ';')); - } else { - for (String headerValue : header.getValue()) { - uriRequest.addHeader(header.getKey(), - headerValue != null ? headerValue : ""); - } - } - } - } - HttpEntity entity = request.getEntity(); - if (entity != null) { - AbstractHttpEntity httpEntity = null; - if (entity instanceof MultipartEntity) { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - entity.writeTo(os); - os.flush(); - httpEntity = new org.apache.http.entity.ByteArrayEntity( - os.toByteArray()); - os.close(); - } else { - httpEntity = new InputStreamEntity(entity.getContent(), - entity.getContentLength()); - } - httpEntity.setContentType(entity.getContentType().toString()); - ((HttpEntityEnclosingRequestBase) uriRequest) - .setEntity(httpEntity); - } + addHeaders(request.getHeaders(), uriRequest); + addEntity(request.getEntity(), uriRequest); CloseableHttpResponse httpResponse = httpClient.execute(uriRequest); response = new HttpComponent4_2Response(httpResponse); } catch (IOException e) { diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2Response.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2Response.java index c1f7a4d4..f1b681de 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2Response.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent4_2Response.java @@ -8,7 +8,6 @@ import org.apache.http.HttpEntity; import org.apache.http.ProtocolVersion; import org.apache.http.StatusLine; import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.util.EntityUtils; import com.foxinmy.weixin4j.http.HttpClientException; import com.foxinmy.weixin4j.http.HttpHeaders; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java index c240770a..9dbcb9cc 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java @@ -20,7 +20,6 @@ import com.foxinmy.weixin4j.http.entity.FormUrlEntity; import com.foxinmy.weixin4j.http.entity.HttpEntity; import com.foxinmy.weixin4j.http.entity.StringEntity; import com.foxinmy.weixin4j.http.factory.HttpClientFactory; -import com.foxinmy.weixin4j.http.factory.HttpComponent4Factory; import com.foxinmy.weixin4j.model.Consts; import com.foxinmy.weixin4j.util.StringUtil; import com.foxinmy.weixin4j.util.WeixinErrorUtil; @@ -45,7 +44,6 @@ public class WeixinRequestExecutor { } public WeixinRequestExecutor(HttpParams params) { - HttpClientFactory.setDefaultFactory(new HttpComponent4Factory()); this.httpClient = HttpClientFactory.getInstance(); this.params = params; } diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java index 1d594ca4..7635dc08 100644 --- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java +++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java @@ -74,8 +74,7 @@ public class MenuTest extends TokenTest { for (Button btn : btnList) { System.out.println(btn); } - System.err.println(menuApi.getMenu()); - Assert.assertEquals(1, btnList.size()); + Assert.assertEquals(3, btnList.size()); } @Test