| @@ -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"; | |||
| @@ -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<Item> Articles = new ArrayList<Item>(); | |||
| 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<Item> 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; | |||
| } | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" | |||
| + "<xml>" | |||
| + "<ToUserName><![CDATA[toUser]]></ToUserName>" | |||
| + "<FromUserName><![CDATA[fromUser]]></FromUserName>" | |||
| + "<CreateTime>1122</CreateTime>" | |||
| + "<MsgType><![CDATA[music]]></MsgType>" | |||
| + "<Music>" | |||
| + " <Title><![CDATA[title]]></Title>" | |||
| + " <Description><![CDATA[ddfff]]></Description>" | |||
| + " <ThumbMediaId><![CDATA[thumbMediaId]]></ThumbMediaId>" | |||
| + " <MusicUrl><![CDATA[musicUrl]]></MusicUrl>" | |||
| + " <HQMusicUrl><![CDATA[hQMusicUrl]]></HQMusicUrl>" | |||
| + " </Music>" | |||
| + "</xml>"; | |||
| System.out.println(m.toXml()); | |||
| Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); | |||
| } | |||
| } | |||
| @@ -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 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" | |||
| + "<xml>" | |||
| + "<ToUserName><![CDATA[toUser]]></ToUserName>" | |||
| + "<FromUserName><![CDATA[fromUser]]></FromUserName>" | |||
| + "<CreateTime>1122</CreateTime>" | |||
| + "<MsgType><![CDATA[news]]></MsgType>" | |||
| + " <ArticleCount>2</ArticleCount>" | |||
| + " <Articles>" | |||
| + " <Item>" | |||
| + " <Title><![CDATA[title]]></Title>" | |||
| + " <Description><![CDATA[description]]></Description>" | |||
| + " <PicUrl><![CDATA[picUrl]]></PicUrl>" | |||
| + " <Url><![CDATA[url]]></Url>" | |||
| + " </Item>" | |||
| + " <Item>" | |||
| + " <Title><![CDATA[title]]></Title>" | |||
| + " <Description><![CDATA[description]]></Description>" | |||
| + " <PicUrl><![CDATA[picUrl]]></PicUrl>" | |||
| + " <Url><![CDATA[url]]></Url>" | |||
| + " </Item>" | |||
| + " </Articles>" | |||
| + "</xml>"; | |||
| System.out.println(m.toXml()); | |||
| Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); | |||
| } | |||
| } | |||
| @@ -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 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" | |||
| + "<xml>" | |||
| + "<ToUserName><![CDATA[toUser]]></ToUserName>" | |||
| + "<FromUserName><![CDATA[fromUser]]></FromUserName>" | |||
| + "<CreateTime>1122</CreateTime>" | |||
| + "<MsgType><![CDATA[video]]></MsgType>" | |||
| + "<Video>" | |||
| + "<MediaId><![CDATA[media_id]]></MediaId>" | |||
| + "<Title><![CDATA[title]]></Title>" | |||
| + "<Description><![CDATA[ddfff]]></Description>" | |||
| + "</Video> " | |||
| + "</xml>"; | |||
| System.out.println(m.toXml()); | |||
| Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); | |||
| } | |||
| } | |||
| @@ -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 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" | |||
| + "<xml>" | |||
| + "<ToUserName><![CDATA[to]]></ToUserName>" | |||
| + "<FromUserName><![CDATA[from]]></FromUserName>" | |||
| + "<CreateTime>1122</CreateTime>" | |||
| + "<MsgType><![CDATA[voice]]></MsgType>" | |||
| + "<Voice><MediaId><![CDATA[ddfefesfsdfef]]></MediaId></Voice>" | |||
| + "</xml>"; | |||
| System.out.println(m.toXml()); | |||
| Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); | |||
| } | |||
| } | |||