Browse Source

:art: remove commons-beanutils dependency

NaccOll 2 years ago
parent
commit
27bccb3a7e

+ 0 - 5
weixin-java-pay/pom.xml

@@ -36,11 +36,6 @@
     </dependency>
 
     <dependency>
-      <groupId>commons-beanutils</groupId>
-      <artifactId>commons-beanutils</artifactId>
-      <version>1.9.4</version>
-    </dependency>
-    <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcpkix-jdk15on</artifactId>
     </dependency>

+ 31 - 2
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/EcommerceServiceImpl.java

@@ -13,16 +13,22 @@ import com.google.common.base.CaseFormat;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import lombok.RequiredArgsConstructor;
-import org.apache.commons.beanutils.BeanMap;
 import org.apache.commons.lang3.StringUtils;
 
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.nio.charset.StandardCharsets;
 import java.security.GeneralSecurityException;
 import java.text.DateFormat;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.LinkedHashMap;
 import java.util.Objects;
 import java.util.Set;
 
@@ -385,7 +391,7 @@ public class EcommerceServiceImpl implements EcommerceService {
    * @return 拼接好的string
    */
   private String parseURLPair(Object o) {
-    Map<Object, Object> map = new BeanMap(o);
+    Map<Object, Object> map = getObjectToMap(o);
     Set<Map.Entry<Object, Object>> set = map.entrySet();
     Iterator<Map.Entry<Object, Object>> it = set.iterator();
     StringBuilder sb = new StringBuilder();
@@ -399,4 +405,27 @@ public class EcommerceServiceImpl implements EcommerceService {
     return sb.deleteCharAt(sb.length() - 1).toString();
   }
 
+  public static Map<Object, Object> getObjectToMap(Object obj) {
+    try {
+      Map<Object, Object> result = new LinkedHashMap<>();
+      final Class<? extends Object> beanClass = obj.getClass();
+      final BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
+      final PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
+      if (propertyDescriptors != null) {
+        for (final PropertyDescriptor propertyDescriptor : propertyDescriptors) {
+          if (propertyDescriptor != null) {
+            final String name = propertyDescriptor.getName();
+            final Method readMethod = propertyDescriptor.getReadMethod();
+            if (readMethod != null) {
+              result.put(name, readMethod.invoke(obj));
+            }
+          }
+        }
+      }
+      return result;
+    } catch (IllegalAccessException | IntrospectionException | InvocationTargetException ignored) {
+      return null;
+    }
+  }
+
 }