diff --git a/README.md b/README.md
index bdc3217c..6b1f1f8c 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@ weixin4j
com.foxinmy
weixin4j-server
- 0.0.1
+ 1.0.0
以上依赖如果出现Missing artifact错误 请尝试在eclipse里这么做
diff --git a/weixin4j-server/pom.xml b/weixin4j-server/pom.xml
index 4f455158..4acc3715 100644
--- a/weixin4j-server/pom.xml
+++ b/weixin4j-server/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.foxinmy
weixin4j-server
- 0.0.1
+ 1.0.0
weixin4j-server
https://github.com/foxinmy/weixin4j/tree/master/weixin4j-server
微信消息netty服务器
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 e64fa424..409596db 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
@@ -89,15 +89,15 @@ public class WeixinMessageDispatcher {
}
public void doDispatch(final ChannelHandlerContext context,
- final WeixinRequest request, final String uniqueKey)
+ final WeixinRequest request, final String messageKey)
throws WeixinException {
- Class> targetClass = messageMatcher.find(uniqueKey);
+ Class> targetClass = messageMatcher.find(messageKey);
Object message = request.getOriginalContent();
if (targetClass != null) {
message = messageRead(request.getOriginalContent(), targetClass);
}
MessageHandlerExecutor handlerExecutor = getHandlerExecutor(context,
- request, uniqueKey, message);
+ request, messageKey, message);
if (handlerExecutor == null
|| handlerExecutor.getMessageHandler() == null) {
noHandlerFound(context, request, message);
@@ -130,7 +130,7 @@ public class WeixinMessageDispatcher {
protected MessageHandlerExecutor getHandlerExecutor(
ChannelHandlerContext context, WeixinRequest request,
- String uniqueKey, Object message) throws WeixinException {
+ String messageKey, Object message) throws WeixinException {
WeixinMessageHandler messageHandler = null;
WeixinMessageHandler[] messageHandlers = getMessageHandlers();
if (messageHandlers == null) {
@@ -142,7 +142,7 @@ public class WeixinMessageDispatcher {
if (!messageMatcher.match(genericType)) {
message = messageRead(request.getOriginalContent(),
genericType);
- messageMatcher.regist(uniqueKey, genericType);
+ messageMatcher.regist(messageKey, genericType);
}
if (genericType == message.getClass()
&& handler.canHandle(request, message)) {
diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java
index dd8b3c59..d3d9a27b 100644
--- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java
+++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java
@@ -27,8 +27,13 @@ public class WeixinMessageMatcher {
private final Logger log = LoggerFactory.getLogger(getClass());
- private final String MP_TAG = "mp";
- private final String QY_TAG = "qy";
+ public static final String MESSAGEKEY_MP_TAG = "mp";
+ public static final String MESSAGEKEY_SEPARATOR = ":";
+ public static final String MESSAGEKEY_MP_SEPARATOR = MESSAGEKEY_MP_TAG
+ + MESSAGEKEY_SEPARATOR;
+ public static final String MESSAGEKEY_QY_TAG = "qy";
+ public static final String MESSAGEKEY_QY_SEPARATOR = MESSAGEKEY_QY_TAG
+ + MESSAGEKEY_SEPARATOR;
private final Map> key2ClassMap;
private final Map, String> class2KeyMap;
@@ -47,123 +52,107 @@ public class WeixinMessageMatcher {
// /////////////////////////////////////////////////
/******************** 普通消息 ********************/
// /////////////////////////////////////////////////
- String uniqueKey = MessageType.text.name();
+ String messageKey = MessageType.text.name();
Class> clazz = TextMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = MessageType.image.name();
+ regist(messageKey, clazz);
+ messageKey = MessageType.image.name();
clazz = ImageMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = MessageType.voice.name();
+ regist(messageKey, clazz);
+ messageKey = MessageType.voice.name();
clazz = VoiceMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = MessageType.video.name();
+ regist(messageKey, clazz);
+ messageKey = MessageType.video.name();
clazz = VideoMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = MessageType.shortvideo.name();
- regist(uniqueKey, clazz);
- uniqueKey = MessageType.location.name();
+ regist(messageKey, clazz);
+ messageKey = MessageType.shortvideo.name();
+ regist(messageKey, clazz);
+ messageKey = MessageType.location.name();
clazz = LocationMessage.class;
- regist(uniqueKey, clazz);
+ regist(messageKey, clazz);
}
private void init1() {
// /////////////////////////////////////////////////
/******************** 事件消息 ********************/
// /////////////////////////////////////////////////
- String uniqueKey;
- Class> clazz;
for (EventType eventType : new EventType[] { EventType.subscribe,
EventType.unsubscribe }) {
- uniqueKey = String.format("%s:%s", MessageType.event.name(),
- eventType.name());
- clazz = com.foxinmy.weixin4j.mp.event.ScribeEventMessage.class;
- regist(String.format("%s:%s", MP_TAG, uniqueKey), clazz);
+ regist(mpEventMessagKey(eventType),
+ com.foxinmy.weixin4j.mp.event.ScribeEventMessage.class);
}
for (EventType eventType : new EventType[] { EventType.subscribe,
EventType.unsubscribe }) {
- uniqueKey = String.format("%s:%s", MessageType.event.name(),
- eventType.name());
- clazz = com.foxinmy.weixin4j.qy.event.ScribeEventMessage.class;
- regist(String.format("%s:%s", QY_TAG, uniqueKey), clazz);
+ regist(qyEventMessagKey(eventType),
+ com.foxinmy.weixin4j.qy.event.ScribeEventMessage.class);
}
- uniqueKey = String.format("%s:%s", MessageType.event.name(),
- EventType.location.name());
- clazz = LocationEventMessage.class;
- regist(uniqueKey, clazz);
+ Class> clazz = LocationEventMessage.class;
+ regist(mpEventMessagKey(EventType.location), clazz);
+ regist(qyEventMessagKey(EventType.location), clazz);
for (EventType eventType : new EventType[] { EventType.click,
EventType.view }) {
- uniqueKey = String.format("%s:%s", MessageType.event.name(),
- eventType.name());
clazz = com.foxinmy.weixin4j.message.event.MenuEventMessage.class;
- regist(uniqueKey, clazz);
+ regist(mpEventMessagKey(eventType), clazz);
+ regist(qyEventMessagKey(eventType), clazz);
}
for (EventType eventType : new EventType[] { EventType.scancode_push,
EventType.scancode_waitmsg }) {
- uniqueKey = String.format("%s:%s", MessageType.event.name(),
- eventType.name());
clazz = com.foxinmy.weixin4j.message.event.MenuScanEventMessage.class;
- regist(uniqueKey, clazz);
+ regist(mpEventMessagKey(eventType), clazz);
+ regist(qyEventMessagKey(eventType), clazz);
}
for (EventType eventType : new EventType[] { EventType.pic_sysphoto,
EventType.pic_photo_or_album, EventType.pic_weixin }) {
- uniqueKey = String.format("%s:%s", MessageType.event.name(),
- eventType.name());
clazz = com.foxinmy.weixin4j.message.event.MenuPhotoEventMessage.class;
- regist(uniqueKey, clazz);
+ regist(mpEventMessagKey(eventType), clazz);
+ regist(qyEventMessagKey(eventType), clazz);
}
- uniqueKey = String.format("%s:%s", MessageType.event.name(),
- EventType.location_select.name());
clazz = com.foxinmy.weixin4j.message.event.MenuLocationEventMessage.class;
- regist(uniqueKey, clazz);
+ regist(mpEventMessagKey(EventType.location_select), clazz);
+ regist(qyEventMessagKey(EventType.location_select), clazz);
}
private void init2() {
// /////////////////////////////////////////////////
/******************** 公众平台事件消息 ********************/
// /////////////////////////////////////////////////
- String uniqueKey = String.format("%s:%s:%s", MP_TAG,
- MessageType.event.name(), EventType.scan.name());
- Class> clazz = ScanEventMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = String.format("%s:%s:%s", MP_TAG, MessageType.event.name(),
- EventType.masssendjobfinish.name());
- clazz = MassEventMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = String.format("%s:%s:%s", MP_TAG, MessageType.event.name(),
- EventType.templatesendjobfinish.name());
- clazz = TemplatesendjobfinishMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = String.format("%s:%s:%s", MP_TAG, MessageType.event.name(),
- EventType.kf_create_session.name());
- clazz = KfCreateEventMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = String.format("%s:%s:%s", MP_TAG, MessageType.event.name(),
- EventType.kf_close_session.name());
- clazz = KfCloseEventMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = String.format("%s:%s:%s", MP_TAG, MessageType.event.name(),
- EventType.kf_switch_session.name());
- clazz = KfSwitchEventMessage.class;
- regist(uniqueKey, clazz);
+ regist(mpEventMessagKey(EventType.scan), ScanEventMessage.class);
+ regist(mpEventMessagKey(EventType.masssendjobfinish),
+ MassEventMessage.class);
+ regist(mpEventMessagKey(EventType.templatesendjobfinish),
+ TemplatesendjobfinishMessage.class);
+ regist(mpEventMessagKey(EventType.kf_create_session),
+ KfCreateEventMessage.class);
+ regist(mpEventMessagKey(EventType.kf_close_session),
+ KfCloseEventMessage.class);
+ regist(mpEventMessagKey(EventType.kf_switch_session),
+ KfSwitchEventMessage.class);
}
private void init3() {
// /////////////////////////////////////////////////
/******************** 企业号事件消息 ********************/
// /////////////////////////////////////////////////
- String uniqueKey = String.format("%s:%s:%s", QY_TAG,
- MessageType.event.name(), EventType.batch_job_result.name());
- Class> clazz = BatchjobresultMessage.class;
- regist(uniqueKey, clazz);
- uniqueKey = String.format("%s:%s:%s", QY_TAG, MessageType.event.name(),
- EventType.enter_agent.name());
- clazz = EnterAgentEventMessage.class;
- regist(uniqueKey, clazz);
+ regist(qyEventMessagKey(EventType.batch_job_result),
+ BatchjobresultMessage.class);
+ regist(qyEventMessagKey(EventType.enter_agent),
+ EnterAgentEventMessage.class);
}
- public void regist(String uniqueKey, Class> clazz) {
- key2ClassMap.put(uniqueKey, clazz);
- class2KeyMap.put(clazz, uniqueKey);
+ private String mpEventMessagKey(EventType eventType) {
+ return String.format("%s%s%s%s", MESSAGEKEY_MP_SEPARATOR,
+ MessageType.event.name(), MESSAGEKEY_SEPARATOR,
+ eventType.name());
+ }
+
+ private String qyEventMessagKey(EventType eventType) {
+ return String.format("%s%s%s%s", MESSAGEKEY_QY_SEPARATOR,
+ MessageType.event.name(), MESSAGEKEY_SEPARATOR,
+ eventType.name());
+ }
+
+ public void regist(String messageKey, Class> clazz) {
+ key2ClassMap.put(messageKey, clazz);
+ class2KeyMap.put(clazz, messageKey);
}
public boolean match(Object keyOrClass) {
@@ -171,7 +160,7 @@ public class WeixinMessageMatcher {
|| class2KeyMap.containsKey(keyOrClass);
}
- public Class> find(String uniqueKey) {
- return key2ClassMap.get(uniqueKey);
+ public Class> find(String messageKey) {
+ return key2ClassMap.get(messageKey);
}
}
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 19dc225e..788811e9 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
@@ -16,6 +16,7 @@ public class DebugMessageHandler implements WeixinMessageHandler {
@Override
public boolean canHandle(WeixinRequest request, Object message)
throws WeixinException {
+ System.err.println(message.getClass());
return true;
}
diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java
index 05b12adc..07246a5b 100644
--- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java
+++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinRequestHandler.java
@@ -110,6 +110,6 @@ public class WeixinRequestHandler extends
.set(messageHandler.getToUserName());
}
messageDispatcher.doDispatch(ctx, request,
- messageHandler.getUniqueKey());
+ messageHandler.getMessageKey());
}
}
diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/CruxMessageHandler.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/CruxMessageHandler.java
index 4d7d823e..c8a17d0e 100644
--- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/CruxMessageHandler.java
+++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/CruxMessageHandler.java
@@ -9,6 +9,7 @@ import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
+import com.foxinmy.weixin4j.dispatcher.WeixinMessageMatcher;
import com.foxinmy.weixin4j.type.MessageType;
import com.foxinmy.weixin4j.util.Consts;
import com.foxinmy.weixin4j.util.StringUtil;
@@ -54,18 +55,21 @@ public class CruxMessageHandler extends DefaultHandler {
this.content = new String(ch, start, length);
}
- public String getUniqueKey() {
+ public String getMessageKey() {
StringBuilder uniqueKey = new StringBuilder();
uniqueKey.append(msgType);
if (msgType.equals(MessageType.event.name())) {
if (StringUtil.isBlank(agentId)) {
- uniqueKey.insert(0, "mp:");
+ uniqueKey.insert(0,
+ WeixinMessageMatcher.MESSAGEKEY_MP_SEPARATOR);
} else {
- uniqueKey.insert(0, "qy:");
+ uniqueKey.insert(0,
+ WeixinMessageMatcher.MESSAGEKEY_QY_SEPARATOR);
}
- uniqueKey.append(":").append(eventType);
+ uniqueKey.append(WeixinMessageMatcher.MESSAGEKEY_SEPARATOR).append(
+ eventType);
}
- return uniqueKey.toString();
+ return uniqueKey.toString().toLowerCase();
}
public String getFromUserName() {