From 997f1e4005761b0d148a5f61101de290fd925ce2 Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Thu, 28 Aug 2014 13:30:36 +0800 Subject: [PATCH] =?UTF-8?q?issue=20#12=20xml=E6=B6=88=E6=81=AFfromXml,=20t?= =?UTF-8?q?oXml=E6=9C=89=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/chanjarster/weixin/api/WxConsts.java | 2 +- .../weixin/bean/WxXmlOutMewsMessage.java | 100 ++++++++++++++ .../weixin/bean/WxXmlOutMusicMessage.java | 129 ++++++++++++++++++ .../weixin/bean/WxXmlOutVideoMessage.java | 90 ++++++++++++ .../weixin/bean/WxXmlOutVoiceMessage.java | 5 + .../bean/WxXmlOutIMusicMessageTest.java | 38 ++++++ .../weixin/bean/WxXmlOutINewsMessageTest.java | 48 +++++++ .../bean/WxXmlOutIVideoMessageTest.java | 34 +++++ .../bean/WxXmlOutIVoiceMessageTest.java | 28 ++++ 9 files changed, 473 insertions(+), 1 deletion(-) create mode 100644 src/main/java/chanjarster/weixin/bean/WxXmlOutMewsMessage.java create mode 100644 src/main/java/chanjarster/weixin/bean/WxXmlOutMusicMessage.java create mode 100644 src/main/java/chanjarster/weixin/bean/WxXmlOutVideoMessage.java create mode 100644 src/test/java/chanjarster/weixin/bean/WxXmlOutIMusicMessageTest.java create mode 100644 src/test/java/chanjarster/weixin/bean/WxXmlOutINewsMessageTest.java create mode 100644 src/test/java/chanjarster/weixin/bean/WxXmlOutIVideoMessageTest.java create mode 100644 src/test/java/chanjarster/weixin/bean/WxXmlOutIVoiceMessageTest.java diff --git a/src/main/java/chanjarster/weixin/api/WxConsts.java b/src/main/java/chanjarster/weixin/api/WxConsts.java index dbec083e..e2d05676 100644 --- a/src/main/java/chanjarster/weixin/api/WxConsts.java +++ b/src/main/java/chanjarster/weixin/api/WxConsts.java @@ -13,7 +13,7 @@ public class WxConsts { public static final String XML_MSG_VOICE = "voice"; public static final String XML_MSG_VIDEO = "video"; public static final String XML_MSG_NEWS = "news"; - public static final String XML_MSG_MUSIC = "news"; + public static final String XML_MSG_MUSIC = "music"; public static final String XML_MSG_LOCATION = "location"; public static final String XML_MSG_LINK = "link"; public static final String XML_MSG_EVENT = "event"; diff --git a/src/main/java/chanjarster/weixin/bean/WxXmlOutMewsMessage.java b/src/main/java/chanjarster/weixin/bean/WxXmlOutMewsMessage.java new file mode 100644 index 00000000..9d75d549 --- /dev/null +++ b/src/main/java/chanjarster/weixin/bean/WxXmlOutMewsMessage.java @@ -0,0 +1,100 @@ +package chanjarster.weixin.bean; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import chanjarster.weixin.api.WxConsts; +import chanjarster.weixin.util.xml.AdapterCDATA; + +@XmlRootElement(name = "xml") +@XmlAccessorType(XmlAccessType.FIELD) +public class WxXmlOutMewsMessage extends WxXmlOutMessage { + + @XmlElement(name = "ArticleCount") + protected int ArticleCount; + + @XmlElementWrapper(name="Articles") + @XmlElement(name = "Item") + protected final List Articles = new ArrayList(); + + public WxXmlOutMewsMessage() { + this.MsgType = WxConsts.XML_MSG_NEWS; + } + + public int getArticleCount() { + return ArticleCount; + } + + public void addArticle(Item item) { + this.Articles.add(item); + this.ArticleCount = this.Articles.size(); + } + + public List getArticles() { + return Articles; + } + + + @XmlRootElement(name = "Item") + @XmlAccessorType(XmlAccessType.FIELD) + public static class Item { + + @XmlElement(name = "Title") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Title; + + @XmlElement(name = "Description") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Description; + + @XmlElement(name="PicUrl") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String PicUrl; + + @XmlElement(name="Url") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Url; + + public String getTitle() { + return Title; + } + + public void setTitle(String title) { + Title = title; + } + + public String getDescription() { + return Description; + } + + public void setDescription(String description) { + Description = description; + } + + public String getPicUrl() { + return PicUrl; + } + + public void setPicUrl(String picUrl) { + PicUrl = picUrl; + } + + public String getUrl() { + return Url; + } + + public void setUrl(String url) { + Url = url; + } + + } + + +} diff --git a/src/main/java/chanjarster/weixin/bean/WxXmlOutMusicMessage.java b/src/main/java/chanjarster/weixin/bean/WxXmlOutMusicMessage.java new file mode 100644 index 00000000..dc55ffd7 --- /dev/null +++ b/src/main/java/chanjarster/weixin/bean/WxXmlOutMusicMessage.java @@ -0,0 +1,129 @@ +package chanjarster.weixin.bean; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import chanjarster.weixin.api.WxConsts; +import chanjarster.weixin.util.xml.AdapterCDATA; + +@XmlRootElement(name = "xml") +@XmlAccessorType(XmlAccessType.FIELD) +public class WxXmlOutMusicMessage extends WxXmlOutMessage { + + @XmlElement(name = "Music") + protected final Music music = new Music(); + + public WxXmlOutMusicMessage() { + this.MsgType = WxConsts.XML_MSG_MUSIC; + } + + public String getTitle() { + return music.getTitle(); + } + + public void setTitle(String title) { + music.setTitle(title); + } + + public String getDescription() { + return music.getDescription(); + } + + public void setDescription(String description) { + music.setDescription(description); + } + + public String getThumbMediaId() { + return music.getThumbMediaId(); + } + + public void setThumbMediaId(String thumbMediaId) { + music.setThumbMediaId(thumbMediaId); + } + + public String getMusicUrl() { + return music.getMusicUrl(); + } + + public void setMusicUrl(String musicUrl) { + music.setMusicUrl(musicUrl); + } + + public String getHQMusicUrl() { + return music.getHQMusicUrl(); + } + + public void setHQMusicUrl(String hQMusicUrl) { + music.setHQMusicUrl(hQMusicUrl); + } + + @XmlRootElement(name = "Music") + @XmlAccessorType(XmlAccessType.FIELD) + private static class Music { + + @XmlElement(name = "Title") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Title; + + @XmlElement(name = "Description") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Description; + + @XmlElement(name="ThumbMediaId") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String ThumbMediaId; + + @XmlElement(name="MusicUrl") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String MusicUrl; + + @XmlElement(name="HQMusicUrl") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String HQMusicUrl; + + public String getTitle() { + return Title; + } + + public void setTitle(String title) { + Title = title; + } + + public String getDescription() { + return Description; + } + + public void setDescription(String description) { + Description = description; + } + + public String getThumbMediaId() { + return ThumbMediaId; + } + + public void setThumbMediaId(String thumbMediaId) { + ThumbMediaId = thumbMediaId; + } + + public String getMusicUrl() { + return MusicUrl; + } + + public void setMusicUrl(String musicUrl) { + MusicUrl = musicUrl; + } + + public String getHQMusicUrl() { + return HQMusicUrl; + } + + public void setHQMusicUrl(String hQMusicUrl) { + HQMusicUrl = hQMusicUrl; + } + + } + +} diff --git a/src/main/java/chanjarster/weixin/bean/WxXmlOutVideoMessage.java b/src/main/java/chanjarster/weixin/bean/WxXmlOutVideoMessage.java new file mode 100644 index 00000000..34bfcb92 --- /dev/null +++ b/src/main/java/chanjarster/weixin/bean/WxXmlOutVideoMessage.java @@ -0,0 +1,90 @@ +package chanjarster.weixin.bean; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import chanjarster.weixin.api.WxConsts; +import chanjarster.weixin.util.xml.AdapterCDATA; + +@XmlRootElement(name = "xml") +@XmlAccessorType(XmlAccessType.FIELD) +public class WxXmlOutVideoMessage extends WxXmlOutMessage { + + @XmlElement(name = "Video") + protected final Video video = new Video(); + + public WxXmlOutVideoMessage() { + this.MsgType = WxConsts.XML_MSG_VIDEO; + } + + public String getMediaId() { + return video.getMediaId(); + } + + public void setMediaId(String mediaId) { + video.setMediaId(mediaId); + } + + public String getTitle() { + return video.getTitle(); + } + + public void setTitle(String title) { + video.setTitle(title); + } + + public String getDescription() { + return video.getDescription(); + } + + public void setDescription(String description) { + video.setDescription(description); + } + + + @XmlRootElement(name = "Video") + @XmlAccessorType(XmlAccessType.FIELD) + private static class Video { + + @XmlElement(name = "MediaId") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String MediaId; + + @XmlElement(name = "Title") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Title; + + @XmlElement(name = "Description") + @XmlJavaTypeAdapter(AdapterCDATA.class) + private String Description; + + public String getMediaId() { + return MediaId; + } + + public void setMediaId(String mediaId) { + MediaId = mediaId; + } + + public String getTitle() { + return Title; + } + + public void setTitle(String title) { + Title = title; + } + + public String getDescription() { + return Description; + } + + public void setDescription(String description) { + Description = description; + } + + } + +} diff --git a/src/main/java/chanjarster/weixin/bean/WxXmlOutVoiceMessage.java b/src/main/java/chanjarster/weixin/bean/WxXmlOutVoiceMessage.java index 54a640e4..4b6c8e96 100644 --- a/src/main/java/chanjarster/weixin/bean/WxXmlOutVoiceMessage.java +++ b/src/main/java/chanjarster/weixin/bean/WxXmlOutVoiceMessage.java @@ -6,6 +6,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import chanjarster.weixin.api.WxConsts; import chanjarster.weixin.util.xml.MediaIdMarshaller; @XmlRootElement(name = "xml") @@ -16,6 +17,10 @@ public class WxXmlOutVoiceMessage extends WxXmlOutMessage { @XmlJavaTypeAdapter(MediaIdMarshaller.class) private String MediaId; + public WxXmlOutVoiceMessage() { + this.MsgType = WxConsts.XML_MSG_VOICE; + } + public String getMediaId() { return MediaId; } diff --git a/src/test/java/chanjarster/weixin/bean/WxXmlOutIMusicMessageTest.java b/src/test/java/chanjarster/weixin/bean/WxXmlOutIMusicMessageTest.java new file mode 100644 index 00000000..76cbfdb6 --- /dev/null +++ b/src/test/java/chanjarster/weixin/bean/WxXmlOutIMusicMessageTest.java @@ -0,0 +1,38 @@ +package chanjarster.weixin.bean; + +import org.testng.Assert; +import org.testng.annotations.Test; + +@Test +public class WxXmlOutIMusicMessageTest { + + public void test() { + WxXmlOutMusicMessage m = new WxXmlOutMusicMessage(); + m.setTitle("title"); + m.setDescription("ddfff"); + m.setCreateTime(1122l); + m.setFromUserName("fromUser"); + m.setToUserName("toUser"); + m.setHQMusicUrl("hQMusicUrl"); + m.setMusicUrl("musicUrl"); + m.setThumbMediaId("thumbMediaId"); + + String expected = "" + + "" + + "" + + "" + + "1122" + + "" + + "" + + " <![CDATA[title]]>" + + " " + + " " + + " " + + " " + + " " + + ""; + System.out.println(m.toXml()); + Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); + } + +} diff --git a/src/test/java/chanjarster/weixin/bean/WxXmlOutINewsMessageTest.java b/src/test/java/chanjarster/weixin/bean/WxXmlOutINewsMessageTest.java new file mode 100644 index 00000000..22bcffd8 --- /dev/null +++ b/src/test/java/chanjarster/weixin/bean/WxXmlOutINewsMessageTest.java @@ -0,0 +1,48 @@ +package chanjarster.weixin.bean; + +import org.testng.Assert; +import org.testng.annotations.Test; + +@Test +public class WxXmlOutINewsMessageTest { + + public void test() { + WxXmlOutMewsMessage m = new WxXmlOutMewsMessage(); + m.setCreateTime(1122l); + m.setFromUserName("fromUser"); + m.setToUserName("toUser"); + + WxXmlOutMewsMessage.Item item = new WxXmlOutMewsMessage.Item(); + item.setDescription("description"); + item.setPicUrl("picUrl"); + item.setTitle("title"); + item.setUrl("url"); + m.addArticle(item); + m.addArticle(item); + String expected = "" + + "" + + "" + + "" + + "1122" + + "" + + " 2" + + " " + + " " + + " <![CDATA[title]]>" + + " " + + " " + + " " + + " " + + " " + + " <![CDATA[title]]>" + + " " + + " " + + " " + + " " + + " " + + ""; + System.out.println(m.toXml()); + Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); + } + +} diff --git a/src/test/java/chanjarster/weixin/bean/WxXmlOutIVideoMessageTest.java b/src/test/java/chanjarster/weixin/bean/WxXmlOutIVideoMessageTest.java new file mode 100644 index 00000000..e8bca3d4 --- /dev/null +++ b/src/test/java/chanjarster/weixin/bean/WxXmlOutIVideoMessageTest.java @@ -0,0 +1,34 @@ +package chanjarster.weixin.bean; + +import org.testng.Assert; +import org.testng.annotations.Test; + +@Test +public class WxXmlOutIVideoMessageTest { + + public void test() { + WxXmlOutVideoMessage m = new WxXmlOutVideoMessage(); + m.setMediaId("media_id"); + m.setTitle("title"); + m.setDescription("ddfff"); + m.setCreateTime(1122l); + m.setFromUserName("fromUser"); + m.setToUserName("toUser"); + + String expected = "" + + "" + + "" + + "" + + "1122" + + "" + + " " + + ""; + System.out.println(m.toXml()); + Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); + } + +} diff --git a/src/test/java/chanjarster/weixin/bean/WxXmlOutIVoiceMessageTest.java b/src/test/java/chanjarster/weixin/bean/WxXmlOutIVoiceMessageTest.java new file mode 100644 index 00000000..fb7161eb --- /dev/null +++ b/src/test/java/chanjarster/weixin/bean/WxXmlOutIVoiceMessageTest.java @@ -0,0 +1,28 @@ +package chanjarster.weixin.bean; + +import org.testng.Assert; +import org.testng.annotations.Test; + +@Test +public class WxXmlOutIVoiceMessageTest { + + public void test() { + WxXmlOutVoiceMessage m = new WxXmlOutVoiceMessage(); + m.setMediaId("ddfefesfsdfef"); + m.setCreateTime(1122l); + m.setFromUserName("from"); + m.setToUserName("to"); + + String expected = "" + + "" + + "" + + "" + + "1122" + + "" + + "" + + ""; + System.out.println(m.toXml()); + Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); + } + +}