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 507c11e6..1f8b45f1 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 @@ -29,12 +29,12 @@ import com.foxinmy.weixin4j.request.WeixinMessage; import com.foxinmy.weixin4j.request.WeixinRequest; import com.foxinmy.weixin4j.response.BlankResponse; import com.foxinmy.weixin4j.response.WeixinResponse; +import com.foxinmy.weixin4j.socket.WeixinMessageTransfer; import com.foxinmy.weixin4j.type.AccountType; import com.foxinmy.weixin4j.util.ClassUtil; import com.foxinmy.weixin4j.util.Consts; import com.foxinmy.weixin4j.util.HttpUtil; import com.foxinmy.weixin4j.util.ReflectionUtil; -import com.foxinmy.weixin4j.xml.CruxMessageHandler; /** * 微信消息分发器 @@ -108,22 +108,22 @@ public class WeixinMessageDispatcher { * 上下文环境 * @param request * 微信请求 - * @param cruxMessage - * 微信的关键消息 + * @param messageTransfer + * 微信消息 * @throws WeixinException */ public void doDispatch(final ChannelHandlerContext context, - final WeixinRequest request, final CruxMessageHandler cruxMessage) - throws WeixinException { + final WeixinRequest request, + final WeixinMessageTransfer messageTransfer) throws WeixinException { WeixinMessageKey messageKey = defineMessageKey( - cruxMessage.getMsgType(), cruxMessage.getEventType(), - cruxMessage.getAccountType()); + messageTransfer.getMsgType(), messageTransfer.getEventType(), + messageTransfer.getAccountType()); Class targetClass = messageMatcher .match(messageKey); Object message = messageRead(request.getOriginalContent(), targetClass); logger.info("define '{}' matched '{}'", messageKey, targetClass); MessageHandlerExecutor handlerExecutor = getHandlerExecutor(context, - request, messageKey, message, cruxMessage.getNodeNames()); + request, messageKey, message, messageTransfer.getNodeNames()); if (handlerExecutor == null || handlerExecutor.getMessageHandler() == null) { noHandlerFound(context, request, message); @@ -136,7 +136,7 @@ public class WeixinMessageDispatcher { WeixinResponse response = null; try { response = handlerExecutor.getMessageHandler().doHandle(request, - message, cruxMessage.getNodeNames()); + message, messageTransfer.getNodeNames()); // fixed.. if (response == null) { response = BlankResponse.global; diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinMessageTransfer.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinMessageTransfer.java index f8038cd1..66bb47dc 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinMessageTransfer.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinMessageTransfer.java @@ -1,7 +1,9 @@ package com.foxinmy.weixin4j.socket; import java.io.Serializable; +import java.util.Set; +import com.foxinmy.weixin4j.type.AccountType; import com.foxinmy.weixin4j.type.EncryptType; import com.foxinmy.weixin4j.util.AesToken; @@ -26,7 +28,6 @@ public class WeixinMessageTransfer implements Serializable { * 加密类型 */ private EncryptType encryptType; - /** * 消息接收方 */ @@ -35,13 +36,34 @@ public class WeixinMessageTransfer implements Serializable { * 消息发送方 */ private String fromUserName; + /** + * 账号 + */ + private AccountType accountType; + /** + * 消息类型 + */ + private String msgType; + /** + * 事件类型 + */ + private String eventType; + /** + * 节点集合 + */ + private Set nodeNames; public WeixinMessageTransfer(AesToken aesToken, EncryptType encryptType, - String toUserName, String fromUserName) { + String toUserName, String fromUserName, AccountType accountType, + String msgType, String eventType, Set nodeNames) { this.aesToken = aesToken; this.encryptType = encryptType; this.toUserName = toUserName; this.fromUserName = fromUserName; + this.accountType = accountType; + this.msgType = msgType; + this.eventType = eventType; + this.nodeNames = nodeNames; } public AesToken getAesToken() { @@ -60,10 +82,28 @@ public class WeixinMessageTransfer implements Serializable { return fromUserName; } + public AccountType getAccountType() { + return accountType; + } + + public String getMsgType() { + return msgType; + } + + public String getEventType() { + return eventType; + } + + public Set getNodeNames() { + return nodeNames; + } + @Override public String toString() { return "WeixinMessageTransfer [aesToken=" + aesToken + ", encryptType=" + encryptType + ", toUserName=" + toUserName - + ", fromUserName=" + fromUserName + "]"; + + ", fromUserName=" + fromUserName + ", accountType=" + + accountType + ", msgType=" + msgType + ", eventType=" + + eventType + ", nodeNames=" + nodeNames + "]"; } } 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 5c0a39a0..7514811d 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 @@ -20,7 +20,7 @@ import com.foxinmy.weixin4j.util.Consts; import com.foxinmy.weixin4j.util.HttpUtil; import com.foxinmy.weixin4j.util.MessageUtil; import com.foxinmy.weixin4j.util.StringUtil; -import com.foxinmy.weixin4j.xml.CruxMessageHandler; +import com.foxinmy.weixin4j.xml.MessageTransferHandler; /** * 微信请求处理类 @@ -110,12 +110,10 @@ public class WeixinRequestHandler extends .addListener(ChannelFutureListener.CLOSE); return; } - CruxMessageHandler cruxMessage = CruxMessageHandler.parser(request - .getOriginalContent()); - WeixinMessageTransfer messageTransfer = new WeixinMessageTransfer( - aesToken, request.getEncryptType(), - cruxMessage.getToUserName(), cruxMessage.getFromUserName()); + WeixinMessageTransfer messageTransfer = MessageTransferHandler.parser( + request.getOriginalContent(), aesToken, + request.getEncryptType()); ctx.channel().attr(Consts.MESSAGE_TRANSFER_KEY).set(messageTransfer); - messageDispatcher.doDispatch(ctx, request, cruxMessage); + messageDispatcher.doDispatch(ctx, request, messageTransfer); } } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/CruxMessageHandler.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/MessageTransferHandler.java similarity index 75% rename from weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/CruxMessageHandler.java rename to weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/MessageTransferHandler.java index 8d5aea73..ce51d2f4 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/CruxMessageHandler.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/xml/MessageTransferHandler.java @@ -11,20 +11,23 @@ import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; +import com.foxinmy.weixin4j.socket.WeixinMessageTransfer; import com.foxinmy.weixin4j.type.AccountType; +import com.foxinmy.weixin4j.type.EncryptType; +import com.foxinmy.weixin4j.util.AesToken; import com.foxinmy.weixin4j.util.Consts; import com.foxinmy.weixin4j.util.StringUtil; /** - * 获取微信消息的关键信息 + * 微信消息 * - * @className CruxMessageHandler + * @className MessageTransferHandler * @author jy * @date 2015年5月17日 * @since JDK 1.7 * @see */ -public class CruxMessageHandler extends DefaultHandler { +public class MessageTransferHandler extends DefaultHandler { private String fromUserName; private String toUserName; @@ -68,7 +71,7 @@ public class CruxMessageHandler extends DefaultHandler { this.content = new String(ch, start, length); } - public AccountType getAccountType() { + private AccountType getAccountType() { if (hasAgent) { return AccountType.QY; } @@ -78,30 +81,10 @@ public class CruxMessageHandler extends DefaultHandler { return AccountType.MP; } - public String getMsgType() { - return msgType; - } + private static MessageTransferHandler global = new MessageTransferHandler(); - public String getEventType() { - return eventType; - } - - public String getFromUserName() { - return fromUserName; - } - - public String getToUserName() { - return toUserName; - } - - public Set getNodeNames() { - return nodeNames; - } - - private static CruxMessageHandler global = new CruxMessageHandler(); - - public static CruxMessageHandler parser(String xmlContent) - throws RuntimeException { + public static WeixinMessageTransfer parser(String xmlContent, + AesToken aesToken, EncryptType encryptType) throws RuntimeException { try { XMLReader xmlReader = XMLReaderFactory.createXMLReader(); xmlReader.setContentHandler(global); @@ -112,6 +95,9 @@ public class CruxMessageHandler extends DefaultHandler { } catch (SAXException e) { throw new RuntimeException(e); } - return global; + return new WeixinMessageTransfer(aesToken, encryptType, + global.toUserName, global.fromUserName, + global.getAccountType(), global.msgType, global.eventType, + global.nodeNames); } }