diff --git a/weixin4j-server/CHANGE.md b/weixin4j-server/CHANGE.md index 5bd06549..1600b5c8 100644 --- a/weixin4j-server/CHANGE.md +++ b/weixin4j-server/CHANGE.md @@ -110,4 +110,8 @@ * 2015-12-08 - + version upgrade to 1.1.4 \ No newline at end of file + + version upgrade to 1.1.4 + +* 2015-12-21 + + + WeixinMessageHanlder中新增weight接口 \ No newline at end of file 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 bfdec81b..d4cea393 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,6 +9,9 @@ import io.netty.util.internal.logging.InternalLoggerFactory; import java.io.ByteArrayInputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -204,13 +207,24 @@ public class WeixinMessageDispatcher { if (messageHandlers == null) { return null; } - WeixinMessageHandler messageHandler = null; + List matchingMessageHandlers = new ArrayList(); for (WeixinMessageHandler handler : messageHandlers) { if (handler.canHandle(request, message, nodeNames)) { - messageHandler = handler; - break; + matchingMessageHandlers.add(handler); } } + if (matchingMessageHandlers.isEmpty()) { + return null; + } + Collections.sort(matchingMessageHandlers, + new Comparator() { + @Override + public int compare(WeixinMessageHandler m1, + WeixinMessageHandler m2) { + return m2.weight() - m1.weight(); + } + }); + WeixinMessageHandler messageHandler = matchingMessageHandlers.get(0); return new MessageHandlerExecutor(context, messageHandler, getMessageInterceptors()); } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/DebugMessageHandler.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/DebugMessageHandler.java index 91d6d5c9..c5155a1b 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/DebugMessageHandler.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/DebugMessageHandler.java @@ -38,4 +38,9 @@ public class DebugMessageHandler implements WeixinMessageHandler { : message.toString(); return new TextResponse(content); } + + @Override + public int weight() { + return 0; + } } 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 1aad74ef..fa89a873 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 @@ -62,4 +62,11 @@ public abstract class MessageHandlerAdapter implements public abstract WeixinResponse doHandle0(WeixinRequest request, M message) throws WeixinException; + /** + * 存在多个匹配到的MessageHandler则比较 + */ + @Override + public int weight() { + return 1; + } } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/WeixinMessageHandler.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/WeixinMessageHandler.java index 54538c77..4f728e12 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/WeixinMessageHandler.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/handler/WeixinMessageHandler.java @@ -44,4 +44,11 @@ public interface WeixinMessageHandler { */ public WeixinResponse doHandle(WeixinRequest request, Object message, Set nodeNames) throws WeixinException; + + /** + * 用于匹配到多个MessageHandler时权重降序排列,数字越大优先级越高 + * + * @return 权重 + */ + public int weight(); } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/message/event/EventMessage.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/message/event/EventMessage.java index 9b1d8dcc..8cfc0b1c 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/message/event/EventMessage.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/message/event/EventMessage.java @@ -21,6 +21,10 @@ public class EventMessage extends WeixinMessage { private static final long serialVersionUID = 7703667223814088865L; + protected EventMessage() { + // jaxb requried + } + public EventMessage(String eventType) { super(MessageType.event.name()); this.eventType = eventType; diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java index ce050582..452e5699 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/startup/WeixinServerBootstrap.java @@ -225,19 +225,6 @@ public final class WeixinServerBootstrap { return this; } - /** - * 将某个消息处理器插入到头部 - * - * @param messageHandler - * 消息处理器 - * @return - */ - public WeixinServerBootstrap insertFirstHandler( - WeixinMessageHandler messageHandler) { - messageHandlerList.add(0, messageHandler); - return this; - } - /** * 插入一个或多个消息拦截器 * @@ -251,19 +238,6 @@ public final class WeixinServerBootstrap { return this; } - /** - * 将某个消息拦截器插入到头部 - * - * @param messageInterceptor - * 消息拦截器 - * @return - */ - public WeixinServerBootstrap insertFirstInterceptor( - WeixinMessageInterceptor messageInterceptor) { - messageInterceptorList.add(0, messageInterceptor); - return this; - } - /** * 按照包名去添加消息处理器 * diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/AesToken.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/AesToken.java index aed74e01..aefc9b97 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/AesToken.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/AesToken.java @@ -16,7 +16,7 @@ public class AesToken implements Serializable { private static final long serialVersionUID = -6001008896414323534L; /** - * 账号ID(原始ID或者appid) + * 账号ID(原始id/appid/corpid) */ private String weixinId; /** @@ -42,7 +42,7 @@ public class AesToken implements Serializable { * 一般为AES加密模式 * * @param weixinId - * 公众号的应用ID(appid/corpid) + * 公众号的应用ID(原始id/appid/corpid) * @param token * 开发者Token * @param aesKey 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 8e6620da..40ad3a9c 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 @@ -111,6 +111,6 @@ public class MessageServerStartup { } public static void main(String[] args) throws Exception { - new MessageServerStartup().test3(); + new MessageServerStartup().test1(); } }