Browse Source

xml代码优化

master
Binary Wang 6 years ago
parent
commit
0d7ea29652
4 changed files with 40 additions and 45 deletions
  1. +30
    -36
      weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamInitializer.java
  2. +7
    -1
      weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResult.java
  3. +1
    -2
      weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java
  4. +2
    -6
      weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResultTest.java

+ 30
- 36
weixin-java-common/src/main/java/me/chanjar/weixin/common/util/xml/XStreamInitializer.java View File

@@ -8,53 +8,47 @@ import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver; import com.thoughtworks.xstream.io.xml.XppDriver;
import com.thoughtworks.xstream.security.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission;


public class XStreamInitializer { public class XStreamInitializer {

public static XStream getInstance() {
XStream xstream = new XStream(new PureJavaReflectionProvider(), new XppDriver() {

@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out, getNameCoder()) {
protected String PREFIX_CDATA = "<![CDATA[";
protected String SUFFIX_CDATA = "]]>";
protected String PREFIX_MEDIA_ID = "<MediaId>";
protected String SUFFIX_MEDIA_ID = "</MediaId>";

@Override
protected void writeText(QuickWriter writer, String text) {
if (text.startsWith(this.PREFIX_CDATA) && text.endsWith(this.SUFFIX_CDATA)) {
writer.write(text);
} else if (text.startsWith(this.PREFIX_MEDIA_ID) && text.endsWith(this.SUFFIX_MEDIA_ID)) {
writer.write(text);
} else {
super.writeText(writer, text);
}

private static final XppDriver XPP_DRIVER = new XppDriver() {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out, getNameCoder()) {
private static final String PREFIX_CDATA = "<![CDATA[";
private static final String SUFFIX_CDATA = "]]>";
private static final String PREFIX_MEDIA_ID = "<MediaId>";
private static final String SUFFIX_MEDIA_ID = "</MediaId>";

@Override
protected void writeText(QuickWriter writer, String text) {
if (text.startsWith(PREFIX_CDATA) && text.endsWith(SUFFIX_CDATA)) {
writer.write(text);
} else if (text.startsWith(PREFIX_MEDIA_ID) && text.endsWith(SUFFIX_MEDIA_ID)) {
writer.write(text);
} else {
super.writeText(writer, text);
} }


@Override
public String encodeNode(String name) {
//防止将_转换成__
return name;
}
};
}
});
}


@Override
public String encodeNode(String name) {
//防止将_转换成__
return name;
}
};
}
};

public static XStream getInstance() {
XStream xstream = new XStream(new PureJavaReflectionProvider(), XPP_DRIVER);
xstream.ignoreUnknownElements(); xstream.ignoreUnknownElements();
xstream.setMode(XStream.NO_REFERENCES); xstream.setMode(XStream.NO_REFERENCES);
xstream.addPermission(NullPermission.NULL);
xstream.addPermission(PrimitiveTypePermission.PRIMITIVES);
XStream.setupDefaultSecurity(xstream);
xstream.allowTypesByWildcard(new String[]{ xstream.allowTypesByWildcard(new String[]{
"me.chanjar.weixin.**", "cn.binarywang.wx.**", "com.github.binarywang.**" "me.chanjar.weixin.**", "cn.binarywang.wx.**", "com.github.binarywang.**"
}); });


XStream.setupDefaultSecurity(xstream);

xstream.setClassLoader(Thread.currentThread().getContextClassLoader()); xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
return xstream; return xstream;
} }


+ 7
- 1
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResult.java View File

@@ -119,7 +119,7 @@ public class WxPayRefundResult extends BaseWxPayResult implements Serializable {
/** /**
* 组装生成退款代金券信息. * 组装生成退款代金券信息.
*/ */
public void composeRefundCoupons() {
private void composeRefundCoupons() {
List<WxPayRefundCouponInfo> coupons = Lists.newArrayList(); List<WxPayRefundCouponInfo> coupons = Lists.newArrayList();
Integer refundCount = this.getCouponRefundCount(); Integer refundCount = this.getCouponRefundCount();
if (refundCount == null) { if (refundCount == null) {
@@ -139,4 +139,10 @@ public class WxPayRefundResult extends BaseWxPayResult implements Serializable {


this.setRefundCoupons(coupons); this.setRefundCoupons(coupons);
} }

public static WxPayRefundResult fromXML(String xml) {
WxPayRefundResult result = BaseWxPayResult.fromXML(xml, WxPayRefundResult.class);
result.composeRefundCoupons();
return result;
}
} }

+ 1
- 2
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java View File

@@ -144,8 +144,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService {


String url = this.getPayBaseUrl() + "/secapi/pay/refund"; String url = this.getPayBaseUrl() + "/secapi/pay/refund";
String responseContent = this.post(url, request.toXML(), true); String responseContent = this.post(url, request.toXML(), true);
WxPayRefundResult result = BaseWxPayResult.fromXML(responseContent, WxPayRefundResult.class);
result.composeRefundCoupons();
WxPayRefundResult result = WxPayRefundResult.fromXML(responseContent);
result.checkResult(this, request.getSignType(), true); result.checkResult(this, request.getSignType(), true);
return result; return result;
} }


+ 2
- 6
weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxPayRefundResultTest.java View File

@@ -13,11 +13,8 @@ import static org.assertj.core.api.Assertions.assertThat;
*/ */
public class WxPayRefundResultTest { public class WxPayRefundResultTest {


/**
* Test compose refund coupons.
*/
@Test @Test
public void testComposeRefundCoupons() {
public void testFromXML() {
/* /*
该xml字符串来自于官方文档示例,稍加改造,加上代金卷 该xml字符串来自于官方文档示例,稍加改造,加上代金卷
refund_channel 是个什么鬼,官方文档只字不提 refund_channel 是个什么鬼,官方文档只字不提
@@ -43,8 +40,7 @@ public class WxPayRefundResultTest {
" <refund_fee>2</refund_fee> \n" + " <refund_fee>2</refund_fee> \n" +
"</xml>"; "</xml>";


WxPayRefundResult result = WxPayRefundResult.fromXML(xmlString, WxPayRefundResult.class);
result.composeRefundCoupons();
WxPayRefundResult result = WxPayRefundResult.fromXML(xmlString);


assertThat(result.getRefundCoupons()).isNotEmpty(); assertThat(result.getRefundCoupons()).isNotEmpty();
assertThat(result.getRefundCoupons().get(0).getCouponRefundId()).isEqualTo("123"); assertThat(result.getRefundCoupons().get(0).getCouponRefundId()).isEqualTo("123");


Loading…
Cancel
Save