Skip to content

Commit 4b88c3d

Browse files
committed
去掉joor的依赖,并重构相关反射代码 for #58
1 parent 5885ce8 commit 4b88c3d

File tree

6 files changed

+96
-132
lines changed

6 files changed

+96
-132
lines changed

pom.xml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
<jedis.version>2.9.0</jedis.version>
5454
<gson.version>2.7</gson.version>
5555
<guava.version>19.0</guava.version>
56-
<joor.version>0.9.6</joor.version>
5756
<commons-lang3.version>3.4</commons-lang3.version>
5857
<commons-io.version>2.5</commons-io.version>
5958
<commons-codec.version>1.10</commons-codec.version>
@@ -113,10 +112,6 @@
113112
<groupId>com.google.guava</groupId>
114113
<artifactId>guava</artifactId>
115114
</dependency>
116-
<dependency>
117-
<groupId>org.jooq</groupId>
118-
<artifactId>joor</artifactId>
119-
</dependency>
120115
</dependencies>
121116

122117
<dependencyManagement>
@@ -162,11 +157,6 @@
162157
<artifactId>guava</artifactId>
163158
<version>${guava.version}</version>
164159
</dependency>
165-
<dependency>
166-
<groupId>org.jooq</groupId>
167-
<artifactId>joor</artifactId>
168-
<version>${joor.version}</version>
169-
</dependency>
170160
</dependencies>
171161
</dependencyManagement>
172162

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package me.chanjar.weixin.common.util;
2+
3+
import com.google.common.collect.Lists;
4+
import com.google.common.collect.Maps;
5+
import com.thoughtworks.xstream.annotations.XStreamAlias;
6+
import me.chanjar.weixin.common.annotation.Required;
7+
import me.chanjar.weixin.common.bean.result.WxError;
8+
import me.chanjar.weixin.common.exception.WxErrorException;
9+
10+
import java.lang.reflect.Field;
11+
import java.util.List;
12+
import java.util.Map;
13+
14+
/**
15+
* <pre>
16+
* bean操作的一些工具类
17+
* Created by Binary Wang on 2016-10-21.
18+
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
19+
* </pre>
20+
*/
21+
public class BeanUtils {
22+
23+
/**
24+
* 检查bean里标记为@Required的field是否为空,为空则抛异常
25+
* @param bean 要检查的bean对象
26+
* @throws WxErrorException
27+
*/
28+
public static void checkRequiredFields(Object bean) throws WxErrorException {
29+
List<String> nullFields = Lists.newArrayList();
30+
31+
for (Field field : bean.getClass().getDeclaredFields()) {
32+
try {
33+
boolean isAccessible = field.isAccessible();
34+
field.setAccessible(true);
35+
if (field.isAnnotationPresent(Required.class)
36+
&& field.get(bean) == null) {
37+
nullFields.add(field.getName());
38+
}
39+
field.setAccessible(isAccessible);
40+
} catch (SecurityException | IllegalArgumentException
41+
| IllegalAccessException e) {
42+
e.printStackTrace();
43+
}
44+
}
45+
46+
if (!nullFields.isEmpty()) {
47+
throw new WxErrorException(WxError.newBuilder().setErrorMsg("必填字段 " + nullFields + " 必须提供值").build());
48+
}
49+
}
50+
51+
/**
52+
* 将bean按照@XStreamAlias标识的字符串内容生成以之为key的map对象
53+
* @param bean 包含@XStreamAlias的xml bean对象
54+
* @return map对象
55+
*/
56+
public static Map<String, String> xmlBean2Map(Object bean) {
57+
Map<String, String> result = Maps.newHashMap();
58+
for (Field field : bean.getClass().getDeclaredFields()) {
59+
try {
60+
boolean isAccessible = field.isAccessible();
61+
field.setAccessible(true);
62+
if (field.get(bean) == null) {
63+
field.setAccessible(isAccessible);
64+
continue;
65+
}
66+
67+
if (field.isAnnotationPresent(XStreamAlias.class)) {
68+
result.put(field.getAnnotation(XStreamAlias.class).value(),
69+
field.get(bean).toString());
70+
}
71+
72+
field.setAccessible(isAccessible);
73+
} catch (SecurityException | IllegalArgumentException
74+
| IllegalAccessException e) {
75+
e.printStackTrace();
76+
}
77+
78+
}
79+
80+
return result;
81+
}
82+
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpPayServiceImpl.java

Lines changed: 11 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package me.chanjar.weixin.mp.api.impl;
22

3-
import com.google.common.collect.Lists;
4-
import com.google.common.collect.Maps;
53
import com.thoughtworks.xstream.XStream;
6-
import com.thoughtworks.xstream.annotations.XStreamAlias;
7-
import me.chanjar.weixin.common.annotation.Required;
84
import me.chanjar.weixin.common.bean.result.WxError;
95
import me.chanjar.weixin.common.exception.WxErrorException;
6+
import me.chanjar.weixin.common.util.BeanUtils;
107
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
118
import me.chanjar.weixin.mp.api.WxMpPayService;
129
import me.chanjar.weixin.mp.api.WxMpService;
@@ -23,15 +20,12 @@
2320
import org.apache.http.impl.client.HttpClients;
2421
import org.apache.http.ssl.SSLContexts;
2522
import org.apache.http.util.EntityUtils;
26-
import org.joor.Reflect;
2723

2824
import javax.net.ssl.SSLContext;
2925
import java.io.File;
3026
import java.io.FileInputStream;
31-
import java.lang.reflect.Field;
3227
import java.security.KeyStore;
3328
import java.util.*;
34-
import java.util.Map.Entry;
3529

3630
/**
3731
* Created by Binary Wang on 2016/7/28.
@@ -116,7 +110,7 @@ public WxMpPayRefundResult refund(WxMpPayRefundRequest request, File keyFile)
116110
request.setMchId(partnerId);
117111
request.setNonceStr( System.currentTimeMillis() + "");
118112
request.setOpUserId(partnerId);
119-
String sign = this.createSign(this.xmlBean2Map(request), this.wxMpService.getWxMpConfigStorage().getPartnerKey());
113+
String sign = this.createSign(BeanUtils.xmlBean2Map(request), this.wxMpService.getWxMpConfigStorage().getPartnerKey());
120114
request.setSign(sign);
121115

122116
String url = PAY_BASE_URL + "/secapi/pay/refund";
@@ -138,8 +132,8 @@ public WxMpPayRefundResult refund(WxMpPayRefundRequest request, File keyFile)
138132
return wxMpPayRefundResult;
139133
}
140134

141-
private void checkParameters(WxMpPayRefundRequest request) {
142-
checkNotNullParams(request);
135+
private void checkParameters(WxMpPayRefundRequest request) throws WxErrorException {
136+
BeanUtils.checkRequiredFields(request);
143137

144138
if (StringUtils.isNotBlank(request.getRefundAccount())) {
145139
if(!ArrayUtils.contains(REFUND_ACCOUNT, request.getRefundAccount())){
@@ -171,7 +165,7 @@ public WxRedpackResult sendRedpack(WxSendRedpackRequest request, File keyFile)
171165
request.setMchId(mchId);
172166
request.setNonceStr(System.currentTimeMillis() + "");
173167

174-
String sign = this.createSign(this.xmlBean2Map(request),
168+
String sign = this.createSign(BeanUtils.xmlBean2Map(request),
175169
this.wxMpService.getWxMpConfigStorage().getPartnerKey());
176170
request.setSign(sign);
177171

@@ -194,29 +188,6 @@ public WxRedpackResult sendRedpack(WxSendRedpackRequest request, File keyFile)
194188
return redpackResult;
195189
}
196190

197-
private Map<String, String> xmlBean2Map(Object bean) {
198-
Map<String, String> result = Maps.newHashMap();
199-
for (Entry<String, Reflect> entry : Reflect.on(bean).fields().entrySet()) {
200-
Reflect reflect = entry.getValue();
201-
if (reflect.get() == null) {
202-
continue;
203-
}
204-
205-
try {
206-
Field field = bean.getClass().getDeclaredField(entry.getKey());
207-
if (field.isAnnotationPresent(XStreamAlias.class)) {
208-
result.put(field.getAnnotation(XStreamAlias.class).value(),
209-
reflect.get().toString());
210-
}
211-
} catch (NoSuchFieldException | SecurityException e) {
212-
e.printStackTrace();
213-
}
214-
215-
}
216-
217-
return result;
218-
}
219-
220191
/**
221192
* 微信公众号支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3)
222193
* @param packageParams 原始参数
@@ -253,7 +224,7 @@ public WxUnifiedOrderResult unifiedOrder(WxUnifiedOrderRequest request)
253224
request.setMchId(this.wxMpService.getWxMpConfigStorage().getPartnerId());
254225
request.setNonceStr(System.currentTimeMillis() + "");
255226

256-
String sign = this.createSign(this.xmlBean2Map(request),
227+
String sign = this.createSign(BeanUtils.xmlBean2Map(request),
257228
this.wxMpService.getWxMpConfigStorage().getPartnerKey());
258229
request.setSign(sign);
259230

@@ -271,8 +242,8 @@ public WxUnifiedOrderResult unifiedOrder(WxUnifiedOrderRequest request)
271242
return result;
272243
}
273244

274-
private void checkParameters(WxUnifiedOrderRequest request) {
275-
checkNotNullParams(request);
245+
private void checkParameters(WxUnifiedOrderRequest request) throws WxErrorException {
246+
BeanUtils.checkRequiredFields(request);
276247

277248
if (! ArrayUtils.contains(TRADE_TYPES, request.getTradeType())) {
278249
throw new IllegalArgumentException("trade_type目前必须为" + Arrays.toString(TRADE_TYPES) + "其中之一");
@@ -287,27 +258,6 @@ private void checkParameters(WxUnifiedOrderRequest request) {
287258
}
288259
}
289260

290-
private void checkNotNullParams(Object request) {
291-
List<String> nullFields = Lists.newArrayList();
292-
for (Entry<String, Reflect> entry : Reflect.on(request).fields()
293-
.entrySet()) {
294-
Reflect reflect = entry.getValue();
295-
try {
296-
Field field = request.getClass().getDeclaredField(entry.getKey());
297-
if (field.isAnnotationPresent(Required.class)
298-
&& reflect.get() == null) {
299-
nullFields.add(entry.getKey());
300-
}
301-
} catch (NoSuchFieldException | SecurityException e) {
302-
e.printStackTrace();
303-
}
304-
}
305-
306-
if (!nullFields.isEmpty()) {
307-
throw new IllegalArgumentException("必填字段[" + nullFields + "]必须提供值");
308-
}
309-
}
310-
311261
@Override
312262
public Map<String, String> getPayInfo(WxUnifiedOrderRequest request) throws WxErrorException {
313263
WxUnifiedOrderResult unifiedOrderResult = this.unifiedOrder(request);
@@ -345,7 +295,7 @@ public Map<String, String> getPayInfo(WxUnifiedOrderRequest request) throws WxEr
345295

346296
@Override
347297
public WxEntPayResult entPay(WxEntPayRequest request, File keyFile) throws WxErrorException {
348-
checkNotNullParams(request);
298+
BeanUtils.checkRequiredFields(request);
349299

350300
XStream xstream = XStreamInitializer.getInstance();
351301
xstream.processAnnotations(WxEntPayRequest.class);
@@ -355,7 +305,7 @@ public WxEntPayResult entPay(WxEntPayRequest request, File keyFile) throws WxErr
355305
request.setMchId(this.wxMpService.getWxMpConfigStorage().getPartnerId());
356306
request.setNonceStr(System.currentTimeMillis() + "");
357307

358-
String sign = this.createSign(xmlBean2Map(request), this.wxMpService.getWxMpConfigStorage().getPartnerKey());
308+
String sign = this.createSign(BeanUtils.xmlBean2Map(request), this.wxMpService.getWxMpConfigStorage().getPartnerKey());
359309
request.setSign(sign);
360310

361311
String url = PAY_BASE_URL + "/mmpaymkttransfers/promotion/transfers";
@@ -380,7 +330,7 @@ public WxEntPayQueryResult queryEntPay(String partnerTradeNo, File keyFile) thro
380330
request.setMchId(this.wxMpService.getWxMpConfigStorage().getPartnerId());
381331
request.setNonceStr(System.currentTimeMillis() + "");
382332

383-
String sign = this.createSign(xmlBean2Map(request), this.wxMpService.getWxMpConfigStorage().getPartnerKey());
333+
String sign = this.createSign(BeanUtils.xmlBean2Map(request), this.wxMpService.getWxMpConfigStorage().getPartnerKey());
384334
request.setSign(sign);
385335

386336
String url = PAY_BASE_URL + "/mmpaymkttransfers/gettransferinfo";

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
package me.chanjar.weixin.mp.api.impl;
22

3-
import com.google.common.collect.Lists;
43
import com.google.gson.JsonObject;
54
import com.google.gson.JsonParser;
65
import com.google.gson.reflect.TypeToken;
7-
import me.chanjar.weixin.common.annotation.Required;
86
import me.chanjar.weixin.common.bean.result.WxError;
97
import me.chanjar.weixin.common.exception.WxErrorException;
8+
import me.chanjar.weixin.common.util.BeanUtils;
109
import me.chanjar.weixin.mp.api.WxMpService;
1110
import me.chanjar.weixin.mp.api.WxMpStoreService;
1211
import me.chanjar.weixin.mp.bean.store.WxMpStoreBaseInfo;
1312
import me.chanjar.weixin.mp.bean.store.WxMpStoreInfo;
1413
import me.chanjar.weixin.mp.bean.store.WxMpStoreListResult;
1514
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
16-
import org.joor.Reflect;
1715

18-
import java.lang.reflect.Field;
1916
import java.util.List;
20-
import java.util.Map.Entry;
2117

2218
/**
2319
* Created by Binary Wang on 2016/9/26.
@@ -35,7 +31,7 @@ public WxMpStoreServiceImpl(WxMpService wxMpService) {
3531

3632
@Override
3733
public void add(WxMpStoreBaseInfo request) throws WxErrorException {
38-
checkParameters(request);
34+
BeanUtils.checkRequiredFields(request);
3935

4036
String url = API_BASE_URL + "/addpoi";
4137
String response = this.wxMpService.post(url, request.toJson());
@@ -71,28 +67,6 @@ public void delete(String poiId) throws WxErrorException {
7167
}
7268
}
7369

74-
private void checkParameters(WxMpStoreBaseInfo request) {
75-
List<String> nullFields = Lists.newArrayList();
76-
for (Entry<String, Reflect> entry : Reflect.on(request).fields()
77-
.entrySet()) {
78-
Reflect reflect = entry.getValue();
79-
try {
80-
Field field = request.getClass().getDeclaredField(entry.getKey());
81-
if (field.isAnnotationPresent(Required.class)
82-
&& reflect.get() == null) {
83-
nullFields.add(entry.getKey());
84-
}
85-
} catch (NoSuchFieldException | SecurityException e) {
86-
e.printStackTrace();
87-
}
88-
}
89-
90-
if (!nullFields.isEmpty()) {
91-
throw new IllegalArgumentException("必填字段[" + nullFields + "]必须提供值");
92-
}
93-
94-
}
95-
9670
@Override
9771
public WxMpStoreListResult list(int begin, int limit)
9872
throws WxErrorException {

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImplTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class WxMpStoreServiceImplTest {
3030
* @throws WxErrorException
3131
*/
3232
public void testAdd() throws WxErrorException {
33+
this.wxMpService.getStoreService().add(WxMpStoreBaseInfo.builder().build());
3334
this.wxMpService.getStoreService()
3435
.add(WxMpStoreBaseInfo.builder().businessName("haha").branchName("abc")
3536
.province("aaa").district("aaa").telephone("122").address("abc").categories(new String[] { "美食,江浙菜" })

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/pay/WxSendRedpackRequestTest.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)