From 37f15409ea487ffda83c8e670e3f141ab27c4531 Mon Sep 17 00:00:00 2001 From: jinyu Date: Sun, 22 Jan 2017 16:14:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=82=E5=B8=B8=E4=BF=A1?= =?UTF-8?q?=E6=81=AF&=E4=BF=AE=E5=A4=8Dhttpclient=E9=87=8D=E5=AE=9A?= =?UTF-8?q?=E5=90=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin4j/http/SimpleHttpClient.java | 2 +- .../http/support/apache3/HttpComponent3.java | 2 +- .../support/apache4/HttpComponent4_1.java | 2 +- .../apache4/HttpComponent4_1Factory.java | 12 +++++- .../support/apache4/HttpComponent4_2.java | 2 +- .../http/support/netty/Netty4HttpClient.java | 6 +-- .../http/support/okhttp/OkHttpClient2.java | 2 +- .../http/support/okhttp/OkHttpClient3.java | 5 +-- .../server/handler/ChatMessageHandler.java | 33 +++++++++++++++ .../server/handler/CustomMessageHandler.java | 40 +++++++++++++++++++ 10 files changed, 94 insertions(+), 12 deletions(-) create mode 100644 weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/ChatMessageHandler.java create mode 100644 weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/CustomMessageHandler.java diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/SimpleHttpClient.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/SimpleHttpClient.java index 27005fff..d069069e 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/SimpleHttpClient.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/SimpleHttpClient.java @@ -148,7 +148,7 @@ public class SimpleHttpClient extends AbstractHttpClient { } catch (IOException e) { throw new HttpClientException("I/O error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } finally { if (response != null) { response.close(); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3.java index cad0fdf0..e214aa58 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache3/HttpComponent3.java @@ -66,7 +66,7 @@ public class HttpComponent3 extends AbstractHttpClient { } catch (IOException e) { throw new HttpClientException("I/O error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } finally { if (response != null) { response.close(); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1.java index a694ae0f..c9285f93 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1.java @@ -38,7 +38,7 @@ public class HttpComponent4_1 extends HttpComponent4 { } catch (IOException e) { throw new HttpClientException("I/O error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } finally { if (response != null) { response.close(); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java index 27c3afad..957b3a58 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_1Factory.java @@ -3,11 +3,13 @@ package com.foxinmy.weixin4j.http.support.apache4; import java.net.InetSocketAddress; import org.apache.http.HttpHost; +import org.apache.http.conn.ClientConnectionManager; 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.conn.ssl.X509HostnameVerifier; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.params.CoreProtocolPNames; @@ -30,8 +32,16 @@ public class HttpComponent4_1Factory extends HttpClientFactory { private final org.apache.http.client.HttpClient httpClient; + /** + * 默认httpclient + * @see HTTPCLIENT-1193 + * @param clientConnectionManager + */ public HttpComponent4_1Factory() { - this(new DefaultHttpClient()); + PoolingClientConnectionManager clientConnectionManager = new PoolingClientConnectionManager(); + clientConnectionManager.setMaxTotal(30); + clientConnectionManager.setDefaultMaxPerRoute(clientConnectionManager.getMaxTotal()); + this.httpClient = new DefaultHttpClient(clientConnectionManager); } public HttpComponent4_1Factory(org.apache.http.client.HttpClient httpClient) { diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2.java index 3eaaa6e3..3204ee77 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/apache4/HttpComponent4_2.java @@ -39,7 +39,7 @@ public class HttpComponent4_2 extends HttpComponent4 { } catch (IOException e) { throw new HttpClientException("I/O error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } finally { if (response != null) { response.close(); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/netty/Netty4HttpClient.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/netty/Netty4HttpClient.java index 196f65b2..e9e65120 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/netty/Netty4HttpClient.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/netty/Netty4HttpClient.java @@ -103,15 +103,15 @@ public class Netty4HttpClient extends AbstractHttpClient { } catch (IOException e) { throw new HttpClientException("I/O error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } catch (InterruptedException e) { throw new HttpClientException("Execute error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } catch (ExecutionException e) { throw new HttpClientException("Execute error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } finally { if (response != null) { response.close(); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2.java index 5344ba1b..0fe55628 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient2.java @@ -48,7 +48,7 @@ public class OkHttpClient2 extends AbstractHttpClient { } catch (IOException e) { throw new HttpClientException("I/O error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } finally { if (response != null) { response.close(); diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3.java index cdfe50db..bbfb44ef 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/support/okhttp/OkHttpClient3.java @@ -39,15 +39,14 @@ public class OkHttpClient3 extends AbstractHttpClient { HttpResponse response = null; try { okhttp3.Request okRequest = createRequest(request); - okhttp3.Response okResponse = okClient.newCall(okRequest) - .execute(); + okhttp3.Response okResponse = okClient.newCall(okRequest).execute(); response = new OkHttpResponse3(okResponse, okResponse.body() .bytes()); handleResponse(response); } catch (IOException e) { throw new HttpClientException("I/O error on " + request.getMethod().name() + " request for \"" - + request.getURI().toString() + "\":" + e.getMessage(), e); + + request.getURI().toString(), e); } finally { if (response != null) { response.close(); diff --git a/weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/ChatMessageHandler.java b/weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/ChatMessageHandler.java new file mode 100644 index 00000000..2fb7f104 --- /dev/null +++ b/weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/ChatMessageHandler.java @@ -0,0 +1,33 @@ +package com.foxinmy.weixin4j.example.server.handler; + +import java.util.Set; + +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.handler.WeixinMessageHandler; +import com.foxinmy.weixin4j.qy.chat.WeixinChatMessage; +import com.foxinmy.weixin4j.request.WeixinMessage; +import com.foxinmy.weixin4j.request.WeixinRequest; +import com.foxinmy.weixin4j.response.BlankResponse; +import com.foxinmy.weixin4j.response.WeixinResponse; + +public class ChatMessageHandler implements WeixinMessageHandler { + + @Override + public boolean canHandle(WeixinRequest request, WeixinMessage message, + Set nodeNames) throws WeixinException { + return nodeNames.contains("PackageId"); + } + + @Override + public WeixinResponse doHandle(WeixinRequest request, + WeixinMessage message, Set nodeNames) + throws WeixinException { + WeixinChatMessage chatMessage = null; // 转换为实体 + return BlankResponse.global; + } + + @Override + public int weight() { + return 0; + } +} diff --git a/weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/CustomMessageHandler.java b/weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/CustomMessageHandler.java new file mode 100644 index 00000000..4d0119be --- /dev/null +++ b/weixin4j-example/src/main/java/com/foxinmy/weixin4j/example/server/handler/CustomMessageHandler.java @@ -0,0 +1,40 @@ +package com.foxinmy.weixin4j.example.server.handler; + +import java.util.Set; + +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.handler.WeixinMessageHandler; +import com.foxinmy.weixin4j.request.WeixinMessage; +import com.foxinmy.weixin4j.request.WeixinRequest; +import com.foxinmy.weixin4j.response.TextResponse; +import com.foxinmy.weixin4j.response.WeixinResponse; + +/** + * 自定义处理消息 + * @className CustomMessageHandler + * @author jinyu(foxinmy@gmail.com) + * @date 2017年1月19日 + * @since JDK 1.6 + * @see + */ +public class CustomMessageHandler implements WeixinMessageHandler { + + @Override + public boolean canHandle(WeixinRequest request, WeixinMessage message, + Set nodeNames) throws WeixinException { + // 消息来源某个用户 + return message.getFromUserName().equals("xxx"); + } + + @Override + public WeixinResponse doHandle(WeixinRequest request, + WeixinMessage message, Set nodeNames) + throws WeixinException { + return new TextResponse("是你,是你,还是你。"); + } + + @Override + public int weight() { + return 0; + } +}