diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/qy/chat/ChatItem.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/qy/chat/ChatItem.java index 5805c2df..a4e60489 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/qy/chat/ChatItem.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/qy/chat/ChatItem.java @@ -24,7 +24,7 @@ public class ChatItem implements Serializable { private static final long serialVersionUID = -5921235260175596270L; - public final String LIST_SEPARATOR = "|"; + public final String LIST_SEPARATOR = "\\|"; /** * 操作成员UserID diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/SingleResponseEncoder.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/SingleResponseEncoder.java new file mode 100644 index 00000000..b23b65ca --- /dev/null +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/SingleResponseEncoder.java @@ -0,0 +1,41 @@ +package com.foxinmy.weixin4j.socket; + +import static io.netty.handler.codec.http.HttpResponseStatus.OK; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageEncoder; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.util.List; + +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.response.SingleResponse; +import com.foxinmy.weixin4j.util.Consts; +import com.foxinmy.weixin4j.util.HttpUtil; + +/** + * 微信回复编码类 + * + * @className WeixinResponseEncoder + * @author jy + * @date 2014年11月13日 + * @since JDK 1.7 + * @see 加密接入指引 + * @see com.foxinmy.weixin4j.response.WeixinResponse + */ +public class SingleResponseEncoder extends + MessageToMessageEncoder { + + private final InternalLogger logger = InternalLoggerFactory + .getInstance(getClass()); + + @Override + protected void encode(ChannelHandlerContext ctx, SingleResponse response, + List out) throws WeixinException { + String content = response.toContent(); + ctx.writeAndFlush(HttpUtil.createHttpResponse(content, OK, + Consts.CONTENTTYPE$APPLICATION_XML)); + logger.info("encode single response:{}", content); + } +} \ No newline at end of file diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/MessageTransfer.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinMessageTransfer.java similarity index 71% rename from weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/MessageTransfer.java rename to weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinMessageTransfer.java index a4d1d924..f8038cd1 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/MessageTransfer.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinMessageTransfer.java @@ -8,13 +8,13 @@ import com.foxinmy.weixin4j.util.AesToken; /** * 消息传递 * - * @className MessageTransfer + * @className WeixinMessageTransfer * @author jy * @date 2015年6月23日 * @since JDK 1.7 * @see */ -public class MessageTransfer implements Serializable { +public class WeixinMessageTransfer implements Serializable { private static final long serialVersionUID = 7779948135156353261L; @@ -36,7 +36,7 @@ public class MessageTransfer implements Serializable { */ private String fromUserName; - public MessageTransfer(AesToken aesToken, EncryptType encryptType, + public WeixinMessageTransfer(AesToken aesToken, EncryptType encryptType, String toUserName, String fromUserName) { this.aesToken = aesToken; this.encryptType = encryptType; @@ -59,4 +59,11 @@ public class MessageTransfer implements Serializable { public String getFromUserName() { return fromUserName; } + + @Override + public String toString() { + return "WeixinMessageTransfer [aesToken=" + aesToken + ", encryptType=" + + encryptType + ", toUserName=" + toUserName + + ", fromUserName=" + fromUserName + "]"; + } } 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 6ea209b5..c3443637 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 @@ -98,7 +98,7 @@ public class WeixinRequestHandler extends } CruxMessageHandler cruxMessage = CruxMessageHandler.parser(request .getOriginalContent()); - MessageTransfer messageTransfer = new MessageTransfer(aesToken, + WeixinMessageTransfer messageTransfer = new WeixinMessageTransfer(aesToken, request.getEncryptType(), cruxMessage.getToUserName(), cruxMessage.getFromUserName()); ctx.channel().attr(Consts.MESSAGE_TRANSFER_KEY).set(messageTransfer); diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinResponseEncoder.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinResponseEncoder.java index bb19a8c3..61895591 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinResponseEncoder.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinResponseEncoder.java @@ -38,7 +38,7 @@ public class WeixinResponseEncoder extends @Override protected void encode(ChannelHandlerContext ctx, WeixinResponse response, List out) throws WeixinException { - MessageTransfer messageTransfer = ctx.channel() + WeixinMessageTransfer messageTransfer = ctx.channel() .attr(Consts.MESSAGE_TRANSFER_KEY).get(); AesToken aesToken = messageTransfer.getAesToken(); EncryptType encryptType = messageTransfer.getEncryptType(); @@ -85,6 +85,6 @@ public class WeixinResponseEncoder extends } ctx.writeAndFlush(HttpUtil.createHttpResponse(content.toString(), OK, Consts.CONTENTTYPE$APPLICATION_XML)); - logger.info("{} encode response:{}", encryptType, content); + logger.info("{} encode weixin response:{}", encryptType, content); } } \ No newline at end of file diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinServerInitializer.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinServerInitializer.java index 849bfe03..5b02a530 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinServerInitializer.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/socket/WeixinServerInitializer.java @@ -41,6 +41,7 @@ public class WeixinServerInitializer extends ChannelInitializer { pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new HttpObjectAggregator(65536)); pipeline.addLast(new WeixinMessageDecoder(aesTokenMap)); + pipeline.addLast(new SingleResponseEncoder()); pipeline.addLast(new WeixinResponseEncoder()); pipeline.addLast(new WeixinRequestHandler(messageDispatcher)); } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/Consts.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/Consts.java index e1bded87..d754ff62 100644 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/Consts.java +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/Consts.java @@ -4,7 +4,7 @@ import io.netty.util.AttributeKey; import java.nio.charset.Charset; -import com.foxinmy.weixin4j.socket.MessageTransfer; +import com.foxinmy.weixin4j.socket.WeixinMessageTransfer; /** * 常量类 @@ -35,6 +35,6 @@ public final class Consts { public static final String CONTENTTYPE$APPLICATION_XML = "application/xml"; public static final String CONTENTTYPE$TEXT_PLAIN = "text/plain"; - public static final AttributeKey MESSAGE_TRANSFER_KEY = AttributeKey + public static final AttributeKey MESSAGE_TRANSFER_KEY = AttributeKey .valueOf("$_MESSAGETRANSFER"); }