From 418f63d501fc02516a35bb9850bb3d6f413b156f Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 6 Aug 2015 20:02:28 +0800 Subject: [PATCH] =?UTF-8?q?weixin4j-server:=E4=BC=98=E5=8C=96WeixinMessage?= =?UTF-8?q?Dispatcher=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGE.md | 6 ++- README.md | 4 +- .../dispatcher/WeixinMessageDispatcher.java | 41 ++----------------- .../handler/MessageHandlerAdapter.java | 7 +++- .../com/foxinmy/weixin4j/util/ClassUtil.java | 19 +++++++++ .../server/test/MessageServerStartup.java | 2 +- 6 files changed, 35 insertions(+), 44 deletions(-) diff --git a/CHANGE.md b/CHANGE.md index 3357e811..b107894d 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -419,4 +419,8 @@ + **weixin4j-server**: 新增base64解编码类(来自apache) - + 在WeixinProxy类新增VERSION字段 \ No newline at end of file + + 在WeixinProxy类新增VERSION字段 + +* 2015-08-06 + + + **weixin4j-server**: 调整`LocationEventMessage`类中的经纬度字段类型为double \ No newline at end of file diff --git a/README.md b/README.md index 61bbf735..3b7376f7 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ weixin4j weixin4j-qy 1.5.1 -微信被动消息服务器(1.0.3,2015-07-04 released) +微信回调消息服务器(1.0.3,2015-07-04 released) com.foxinmy @@ -72,8 +72,6 @@ weixin4j 接下来 ------ -* 企业号消息服务 - * 公众号第三方服务应用 * 硬件设备 & 摇一摇周边 diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java index 5aaf66f8..507c11e6 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageDispatcher.java @@ -9,8 +9,6 @@ import io.netty.util.internal.logging.InternalLoggerFactory; import java.io.ByteArrayInputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -25,7 +23,6 @@ import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import com.foxinmy.weixin4j.exception.WeixinException; -import com.foxinmy.weixin4j.handler.MessageHandlerAdapter; import com.foxinmy.weixin4j.handler.WeixinMessageHandler; import com.foxinmy.weixin4j.interceptor.WeixinMessageInterceptor; import com.foxinmy.weixin4j.request.WeixinMessage; @@ -210,28 +207,15 @@ public class WeixinMessageDispatcher { ChannelHandlerContext context, WeixinRequest request, WeixinMessageKey messageKey, Object message, Set nodeNames) throws WeixinException { - WeixinMessageHandler messageHandler = null; WeixinMessageHandler[] messageHandlers = getMessageHandlers(); if (messageHandlers == null) { return null; } + WeixinMessageHandler messageHandler = null; for (WeixinMessageHandler handler : messageHandlers) { - if (handler instanceof MessageHandlerAdapter) { - Class genericType = genericTypeRead(handler); - if (genericType == message.getClass() - && handler.canHandle(request, message, nodeNames)) { - messageHandler = handler; - break; - } - } - } - if (messageHandler == null) { - for (WeixinMessageHandler handler : messageHandlers) { - if (!(handler instanceof MessageHandlerAdapter) - && handler.canHandle(request, message, nodeNames)) { - messageHandler = handler; - break; - } + if (handler.canHandle(request, message, nodeNames)) { + messageHandler = handler; + break; } } return new MessageHandlerExecutor(context, messageHandler, @@ -390,23 +374,6 @@ public class WeixinMessageDispatcher { return unmarshaller; } - /** - * 获得泛型类型 - * - * @param object - * @return - */ - private Class genericTypeRead(Object object) { - Class clazz = null; - Type type = object.getClass().getGenericSuperclass(); - if (type instanceof ParameterizedType) { - ParameterizedType ptype = ((ParameterizedType) type); - Type[] args = ptype.getActualTypeArguments(); - clazz = (Class) args[0]; - } - return clazz; - } - public void setMessageHandlerList( List messageHandlerList) { this.messageHandlerList = messageHandlerList; diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/MessageHandlerAdapter.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/MessageHandlerAdapter.java index f4491d20..74239f81 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/MessageHandlerAdapter.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/MessageHandlerAdapter.java @@ -6,9 +6,10 @@ import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.request.WeixinMessage; import com.foxinmy.weixin4j.request.WeixinRequest; import com.foxinmy.weixin4j.response.WeixinResponse; +import com.foxinmy.weixin4j.util.ClassUtil; /** - * 消息处理的适配,主要对微信消息进行泛型转换 + * 消息适配器 * * @className MessageHandlerAdapter * @author jy @@ -23,7 +24,9 @@ public abstract class MessageHandlerAdapter implements @Override public boolean canHandle(WeixinRequest request, Object message, Set nodeNames) throws WeixinException { - return canHandle0(request, (M) message); + return message != null + && message.getClass() == ClassUtil.getGenericType(this) + && canHandle0(request, (M) message); } /** diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java index 171b00db..5c8286a2 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/ClassUtil.java @@ -7,6 +7,8 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.net.JarURLConnection; import java.net.URL; import java.util.Enumeration; @@ -159,6 +161,23 @@ public final class ClassUtil { } } + /** + * 获得泛型类型 + * + * @param object + * @return + */ + public static Class getGenericType(Object object) { + Class clazz = null; + Type type = object.getClass().getGenericSuperclass(); + if (type instanceof ParameterizedType) { + ParameterizedType ptype = ((ParameterizedType) type); + Type[] args = ptype.getActualTypeArguments(); + clazz = (Class) args[0]; + } + return clazz; + } + public static void main(String[] args) { System.err .println(getClasses(com.foxinmy.weixin4j.handler.WeixinMessageHandler.class diff --git a/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java b/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java index 96337f82..752b713d 100644 --- a/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java +++ b/weixin4j-server/src/test/java/com/foxinmy/weixin4j/server/test/MessageServerStartup.java @@ -113,6 +113,6 @@ public class MessageServerStartup { } public static void main(String[] args) throws Exception { - new MessageServerStartup().test1(); + new MessageServerStartup().test3(); } }