mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-10-21 11:07:37 +08:00
#651 WxMpXmlMessage增加allFieldsMap属性, 用于存放所有xml属性和值。
This commit is contained in:
@@ -3,6 +3,7 @@ package me.chanjar.weixin.mp.bean.message;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
@@ -11,6 +12,7 @@ import com.thoughtworks.xstream.annotations.XStreamConverter;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
import me.chanjar.weixin.common.util.XmlUtils;
|
||||
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
|
||||
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
|
||||
import me.chanjar.weixin.mp.util.crypto.WxMpCryptUtil;
|
||||
@@ -33,6 +35,11 @@ import me.chanjar.weixin.mp.util.xml.XStreamTransformer;
|
||||
public class WxMpXmlMessage implements Serializable {
|
||||
private static final long serialVersionUID = -3586245291677274914L;
|
||||
|
||||
/**
|
||||
* 使用dom4j解析的存放所有xml属性和值的map.
|
||||
*/
|
||||
private Map<String, Object> allFieldsMap;
|
||||
|
||||
///////////////////////
|
||||
// 以下都是微信推送过来的消息的xml的element所对应的属性
|
||||
///////////////////////
|
||||
@@ -562,7 +569,9 @@ public class WxMpXmlMessage implements Serializable {
|
||||
public static WxMpXmlMessage fromXml(String xml) {
|
||||
//修改微信变态的消息内容格式,方便解析
|
||||
xml = xml.replace("</PicList><PicList>", "");
|
||||
return XStreamTransformer.fromXml(WxMpXmlMessage.class, xml);
|
||||
final WxMpXmlMessage xmlMessage = XStreamTransformer.fromXml(WxMpXmlMessage.class, xml);
|
||||
xmlMessage.setAllFieldsMap(XmlUtils.xml2Map(xml));
|
||||
return xmlMessage;
|
||||
}
|
||||
|
||||
public static WxMpXmlMessage fromXml(InputStream is) {
|
||||
|
@@ -1,8 +1,13 @@
|
||||
package me.chanjar.weixin.mp.bean.message;
|
||||
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.testng.annotations.*;
|
||||
|
||||
import me.chanjar.weixin.common.api.WxConsts;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
@Test
|
||||
@@ -170,4 +175,85 @@ public class WxMpXmlMessageTest {
|
||||
assertEquals(wxMessage.getSendLocationInfo().getPoiName(), "wo de poi");
|
||||
}
|
||||
|
||||
public void testFromXml_MASSSENDJOBFINISH() {
|
||||
//xml样例来自 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1481187827_i0l21
|
||||
String xml = "<xml>\n" +
|
||||
"<ToUserName><![CDATA[gh_4d00ed8d6399]]></ToUserName>\n" +
|
||||
"<FromUserName><![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]></FromUserName>\n" +
|
||||
"<CreateTime>1481013459</CreateTime>\n" +
|
||||
"<MsgType><![CDATA[event]]></MsgType>\n" +
|
||||
"<Event><![CDATA[MASSSENDJOBFINISH]]></Event>\n" +
|
||||
"<MsgID>1000001625</MsgID>\n" +
|
||||
"<Status><![CDATA[err(30003)]]></Status>\n" +
|
||||
"<TotalCount>0</TotalCount>\n" +
|
||||
"<FilterCount>0</FilterCount>\n" +
|
||||
"<SentCount>0</SentCount>\n" +
|
||||
"<ErrorCount>0</ErrorCount>\n" +
|
||||
"<CopyrightCheckResult>\n" +
|
||||
"<Count>2</Count>\n" +
|
||||
"<ResultList>\n" +
|
||||
"<item>\n" +
|
||||
"<ArticleIdx>1</ArticleIdx>\n" +
|
||||
"<UserDeclareState>0</UserDeclareState>\n" +
|
||||
"<AuditState>2</AuditState>\n" +
|
||||
"<OriginalArticleUrl><![CDATA[Url_1]]></OriginalArticleUrl>\n" +
|
||||
"<OriginalArticleType>1</OriginalArticleType>\n" +
|
||||
"<CanReprint>1</CanReprint>\n" +
|
||||
"<NeedReplaceContent>1</NeedReplaceContent>\n" +
|
||||
"<NeedShowReprintSource>1</NeedShowReprintSource>\n" +
|
||||
"</item>\n" +
|
||||
"<item>\n" +
|
||||
"<ArticleIdx>2</ArticleIdx>\n" +
|
||||
"<UserDeclareState>0</UserDeclareState>\n" +
|
||||
"<AuditState>2</AuditState>\n" +
|
||||
"<OriginalArticleUrl><![CDATA[Url_2]]></OriginalArticleUrl>\n" +
|
||||
"<OriginalArticleType>1</OriginalArticleType>\n" +
|
||||
"<CanReprint>1</CanReprint>\n" +
|
||||
"<NeedReplaceContent>1</NeedReplaceContent>\n" +
|
||||
"<NeedShowReprintSource>1</NeedShowReprintSource>\n" +
|
||||
"</item>\n" +
|
||||
"</ResultList>\n" +
|
||||
"<CheckState>2</CheckState>\n" +
|
||||
"</CopyrightCheckResult>\n" +
|
||||
"</xml>";
|
||||
WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml);
|
||||
assertEquals(wxMessage.getToUser(), "gh_4d00ed8d6399");
|
||||
assertEquals(wxMessage.getFromUser(), "oV5CrjpxgaGXNHIQigzNlgLTnwic");
|
||||
assertEquals(wxMessage.getCreateTime(), new Long(1481013459));
|
||||
assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
|
||||
assertEquals(wxMessage.getEvent(), "MASSSENDJOBFINISH");
|
||||
assertEquals(wxMessage.getMsgId(), new Long(1000001625L));
|
||||
assertEquals(wxMessage.getStatus(), "err(30003)");
|
||||
assertEquals(wxMessage.getTotalCount(), new Integer(0));
|
||||
assertEquals(wxMessage.getFilterCount(), new Integer(0));
|
||||
assertEquals(wxMessage.getSentCount(), new Integer(0));
|
||||
assertEquals(wxMessage.getErrorCount(), new Integer(0));
|
||||
|
||||
final Map<String, Object> allFields = wxMessage.getAllFieldsMap();
|
||||
assertThat(allFields).isNotNull();
|
||||
final Map<String, Object> copyrightCheckResult = (Map<String, Object>) allFields.get("CopyrightCheckResult");
|
||||
List<Map<String, Object>> resultList = (List<Map<String, Object>>) ((Map<String, Object>) copyrightCheckResult.get("ResultList")).get("item");
|
||||
assertThat(copyrightCheckResult).isNotNull();
|
||||
|
||||
assertThat(copyrightCheckResult.get("Count")).isEqualTo("2");
|
||||
assertThat(copyrightCheckResult.get("CheckState")).isEqualTo("2");
|
||||
|
||||
assertThat(resultList.get(0).get("ArticleIdx")).isEqualTo("1");
|
||||
assertThat(resultList.get(0).get("UserDeclareState")).isEqualTo("0");
|
||||
assertThat(resultList.get(0).get("AuditState")).isEqualTo("2");
|
||||
assertThat(resultList.get(0).get("OriginalArticleUrl")).isEqualTo("Url_1");
|
||||
assertThat(resultList.get(0).get("OriginalArticleType")).isEqualTo("1");
|
||||
assertThat(resultList.get(0).get("CanReprint")).isEqualTo("1");
|
||||
assertThat(resultList.get(0).get("NeedReplaceContent")).isEqualTo("1");
|
||||
assertThat(resultList.get(0).get("NeedShowReprintSource")).isEqualTo("1");
|
||||
|
||||
assertThat(resultList.get(1).get("ArticleIdx")).isEqualTo("2");
|
||||
assertThat(resultList.get(1).get("UserDeclareState")).isEqualTo("0");
|
||||
assertThat(resultList.get(1).get("AuditState")).isEqualTo("2");
|
||||
assertThat(resultList.get(1).get("OriginalArticleUrl")).isEqualTo("Url_2");
|
||||
assertThat(resultList.get(1).get("OriginalArticleType")).isEqualTo("1");
|
||||
assertThat(resultList.get(1).get("CanReprint")).isEqualTo("1");
|
||||
assertThat(resultList.get(1).get("NeedReplaceContent")).isEqualTo("1");
|
||||
assertThat(resultList.get(1).get("NeedShowReprintSource")).isEqualTo("1");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user