commons-codec
commons-codec
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/StringUtils.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/StringUtils.java
new file mode 100644
index 000000000..4234a8c8c
--- /dev/null
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/StringUtils.java
@@ -0,0 +1,100 @@
+package me.chanjar.weixin.common.util;
+
+/**
+ * copy from apache-commons-lang3
+ */
+public class StringUtils {
+
+ /**
+ * Checks if a CharSequence is whitespace, empty ("") or null.
+ *
+ *
+ * StringUtils.isBlank(null) = true
+ * StringUtils.isBlank("") = true
+ * StringUtils.isBlank(" ") = true
+ * StringUtils.isBlank("bob") = false
+ * StringUtils.isBlank(" bob ") = false
+ *
+ *
+ * @param cs the CharSequence to check, may be null
+ * @return {@code true} if the CharSequence is null, empty or whitespace
+ * @since 2.0
+ * @since 3.0 Changed signature from isBlank(String) to isBlank(CharSequence)
+ */
+ public static boolean isBlank(CharSequence cs) {
+ int strLen;
+ if (cs == null || (strLen = cs.length()) == 0) {
+ return true;
+ }
+ for (int i = 0; i < strLen; i++) {
+ if (Character.isWhitespace(cs.charAt(i)) == false) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Checks if a CharSequence is not empty (""), not null and not whitespace only.
+ *
+ *
+ * StringUtils.isNotBlank(null) = false
+ * StringUtils.isNotBlank("") = false
+ * StringUtils.isNotBlank(" ") = false
+ * StringUtils.isNotBlank("bob") = true
+ * StringUtils.isNotBlank(" bob ") = true
+ *
+ *
+ * @param cs the CharSequence to check, may be null
+ * @return {@code true} if the CharSequence is
+ * not empty and not null and not whitespace
+ * @since 2.0
+ * @since 3.0 Changed signature from isNotBlank(String) to isNotBlank(CharSequence)
+ */
+ public static boolean isNotBlank(CharSequence cs) {
+ return !StringUtils.isBlank(cs);
+ }
+
+ /**
+ * Checks if a CharSequence is empty ("") or null.
+ *
+ *
+ * StringUtils.isEmpty(null) = true
+ * StringUtils.isEmpty("") = true
+ * StringUtils.isEmpty(" ") = false
+ * StringUtils.isEmpty("bob") = false
+ * StringUtils.isEmpty(" bob ") = false
+ *
+ *
+ * NOTE: This method changed in Lang version 2.0.
+ * It no longer trims the CharSequence.
+ * That functionality is available in isBlank().
+ *
+ * @param cs the CharSequence to check, may be null
+ * @return {@code true} if the CharSequence is empty or null
+ * @since 3.0 Changed signature from isEmpty(String) to isEmpty(CharSequence)
+ */
+ public static boolean isEmpty(CharSequence cs) {
+ return cs == null || cs.length() == 0;
+ }
+
+ /**
+ * Checks if a CharSequence is not empty ("") and not null.
+ *
+ *
+ * StringUtils.isNotEmpty(null) = false
+ * StringUtils.isNotEmpty("") = false
+ * StringUtils.isNotEmpty(" ") = true
+ * StringUtils.isNotEmpty("bob") = true
+ * StringUtils.isNotEmpty(" bob ") = true
+ *
+ *
+ * @param cs the CharSequence to check, may be null
+ * @return {@code true} if the CharSequence is not empty and not null
+ * @since 3.0 Changed signature from isNotEmpty(String) to isNotEmpty(CharSequence)
+ */
+ public static boolean isNotEmpty(CharSequence cs) {
+ return !StringUtils.isEmpty(cs);
+ }
+
+}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java
index 7fc05d94e..dc7f28b4b 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java
@@ -1,12 +1,9 @@
package me.chanjar.weixin.common.util.http;
import me.chanjar.weixin.common.bean.result.WxError;
-import me.chanjar.weixin.common.util.fs.FileUtils;
import me.chanjar.weixin.common.exception.WxErrorException;
-import me.chanjar.weixin.common.util.http.InputStreamResponseHandler;
-import me.chanjar.weixin.common.util.http.RequestExecutor;
-import me.chanjar.weixin.common.util.http.Utf8ResponseHandler;
-import org.apache.commons.lang3.StringUtils;
+import me.chanjar.weixin.common.util.StringUtils;
+import me.chanjar.weixin.common.util.fs.FileUtils;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.client.ClientProtocolException;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageHandler.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageHandler.java
index b82dddeb2..861c610d8 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageHandler.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageHandler.java
@@ -16,8 +16,9 @@ public interface WxCpMessageHandler {
*
* @param wxMessage
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
+ * @param wxCpService
* @return xml格式的消息,如果在异步规则里处理的话,可以返回null
*/
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context);
+ public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService wxCpService);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageInterceptor.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageInterceptor.java
index 7a09dacda..c1e7ee9d0 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageInterceptor.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageInterceptor.java
@@ -15,8 +15,9 @@ public interface WxCpMessageInterceptor {
* 拦截微信消息
* @param wxMessage
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
+ * @param wxCpService
* @return true代表OK,false代表不OK
*/
- public boolean intercept(WxCpXmlMessage wxMessage, Map context);
+ public boolean intercept(WxCpXmlMessage wxMessage, Map context, WxCpService wxCpService);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java
index 333fca9a1..8c3d493cb 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMessageRouter.java
@@ -45,12 +45,18 @@ public class WxCpMessageRouter {
private final ExecutorService es = Executors.newCachedThreadPool();
+ private final WxCpService wxCpService;
+
+ public WxCpMessageRouter(WxCpService wxCpService) {
+ this.wxCpService = wxCpService;
+ }
+
/**
* 开始一个新的Route规则
* @return
*/
public Rule rule() {
- return new Rule(this);
+ return new Rule(this, wxCpService);
}
/**
@@ -101,6 +107,8 @@ public class WxCpMessageRouter {
private final WxCpMessageRouter routerBuilder;
+ private final WxCpService wxCpService;
+
private boolean async = true;
private String msgType;
@@ -121,8 +129,9 @@ public class WxCpMessageRouter {
private List interceptors = new ArrayList();
- protected Rule(WxCpMessageRouter routerBuilder) {
+ protected Rule(WxCpMessageRouter routerBuilder, WxCpService wxCpService) {
this.routerBuilder = routerBuilder;
+ this.wxCpService = wxCpService;
}
/**
@@ -288,7 +297,7 @@ public class WxCpMessageRouter {
Map context = new HashMap();
// 如果拦截器不通过
for (WxCpMessageInterceptor interceptor : this.interceptors) {
- if (!interceptor.intercept(wxMessage, context)) {
+ if (!interceptor.intercept(wxMessage, context, wxCpService)) {
return null;
}
}
@@ -297,7 +306,7 @@ public class WxCpMessageRouter {
WxCpXmlOutMessage res = null;
for (WxCpMessageHandler handler : this.handlers) {
// 返回最后handler的结果
- res = handler.handle(wxMessage, context);
+ res = handler.handle(wxMessage, context, wxCpService);
}
return res;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java
index 39b8e3dbf..ba4d26e33 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpServiceImpl.java
@@ -1,25 +1,27 @@
package me.chanjar.weixin.cp.api;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
-
import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
+import com.google.gson.internal.Streams;
+import com.google.gson.reflect.TypeToken;
+import com.google.gson.stream.JsonReader;
import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.bean.WxMenu;
+import me.chanjar.weixin.common.bean.result.WxError;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
-import me.chanjar.weixin.common.util.json.GsonHelper;
-import me.chanjar.weixin.cp.bean.*;
-import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor;
+import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.common.util.StringUtils;
import me.chanjar.weixin.common.util.crypto.SHA1;
+import me.chanjar.weixin.common.util.fs.FileUtils;
+import me.chanjar.weixin.common.util.http.*;
+import me.chanjar.weixin.common.util.json.GsonHelper;
+import me.chanjar.weixin.cp.bean.WxCpDepart;
+import me.chanjar.weixin.cp.bean.WxCpMessage;
+import me.chanjar.weixin.cp.bean.WxCpTag;
+import me.chanjar.weixin.cp.bean.WxCpUser;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
-import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
@@ -33,20 +35,13 @@ import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
-import me.chanjar.weixin.cp.bean.WxCpDepart;
-import me.chanjar.weixin.common.bean.result.WxError;
-import me.chanjar.weixin.cp.bean.WxCpUser;
-import me.chanjar.weixin.common.exception.WxErrorException;
-import me.chanjar.weixin.common.util.fs.FileUtils;
-import me.chanjar.weixin.common.util.http.MediaDownloadRequestExecutor;
-import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
-import me.chanjar.weixin.common.util.http.RequestExecutor;
-import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
-
-import com.google.gson.JsonElement;
-import com.google.gson.internal.Streams;
-import com.google.gson.reflect.TypeToken;
-import com.google.gson.stream.JsonReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
public class WxCpServiceImpl implements WxCpService {
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java
index 30b8ef13f..6aefc6b3c 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java
@@ -8,17 +8,12 @@
*/
package me.chanjar.weixin.cp.util.json;
-import java.lang.reflect.Type;
-
+import com.google.gson.*;
import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.util.StringUtils;
import me.chanjar.weixin.cp.bean.WxCpMessage;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import org.apache.commons.lang3.StringUtils;
+import java.lang.reflect.Type;
/**
*
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpBaseAPITest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpBaseAPITest.java
index 07d7d0a64..032165eb2 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpBaseAPITest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpBaseAPITest.java
@@ -1,6 +1,6 @@
package me.chanjar.weixin.cp.api;
-import org.apache.commons.lang3.StringUtils;
+import me.chanjar.weixin.common.util.StringUtils;
import org.testng.Assert;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageRouterTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageRouterTest.java
index 59962c6fa..6b178f9b5 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageRouterTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpMessageRouterTest.java
@@ -47,7 +47,7 @@ public class WxCpMessageRouterTest {
@Test(dataProvider="messages-1")
public void testSync(WxCpXmlMessage message, String expected) {
StringBuffer sb = new StringBuffer();
- WxCpMessageRouter router = new WxCpMessageRouter();
+ WxCpMessageRouter router = new WxCpMessageRouter(null);
prepare(false, sb, router);
router.route(message);
Assert.assertEquals(sb.toString(), expected);
@@ -56,7 +56,7 @@ public class WxCpMessageRouterTest {
@Test(dataProvider="messages-1")
public void testAsync(WxCpXmlMessage message, String expected) throws InterruptedException {
StringBuffer sb = new StringBuffer();
- WxCpMessageRouter router = new WxCpMessageRouter();
+ WxCpMessageRouter router = new WxCpMessageRouter(null);
prepare(true, sb, router);
router.route(message);
Thread.sleep(500l);
@@ -64,10 +64,10 @@ public class WxCpMessageRouterTest {
}
public void testConcurrency() throws InterruptedException {
- final WxCpMessageRouter router = new WxCpMessageRouter();
+ final WxCpMessageRouter router = new WxCpMessageRouter(null);
router.rule().handler(new WxCpMessageHandler() {
@Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context) {
+ public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService wxCpService) {
return null;
}
}).end();
@@ -149,7 +149,7 @@ public class WxCpMessageRouterTest {
}
@Override
- public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context) {
+ public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService wxCpService) {
sb.append(this.echoStr).append(',');
return null;
}
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpDemoServlet.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpDemoServlet.java
index b84d786fb..16413a3d4 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpDemoServlet.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpDemoServlet.java
@@ -1,11 +1,11 @@
package me.chanjar.weixin.cp.demo;
+import me.chanjar.weixin.common.util.StringUtils;
import me.chanjar.weixin.cp.api.*;
import me.chanjar.weixin.cp.bean.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.WxCpXmlOutMessage;
import me.chanjar.weixin.cp.bean.WxCpXmlOutTextMessage;
import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil;
-import org.apache.commons.lang3.StringUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -21,8 +21,8 @@ import java.util.Map;
*/
public class WxCpDemoServlet extends HttpServlet {
- protected WxCpService wxCpService;
protected WxCpConfigStorage wxCpConfigStorage;
+ protected WxCpService wxCpService;
protected WxCpMessageRouter wxCpMessageRouter;
@Override public void init() throws ServletException {
@@ -37,7 +37,7 @@ public class WxCpDemoServlet extends HttpServlet {
wxCpService.setWxCpConfigStorage(config);
WxCpMessageHandler handler = new WxCpMessageHandler() {
- @Override public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context) {
+ @Override public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map context, WxCpService wxCpService) {
WxCpXmlOutTextMessage m = WxCpXmlOutMessage
.TEXT()
.content("测试加密消息")
@@ -48,7 +48,7 @@ public class WxCpDemoServlet extends HttpServlet {
}
};
- wxCpMessageRouter = new WxCpMessageRouter();
+ wxCpMessageRouter = new WxCpMessageRouter(wxCpService);
wxCpMessageRouter
.rule()
.async(false)
@@ -64,13 +64,14 @@ public class WxCpDemoServlet extends HttpServlet {
@Override protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
+ response.setContentType("text/html;charset=utf-8");
+ response.setStatus(HttpServletResponse.SC_OK);
+
String msgSignature = request.getParameter("msg_signature");
String nonce = request.getParameter("nonce");
String timestamp = request.getParameter("timestamp");
String echostr = request.getParameter("echostr");
- response.setContentType("text/html;charset=utf-8");
- response.setStatus(HttpServletResponse.SC_OK);
if (StringUtils.isNotBlank(echostr)) {
if (!wxCpService.checkSignature(msgSignature, timestamp, nonce, echostr)) {
// 消息签名不正确,说明不是公众平台发过来的消息
@@ -84,11 +85,8 @@ public class WxCpDemoServlet extends HttpServlet {
return;
}
-
WxCpXmlMessage inMessage = WxCpXmlMessage.fromEncryptedXml(request.getInputStream(), wxCpConfigStorage, timestamp, nonce, msgSignature);
-
WxCpXmlOutMessage outMessage = wxCpMessageRouter.route(inMessage);
-
if (outMessage != null) {
response.getWriter().write(outMessage.toEncryptedXml(wxCpConfigStorage));
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageHandler.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageHandler.java
index e80ff5a1f..8e6deeb6c 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageHandler.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageHandler.java
@@ -16,8 +16,9 @@ public interface WxMpMessageHandler {
*
* @param wxMessage
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
+ * @param wxMpService
* @return xml格式的消息,如果在异步规则里处理的话,可以返回null
*/
- public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context);
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService);
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageInterceptor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageInterceptor.java
index 901defeae..d940804f8 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageInterceptor.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageInterceptor.java
@@ -15,8 +15,9 @@ public interface WxMpMessageInterceptor {
* 拦截微信消息
* @param wxMessage
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
+ * @param wxMpService
* @return true代表OK,false代表不OK
*/
- public boolean intercept(WxMpXmlMessage wxMessage, Map context);
+ public boolean intercept(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService);
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
index f49cafe63..0dcbb9e00 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java
@@ -43,14 +43,20 @@ public class WxMpMessageRouter {
private final List rules = new ArrayList();
- private final ExecutorService es = Executors.newCachedThreadPool();
-
+ private final ExecutorService executorService = Executors.newCachedThreadPool();
+
+ private final WxMpService wxMpService;
+
+ public WxMpMessageRouter(WxMpService wxMpService) {
+ this.wxMpService = wxMpService;
+ }
+
/**
* 开始一个新的Route规则
* @return
*/
public Rule rule() {
- return new Rule(this);
+ return new Rule(this, wxMpService);
}
/**
@@ -73,7 +79,7 @@ public class WxMpMessageRouter {
if (matchRules.get(0).async) {
// 只要第一个是异步的,那就异步执行
// 在另一个线程里执行
- es.submit(new Runnable() {
+ executorService.submit(new Runnable() {
public void run() {
for (final Rule rule : matchRules) {
rule.service(wxMessage);
@@ -101,6 +107,8 @@ public class WxMpMessageRouter {
private final WxMpMessageRouter routerBuilder;
+ private final WxMpService wxMpService;
+
private boolean async = true;
private String msgType;
@@ -119,8 +127,9 @@ public class WxMpMessageRouter {
private List interceptors = new ArrayList();
- protected Rule(WxMpMessageRouter routerBuilder) {
+ protected Rule(WxMpMessageRouter routerBuilder, WxMpService wxMpService) {
this.routerBuilder = routerBuilder;
+ this.wxMpService = wxMpService;
}
/**
@@ -274,7 +283,7 @@ public class WxMpMessageRouter {
Map context = new HashMap();
// 如果拦截器不通过
for (WxMpMessageInterceptor interceptor : this.interceptors) {
- if (!interceptor.intercept(wxMessage, context)) {
+ if (!interceptor.intercept(wxMessage, context, wxMpService)) {
return null;
}
}
@@ -283,7 +292,7 @@ public class WxMpMessageRouter {
WxMpXmlOutMessage res = null;
for (WxMpMessageHandler handler : this.handlers) {
// 返回最后handler的结果
- res = handler.handle(wxMessage, context);
+ res = handler.handle(wxMessage, context, wxMpService);
}
return res;
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
index a4b4cc378..e55f261f1 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
@@ -10,6 +10,7 @@ import me.chanjar.weixin.common.bean.WxMenu;
import me.chanjar.weixin.common.bean.result.WxError;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.common.util.StringUtils;
import me.chanjar.weixin.common.util.crypto.SHA1;
import me.chanjar.weixin.common.util.fs.FileUtils;
import me.chanjar.weixin.common.util.http.*;
@@ -18,7 +19,6 @@ import me.chanjar.weixin.mp.bean.*;
import me.chanjar.weixin.mp.bean.result.*;
import me.chanjar.weixin.mp.util.http.QrCodeRequestExecutor;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
-import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
@@ -27,7 +27,6 @@ import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
@@ -38,7 +37,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxBaseAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxBaseAPITest.java
index 65d889281..f87d97a41 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxBaseAPITest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxBaseAPITest.java
@@ -1,6 +1,6 @@
package me.chanjar.weixin.mp.api;
-import org.apache.commons.lang3.StringUtils;
+import me.chanjar.weixin.common.util.StringUtils;
import org.testng.Assert;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
index b43ca3c84..b3c2460b1 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
@@ -47,7 +47,7 @@ public class WxMpMessageRouterTest {
@Test(dataProvider="messages-1")
public void testSync(WxMpXmlMessage message, String expected) {
StringBuffer sb = new StringBuffer();
- WxMpMessageRouter router = new WxMpMessageRouter();
+ WxMpMessageRouter router = new WxMpMessageRouter(null);
prepare(false, sb, router);
router.route(message);
Assert.assertEquals(sb.toString(), expected);
@@ -56,7 +56,7 @@ public class WxMpMessageRouterTest {
@Test(dataProvider="messages-1")
public void testAsync(WxMpXmlMessage message, String expected) throws InterruptedException {
StringBuffer sb = new StringBuffer();
- WxMpMessageRouter router = new WxMpMessageRouter();
+ WxMpMessageRouter router = new WxMpMessageRouter(null);
prepare(true, sb, router);
router.route(message);
Thread.sleep(500l);
@@ -64,10 +64,10 @@ public class WxMpMessageRouterTest {
}
public void testConcurrency() throws InterruptedException {
- final WxMpMessageRouter router = new WxMpMessageRouter();
+ final WxMpMessageRouter router = new WxMpMessageRouter(null);
router.rule().handler(new WxMpMessageHandler() {
@Override
- public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context) {
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService) {
return null;
}
}).end();
@@ -149,7 +149,7 @@ public class WxMpMessageRouterTest {
}
@Override
- public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context) {
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService) {
sb.append(this.echoStr).append(',');
return null;
}
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServlet.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServlet.java
index 7ceb2e269..11694a5a2 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServlet.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServlet.java
@@ -1,10 +1,10 @@
package me.chanjar.weixin.mp.demo;
+import me.chanjar.weixin.common.util.StringUtils;
import me.chanjar.weixin.mp.api.*;
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage;
-import org.apache.commons.lang3.StringUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -20,8 +20,8 @@ import java.util.Map;
*/
public class WxMpDemoServlet extends HttpServlet {
- protected WxMpService wxMpService;
protected WxMpConfigStorage wxMpConfigStorage;
+ protected WxMpService wxMpService;
protected WxMpMessageRouter wxMpMessageRouter;
@Override public void init() throws ServletException {
@@ -36,7 +36,7 @@ public class WxMpDemoServlet extends HttpServlet {
wxMpService.setWxMpConfigStorage(config);
WxMpMessageHandler handler = new WxMpMessageHandler() {
- @Override public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context) {
+ @Override public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService) {
WxMpXmlOutTextMessage m
= WxMpXmlOutMessage.TEXT().content("测试加密消息").fromUser(wxMessage.getToUserName())
.toUser(wxMessage.getFromUserName()).build();
@@ -44,7 +44,7 @@ public class WxMpDemoServlet extends HttpServlet {
}
};
- wxMpMessageRouter = new WxMpMessageRouter();
+ wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
wxMpMessageRouter
.rule()
.async(false)
@@ -60,13 +60,13 @@ public class WxMpDemoServlet extends HttpServlet {
@Override protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
+ response.setContentType("text/html;charset=utf-8");
+ response.setStatus(HttpServletResponse.SC_OK);
+
String signature = request.getParameter("signature");
String nonce = request.getParameter("nonce");
String timestamp = request.getParameter("timestamp");
- response.setContentType("text/html;charset=utf-8");
- response.setStatus(HttpServletResponse.SC_OK);
-
if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
// 消息签名不正确,说明不是公众平台发过来的消息
response.getWriter().println("非法请求");
@@ -84,31 +84,25 @@ public class WxMpDemoServlet extends HttpServlet {
"raw" :
request.getParameter("encrypt_type");
- WxMpXmlMessage inMessage = null;
-
if ("raw".equals(encryptType)) {
// 明文传输的消息
- inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
- } else if ("aes".equals(encryptType)) {
+ WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
+ WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
+ response.getWriter().write(outMessage.toXml());
+ return;
+ }
+
+ if ("aes".equals(encryptType)) {
// 是aes加密的消息
String msgSignature = request.getParameter("msg_signature");
- inMessage = WxMpXmlMessage.fromEncryptedXml(request.getInputStream(), wxMpConfigStorage, timestamp, nonce, msgSignature);
- } else {
- response.getWriter().println("不可识别的加密类型");
- return;
- }
-
- WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
-
- if (outMessage != null) {
- if ("raw".equals(encryptType)) {
- response.getWriter().write(outMessage.toXml());
- } else if ("aes".equals(encryptType)) {
- response.getWriter().write(outMessage.toEncryptedXml(wxMpConfigStorage));
- }
+ WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(request.getInputStream(), wxMpConfigStorage, timestamp, nonce, msgSignature);
+ WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
+ response.getWriter().write(outMessage.toEncryptedXml(wxMpConfigStorage));
return;
}
+ response.getWriter().println("不可识别的加密类型");
+ return;
}
}