diff --git a/weixin4j-base/pom.xml b/weixin4j-base/pom.xml
index c8fcfe04..8f73da1b 100644
--- a/weixin4j-base/pom.xml
+++ b/weixin4j-base/pom.xml
@@ -24,7 +24,7 @@
commons-httpclient
commons-httpclient
- 3.1
+ 3.0
true
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java
index af4d2f6b..4dc51c6c 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3.java
@@ -43,8 +43,8 @@ import com.foxinmy.weixin4j.model.Consts;
import com.foxinmy.weixin4j.util.StringUtil;
/**
- * Apache HttpComponent 3.x
- *
+ * Requires commons-httpclient 3.0 or higher
+ *
* @className HttpComponent3
* @author jinyu(foxinmy@gmail.com)
* @date 2015年8月18日
@@ -116,8 +116,11 @@ public class HttpComponent3 extends AbstractHttpClient {
httpClient.getHttpConnectionManager().getParams()
.setSendBufferSize(params.getChunkSize());
httpMethod.getParams().setSoTimeout(params.getSocketTimeout());
- httpMethod.getParams().setHttpElementCharset(Consts.UTF_8.name());
- httpMethod.getParams().setUriCharset(Consts.UTF_8.name());
+ httpMethod.getParams().setHttpElementCharset(
+ Consts.UTF_8.name());
+ httpMethod.getParams().setParameter(
+ "http.protocol.uri-charset", Consts.UTF_8.name());
+ // httpMethod.getParams().setUriCharset(Consts.UTF_8.name());
httpMethod.getParams().setContentCharset(Consts.UTF_8.name());
}
if (useSSL) {
@@ -143,8 +146,7 @@ public class HttpComponent3 extends AbstractHttpClient {
if (!headers.containsKey(HttpHeaders.USER_AGENT)) {
headers.set(HttpHeaders.USER_AGENT, "apache/httpclient3");
}
- for (Entry> header : headers
- .entrySet()) {
+ for (Entry> header : headers.entrySet()) {
if (HttpHeaders.COOKIE.equalsIgnoreCase(header.getKey())) {
httpMethod.setRequestHeader(header.getKey(),
StringUtil.join(header.getValue(), ';'));
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Factory.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Factory.java
index 56c1aae5..4428eaa1 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Factory.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Factory.java
@@ -3,8 +3,8 @@ package com.foxinmy.weixin4j.http.factory;
import org.apache.commons.httpclient.HttpClient;
/**
- * 使用Apache的HttpClient3.x
- *
+ * 使用commons-httpclient3.x
+ *
* @className HttpComponent3Factory
* @author jinyu(foxinmy@gmail.com)
* @date 2015年8月12日
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Response.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Response.java
index 9f82c96a..c3d10376 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Response.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/factory/HttpComponent3Response.java
@@ -12,8 +12,8 @@ import com.foxinmy.weixin4j.http.HttpStatus;
import com.foxinmy.weixin4j.http.HttpVersion;
/**
- * HttpComponent3 Response
- *
+ * HttpComponent3 Response:Requires commons-httpclient 3.0 or higher
+ *
* @className HttpComponent3Response
* @author jinyu(foxinmy@gmail.com)
* @date 2015年8月17日
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java
index 9fa31f4f..3bf094fc 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java
@@ -18,7 +18,7 @@ import com.foxinmy.weixin4j.xml.XmlStream;
* @date 2015年1月9日
* @since JDK 1.6
*/
-public class FileTokenStorager implements TokenStorager {
+public class FileTokenStorager extends TokenStorager {
private final String cachePath;
@@ -37,7 +37,7 @@ public class FileTokenStorager implements TokenStorager {
if (token.getCreateTime() < 0) {
return token;
}
- if ((token.getCreateTime() + (token.getExpiresIn() * 1000l) - CUTMS) > System
+ if ((token.getCreateTime() + (token.getExpiresIn() * 1000l) - ms()) > System
.currentTimeMillis()) {
return token;
}
@@ -83,7 +83,7 @@ public class FileTokenStorager implements TokenStorager {
@Override
public boolean accept(File file) {
return file.isFile()
- && file.getName().startsWith(PREFIX)
+ && file.getName().startsWith(prefix())
&& "xml".equals(FileUtil.getFileExtension(file
.getName()));
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemcacheTokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemcacheTokenStorager.java
index 1d54bee7..e6c57a23 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemcacheTokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemcacheTokenStorager.java
@@ -17,7 +17,7 @@ import com.whalin.MemCached.SockIOPool;
* @since JDK 1.6
* @see
*/
-public class MemcacheTokenStorager implements TokenStorager {
+public class MemcacheTokenStorager extends TokenStorager {
private final MemCachedClient mc;
@@ -36,7 +36,7 @@ public class MemcacheTokenStorager implements TokenStorager {
if (token.getExpiresIn() > 0) {
mc.set(cacheKey, token,
new Date(token.getCreateTime() + token.getExpiresIn()
- * 1000 - CUTMS));
+ * 1000 - ms()));
} else {
mc.set(cacheKey, token);
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemoryTokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemoryTokenStorager.java
index ee1c200b..489b89e7 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemoryTokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/MemoryTokenStorager.java
@@ -14,7 +14,7 @@ import com.foxinmy.weixin4j.model.Token;
* @since JDK 1.6
* @see
*/
-public class MemoryTokenStorager implements TokenStorager {
+public class MemoryTokenStorager extends TokenStorager {
private final Map CONMAP;
@@ -26,7 +26,7 @@ public class MemoryTokenStorager implements TokenStorager {
public Token lookup(String cacheKey) {
Token token = this.CONMAP.get(cacheKey);
if (token != null) {
- if ((token.getCreateTime() + (token.getExpiresIn() * 1000l) - CUTMS) > System
+ if ((token.getCreateTime() + (token.getExpiresIn() * 1000l) - ms()) > System
.currentTimeMillis()) {
return token;
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java
index 845cefff..bb57bbe7 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java
@@ -19,7 +19,7 @@ import com.foxinmy.weixin4j.model.Token;
* @date 2015年1月9日
* @since JDK 1.6
*/
-public class RedisTokenStorager implements TokenStorager {
+public class RedisTokenStorager extends TokenStorager {
private JedisPool jedisPool;
@@ -79,7 +79,7 @@ public class RedisTokenStorager implements TokenStorager {
jedis.hmset(cacheKey, token2map(token));
if (token.getExpiresIn() > 0) {
jedis.expire(cacheKey, token.getExpiresIn()
- - (int) (CUTMS / 1000l));
+ - (int) (ms() / 1000l));
}
} finally {
if (jedis != null) {
@@ -130,7 +130,7 @@ public class RedisTokenStorager implements TokenStorager {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
- Set cacheKeys = jedis.keys(String.format("%s*", PREFIX));
+ Set cacheKeys = jedis.keys(String.format("%s*", prefix()));
if (!cacheKeys.isEmpty()) {
Pipeline pipeline = jedis.pipelined();
for (String cacheKey : cacheKeys) {
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java
index e03cc00f..0f9431a6 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java
@@ -15,13 +15,22 @@ import com.foxinmy.weixin4j.model.Token;
* @see RedisTokenStorager
* @see MemcacheTokenStorager
*/
-public interface TokenStorager extends CacheStorager {
+public abstract class TokenStorager implements CacheStorager {
/**
- * 考虑到临界情况,在实际有效时间上减去60秒
+ * 考虑到临界情况,实际token的有效时间减去该毫秒数
+ *
+ * @return 默认为60秒
*/
- final long CUTMS = 60 * 1000l;
+ public long ms() {
+ return 60 * 1000l;
+ }
+
/**
* 缓存key的前缀
+ *
+ * @return 默认为weixin4j_
*/
- final String PREFIX = "weixin4j_";
+ public String prefix() {
+ return "weixin4j_";
+ }
}