Skip to content

Commit 84aa3cf

Browse files
committed
binarywang#651 WxMpXmlMessage增加allFieldsMap属性, 用于存放所有xml属性和值。
1 parent 4a62a3f commit 84aa3cf

File tree

2 files changed

+97
-2
lines changed

2 files changed

+97
-2
lines changed

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.IOException;
44
import java.io.InputStream;
55
import java.io.Serializable;
6+
import java.util.Map;
67

78
import org.apache.commons.io.IOUtils;
89

@@ -11,6 +12,7 @@
1112
import lombok.Data;
1213
import lombok.extern.slf4j.Slf4j;
1314
import me.chanjar.weixin.common.api.WxConsts;
15+
import me.chanjar.weixin.common.util.XmlUtils;
1416
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
1517
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
1618
import me.chanjar.weixin.mp.util.crypto.WxMpCryptUtil;
@@ -33,6 +35,11 @@
3335
public class WxMpXmlMessage implements Serializable {
3436
private static final long serialVersionUID = -3586245291677274914L;
3537

38+
/**
39+
* 使用dom4j解析的存放所有xml属性和值的map.
40+
*/
41+
private Map<String, Object> allFieldsMap;
42+
3643
///////////////////////
3744
// 以下都是微信推送过来的消息的xml的element所对应的属性
3845
///////////////////////
@@ -562,7 +569,9 @@ public class WxMpXmlMessage implements Serializable {
562569
public static WxMpXmlMessage fromXml(String xml) {
563570
//修改微信变态的消息内容格式,方便解析
564571
xml = xml.replace("</PicList><PicList>", "");
565-
return XStreamTransformer.fromXml(WxMpXmlMessage.class, xml);
572+
final WxMpXmlMessage xmlMessage = XStreamTransformer.fromXml(WxMpXmlMessage.class, xml);
573+
xmlMessage.setAllFieldsMap(XmlUtils.xml2Map(xml));
574+
return xmlMessage;
566575
}
567576

568577
public static WxMpXmlMessage fromXml(InputStream is) {

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package me.chanjar.weixin.mp.bean.message;
22

3-
import me.chanjar.weixin.common.api.WxConsts;
3+
import java.util.List;
4+
import java.util.Map;
5+
46
import org.testng.annotations.*;
57

8+
import me.chanjar.weixin.common.api.WxConsts;
9+
10+
import static org.assertj.core.api.Assertions.assertThat;
611
import static org.testng.Assert.*;
712

813
@Test
@@ -170,4 +175,85 @@ public void testFromXml2() {
170175
assertEquals(wxMessage.getSendLocationInfo().getPoiName(), "wo de poi");
171176
}
172177

178+
public void testFromXml_MASSSENDJOBFINISH() {
179+
//xml样例来自 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1481187827_i0l21
180+
String xml = "<xml>\n" +
181+
"<ToUserName><![CDATA[gh_4d00ed8d6399]]></ToUserName>\n" +
182+
"<FromUserName><![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]></FromUserName>\n" +
183+
"<CreateTime>1481013459</CreateTime>\n" +
184+
"<MsgType><![CDATA[event]]></MsgType>\n" +
185+
"<Event><![CDATA[MASSSENDJOBFINISH]]></Event>\n" +
186+
"<MsgID>1000001625</MsgID>\n" +
187+
"<Status><![CDATA[err(30003)]]></Status>\n" +
188+
"<TotalCount>0</TotalCount>\n" +
189+
"<FilterCount>0</FilterCount>\n" +
190+
"<SentCount>0</SentCount>\n" +
191+
"<ErrorCount>0</ErrorCount>\n" +
192+
"<CopyrightCheckResult>\n" +
193+
"<Count>2</Count>\n" +
194+
"<ResultList>\n" +
195+
"<item>\n" +
196+
"<ArticleIdx>1</ArticleIdx>\n" +
197+
"<UserDeclareState>0</UserDeclareState>\n" +
198+
"<AuditState>2</AuditState>\n" +
199+
"<OriginalArticleUrl><![CDATA[Url_1]]></OriginalArticleUrl>\n" +
200+
"<OriginalArticleType>1</OriginalArticleType>\n" +
201+
"<CanReprint>1</CanReprint>\n" +
202+
"<NeedReplaceContent>1</NeedReplaceContent>\n" +
203+
"<NeedShowReprintSource>1</NeedShowReprintSource>\n" +
204+
"</item>\n" +
205+
"<item>\n" +
206+
"<ArticleIdx>2</ArticleIdx>\n" +
207+
"<UserDeclareState>0</UserDeclareState>\n" +
208+
"<AuditState>2</AuditState>\n" +
209+
"<OriginalArticleUrl><![CDATA[Url_2]]></OriginalArticleUrl>\n" +
210+
"<OriginalArticleType>1</OriginalArticleType>\n" +
211+
"<CanReprint>1</CanReprint>\n" +
212+
"<NeedReplaceContent>1</NeedReplaceContent>\n" +
213+
"<NeedShowReprintSource>1</NeedShowReprintSource>\n" +
214+
"</item>\n" +
215+
"</ResultList>\n" +
216+
"<CheckState>2</CheckState>\n" +
217+
"</CopyrightCheckResult>\n" +
218+
"</xml>";
219+
WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml);
220+
assertEquals(wxMessage.getToUser(), "gh_4d00ed8d6399");
221+
assertEquals(wxMessage.getFromUser(), "oV5CrjpxgaGXNHIQigzNlgLTnwic");
222+
assertEquals(wxMessage.getCreateTime(), new Long(1481013459));
223+
assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
224+
assertEquals(wxMessage.getEvent(), "MASSSENDJOBFINISH");
225+
assertEquals(wxMessage.getMsgId(), new Long(1000001625L));
226+
assertEquals(wxMessage.getStatus(), "err(30003)");
227+
assertEquals(wxMessage.getTotalCount(), new Integer(0));
228+
assertEquals(wxMessage.getFilterCount(), new Integer(0));
229+
assertEquals(wxMessage.getSentCount(), new Integer(0));
230+
assertEquals(wxMessage.getErrorCount(), new Integer(0));
231+
232+
final Map<String, Object> allFields = wxMessage.getAllFieldsMap();
233+
assertThat(allFields).isNotNull();
234+
final Map<String, Object> copyrightCheckResult = (Map<String, Object>) allFields.get("CopyrightCheckResult");
235+
List<Map<String, Object>> resultList = (List<Map<String, Object>>) ((Map<String, Object>) copyrightCheckResult.get("ResultList")).get("item");
236+
assertThat(copyrightCheckResult).isNotNull();
237+
238+
assertThat(copyrightCheckResult.get("Count")).isEqualTo("2");
239+
assertThat(copyrightCheckResult.get("CheckState")).isEqualTo("2");
240+
241+
assertThat(resultList.get(0).get("ArticleIdx")).isEqualTo("1");
242+
assertThat(resultList.get(0).get("UserDeclareState")).isEqualTo("0");
243+
assertThat(resultList.get(0).get("AuditState")).isEqualTo("2");
244+
assertThat(resultList.get(0).get("OriginalArticleUrl")).isEqualTo("Url_1");
245+
assertThat(resultList.get(0).get("OriginalArticleType")).isEqualTo("1");
246+
assertThat(resultList.get(0).get("CanReprint")).isEqualTo("1");
247+
assertThat(resultList.get(0).get("NeedReplaceContent")).isEqualTo("1");
248+
assertThat(resultList.get(0).get("NeedShowReprintSource")).isEqualTo("1");
249+
250+
assertThat(resultList.get(1).get("ArticleIdx")).isEqualTo("2");
251+
assertThat(resultList.get(1).get("UserDeclareState")).isEqualTo("0");
252+
assertThat(resultList.get(1).get("AuditState")).isEqualTo("2");
253+
assertThat(resultList.get(1).get("OriginalArticleUrl")).isEqualTo("Url_2");
254+
assertThat(resultList.get(1).get("OriginalArticleType")).isEqualTo("1");
255+
assertThat(resultList.get(1).get("CanReprint")).isEqualTo("1");
256+
assertThat(resultList.get(1).get("NeedReplaceContent")).isEqualTo("1");
257+
assertThat(resultList.get(1).get("NeedShowReprintSource")).isEqualTo("1");
258+
}
173259
}

0 commit comments

Comments
 (0)