Pārlūkot izejas kodu

#651 WxMpXmlMessage增加allFieldsMap属性, 用于存放所有xml属性和值。

master
Binary Wang pirms 6 gadiem
vecāks
revīzija
84aa3cf1c0
2 mainītis faili ar 97 papildinājumiem un 2 dzēšanām
  1. +10
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java
  2. +87
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java

+ 10
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java Parādīt failu

@@ -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) {


+ 87
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java Parādīt failu

@@ -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");
}
}

Notiek ielāde…
Atcelt
Saglabāt