weixin4j-server:WeixinMessageInterceptor加入weight权重接口

This commit is contained in:
jinyu 2015-12-26 18:31:20 +08:00
parent 763b1a66b9
commit 9c01692f57
6 changed files with 46 additions and 25 deletions

View File

@ -601,4 +601,6 @@
* 2015-12-26
+ weixin4j-base:MchPayRequest抽象化
+ weixin4j-server:WeixinMessageInterceptor加入weight权重接口

View File

@ -9,7 +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.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@ -207,24 +206,13 @@ public class WeixinMessageDispatcher {
if (messageHandlers == null) {
return null;
}
List<WeixinMessageHandler> matchingMessageHandlers = new ArrayList<WeixinMessageHandler>();
WeixinMessageHandler messageHandler = null;
for (WeixinMessageHandler handler : messageHandlers) {
if (handler.canHandle(request, message, nodeNames)) {
matchingMessageHandlers.add(handler);
messageHandler = handler;
break;
}
}
if (matchingMessageHandlers.isEmpty()) {
return null;
}
Collections.sort(matchingMessageHandlers,
new Comparator<WeixinMessageHandler>() {
@Override
public int compare(WeixinMessageHandler m1,
WeixinMessageHandler m2) {
return m2.weight() - m1.weight();
}
});
WeixinMessageHandler messageHandler = matchingMessageHandlers.get(0);
return new MessageHandlerExecutor(context, messageHandler,
getMessageInterceptors());
}
@ -246,8 +234,8 @@ public class WeixinMessageDispatcher {
}
if (beanFactory != null) {
for (Class<?> clazz : messageHandlerClass) {
messageHandlerList.add(0,
(WeixinMessageHandler) beanFactory
messageHandlerList
.add((WeixinMessageHandler) beanFactory
.getBean(clazz));
}
} else {
@ -260,9 +248,8 @@ public class WeixinMessageDispatcher {
Constructor<?> ctor = clazz
.getDeclaredConstructor();
ReflectionUtil.makeAccessible(ctor);
messageHandlerList.add(0,
(WeixinMessageHandler) ctor
.newInstance((Object[]) null));
messageHandlerList.add((WeixinMessageHandler) ctor
.newInstance((Object[]) null));
} catch (Exception ex) {
throw new WeixinException(clazz.getName()
+ " instantiate fail", ex);
@ -272,6 +259,14 @@ public class WeixinMessageDispatcher {
}
if (messageHandlerList != null
&& !this.messageHandlerList.isEmpty()) {
Collections.sort(messageHandlerList,
new Comparator<WeixinMessageHandler>() {
@Override
public int compare(WeixinMessageHandler m1,
WeixinMessageHandler m2) {
return m2.weight() - m1.weight();
}
});
this.messageHandlers = this.messageHandlerList
.toArray(new WeixinMessageHandler[this.messageHandlerList
.size()]);
@ -298,8 +293,8 @@ public class WeixinMessageDispatcher {
}
if (beanFactory != null) {
for (Class<?> clazz : messageInterceptorClass) {
messageInterceptorList.add(0,
(WeixinMessageInterceptor) beanFactory
messageInterceptorList
.add((WeixinMessageInterceptor) beanFactory
.getBean(clazz));
}
} else {
@ -312,8 +307,8 @@ public class WeixinMessageDispatcher {
Constructor<?> ctor = clazz
.getDeclaredConstructor();
ReflectionUtil.makeAccessible(ctor);
messageInterceptorList.add(0,
(WeixinMessageInterceptor) ctor
messageInterceptorList
.add((WeixinMessageInterceptor) ctor
.newInstance((Object[]) null));
} catch (Exception ex) {
throw new WeixinException(clazz.getName()
@ -324,6 +319,14 @@ public class WeixinMessageDispatcher {
}
if (this.messageInterceptorList != null
&& !this.messageInterceptorList.isEmpty()) {
Collections.sort(messageInterceptorList,
new Comparator<WeixinMessageInterceptor>() {
@Override
public int compare(WeixinMessageInterceptor m1,
WeixinMessageInterceptor m2) {
return m2.weight() - m1.weight();
}
});
this.messageInterceptors = this.messageInterceptorList
.toArray(new WeixinMessageInterceptor[this.messageInterceptorList
.size()]);

View File

@ -38,4 +38,8 @@ public abstract class MessageInterceptorAdapter implements
WeixinMessageHandler handler, Exception exception)
throws WeixinException {
}
public int weight() {
return 0;
}
}

View File

@ -74,4 +74,11 @@ public interface WeixinMessageInterceptor {
WeixinResponse response, Object message,
WeixinMessageHandler handler, Exception exception)
throws WeixinException;
/**
* 用于匹配到多个MessageHandler时权重降序排列,数字越大优先级越高
*
* @return 权重
*/
int weight();
}

View File

@ -26,7 +26,7 @@ import com.foxinmy.weixin4j.util.Consts;
*/
public class MessagePush {
private final String server = "http://localhost:30000";
private final String server = "http://localhost:10003";
private final HttpClient httpClient;
private final HttpPost httpPost;
private final HttpGet httpGet;

View File

@ -105,6 +105,11 @@ public class MessageServerStartup {
Exception exception) throws WeixinException {
System.err.println("请求处理完毕");
}
@Override
public int weight() {
return 0;
}
};
new WeixinServerBootstrap(token).addInterceptor(interceptor)
.openAlwaysResponse().startup();