Skip to content

Commit 00a197a

Browse files
committed
Merge pull request #254 from kakotor/develop
XStreamTransformer 增加注册方法,来注册自定义的消息类型
2 parents 72aab0d + 0619c3f commit 00a197a

File tree

5 files changed

+100
-7
lines changed

5 files changed

+100
-7
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ public static <T> T fromXml(Class<T> clazz, InputStream is) {
3131
return object;
3232
}
3333

34+
/**
35+
* 注册扩展消息的解析器
36+
* @param clz 类型
37+
* @param xStream xml解析器
38+
*/
39+
public static void register(Class clz,XStream xStream){
40+
CLASS_2_XSTREAM_INSTANCE.put(clz,xStream);
41+
}
42+
3443
/**
3544
* pojo -> xml
3645
*

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpXmlOutTransferCustomerServiceMessage.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,22 @@
44
import com.thoughtworks.xstream.annotations.XStreamConverter;
55
import me.chanjar.weixin.common.api.WxConsts;
66
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
7-
import me.chanjar.weixin.common.util.xml.XStreamMediaIdConverter;
87

98
@XStreamAlias("xml")
109
public class WxMpXmlOutTransferCustomerServiceMessage extends WxMpXmlOutMessage {
1110
@XStreamAlias("TransInfo")
12-
protected final TransInfo transInfo = new TransInfo();
11+
protected TransInfo transInfo;
1312

1413
public WxMpXmlOutTransferCustomerServiceMessage() {
1514
this.msgType = WxConsts.CUSTOM_MSG_TRANSFER_CUSTOMER_SERVICE;
1615
}
1716

18-
public String getKfAccount() {
19-
return transInfo.getKfAccount();
17+
public TransInfo getTransInfo() {
18+
return transInfo;
2019
}
2120

22-
public void setKfAccount(String kfAccount) {
23-
transInfo.setKfAccount(kfAccount);
21+
public void setTransInfo(TransInfo transInfo) {
22+
this.transInfo = transInfo;
2423
}
2524

2625
@XStreamAlias("TransInfo")

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/outxmlbuilder/TransferCustomerServiceBuilder.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.chanjar.weixin.mp.bean.outxmlbuilder;
22

3+
import me.chanjar.weixin.common.util.StringUtils;
34
import me.chanjar.weixin.mp.bean.WxMpXmlOutTransferCustomerServiceMessage;
45

56
/**
@@ -22,7 +23,11 @@ public TransferCustomerServiceBuilder kfAccount(String kfAccount) {
2223
public WxMpXmlOutTransferCustomerServiceMessage build() {
2324
WxMpXmlOutTransferCustomerServiceMessage m = new WxMpXmlOutTransferCustomerServiceMessage();
2425
setCommon(m);
25-
m.setKfAccount(kfAccount);
26+
if(StringUtils.isNotBlank(kfAccount)){
27+
WxMpXmlOutTransferCustomerServiceMessage.TransInfo transInfo = new WxMpXmlOutTransferCustomerServiceMessage.TransInfo();
28+
transInfo.setKfAccount(kfAccount);
29+
m.setTransInfo(transInfo);
30+
}
2631
return m;
2732
}
2833
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XStreamTransformer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ public static <T> T fromXml(Class<T> clazz, InputStream is) {
3131
return object;
3232
}
3333

34+
/**
35+
* 注册扩展消息的解析器
36+
* @param clz 类型
37+
* @param xStream xml解析器
38+
*/
39+
public static void register(Class clz,XStream xStream){
40+
CLASS_2_XSTREAM_INSTANCE.put(clz,xStream);
41+
}
42+
43+
3444
/**
3545
* pojo -> xml
3646
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package me.chanjar.weixin.mp.bean;
2+
3+
import org.testng.Assert;
4+
import org.testng.annotations.Test;
5+
6+
/**
7+
* Created by ben on 2015/12/29.
8+
*/
9+
public class WxMpXmlOutTransferCustomerServiceMessageTest {
10+
@Test
11+
public void test() {
12+
WxMpXmlOutTransferCustomerServiceMessage m = new WxMpXmlOutTransferCustomerServiceMessage();
13+
m.setCreateTime(1399197672L);
14+
m.setFromUserName("fromuser");
15+
m.setToUserName("touser");
16+
17+
String expected = "<xml>" +
18+
"<ToUserName><![CDATA[touser]]></ToUserName>" +
19+
"<FromUserName><![CDATA[fromuser]]></FromUserName>" +
20+
"<CreateTime>1399197672</CreateTime>" +
21+
"<MsgType><![CDATA[transfer_customer_service]]></MsgType>" +
22+
"</xml>";
23+
System.out.println(m.toXml());
24+
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
25+
26+
expected = " <xml>" +
27+
"<ToUserName><![CDATA[touser]]></ToUserName>" +
28+
"<FromUserName><![CDATA[fromuser]]></FromUserName>" +
29+
"<CreateTime>1399197672</CreateTime>" +
30+
"<MsgType><![CDATA[transfer_customer_service]]></MsgType>" +
31+
"<TransInfo>" +
32+
"<KfAccount><![CDATA[test1@test]]></KfAccount>" +
33+
"</TransInfo>" +
34+
"</xml>";
35+
WxMpXmlOutTransferCustomerServiceMessage.TransInfo transInfo = new WxMpXmlOutTransferCustomerServiceMessage.TransInfo();
36+
transInfo.setKfAccount("test1@test");
37+
m.setTransInfo(transInfo);
38+
System.out.println(m.toXml());
39+
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
40+
}
41+
42+
@Test
43+
public void testBuild() {
44+
WxMpXmlOutTransferCustomerServiceMessage m = WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE().fromUser("fromuser").toUser("touser").build();
45+
m.setCreateTime(1399197672L);
46+
String expected = "<xml>" +
47+
"<ToUserName><![CDATA[touser]]></ToUserName>" +
48+
"<FromUserName><![CDATA[fromuser]]></FromUserName>" +
49+
"<CreateTime>1399197672</CreateTime>" +
50+
"<MsgType><![CDATA[transfer_customer_service]]></MsgType>" +
51+
"</xml>";
52+
System.out.println(m.toXml());
53+
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
54+
55+
56+
expected = " <xml>" +
57+
"<ToUserName><![CDATA[touser]]></ToUserName>" +
58+
"<FromUserName><![CDATA[fromuser]]></FromUserName>" +
59+
"<CreateTime>1399197672</CreateTime>" +
60+
"<MsgType><![CDATA[transfer_customer_service]]></MsgType>" +
61+
"<TransInfo>" +
62+
"<KfAccount><![CDATA[test1@test]]></KfAccount>" +
63+
"</TransInfo>" +
64+
"</xml>";
65+
m = WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE().kfAccount("test1@test").fromUser("fromuser").toUser("touser").build();
66+
m.setCreateTime(1399197672L);
67+
System.out.println(m.toXml());
68+
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
69+
}
70+
}

0 commit comments

Comments
 (0)