issue #9 提供xml消息的Builder

This commit is contained in:
Daniel Qian 2014-08-28 14:17:41 +08:00
parent 997f1e4005
commit 23bf42dbba
18 changed files with 392 additions and 216 deletions

View File

@ -6,7 +6,6 @@ import java.util.List;
import chanjarster.weixin.api.WxConsts;
import chanjarster.weixin.bean.custombuilder.ImageBuilder;
import chanjarster.weixin.bean.custombuilder.MusicBuilder;
import chanjarster.weixin.bean.custombuilder.NewsArticleBuilder;
import chanjarster.weixin.bean.custombuilder.NewsBuilder;
import chanjarster.weixin.bean.custombuilder.TextBuilder;
import chanjarster.weixin.bean.custombuilder.VideoBuilder;
@ -191,12 +190,4 @@ public class WxCustomMessage {
return new NewsBuilder();
}
/**
* 获得图文消息文章builder
* @return
*/
public static NewsArticleBuilder NEWS_ARTICLE() {
return new NewsArticleBuilder();
}
}

View File

@ -386,127 +386,5 @@ public class WxXmlMessage {
public void setErrorCount(Integer errorCount) {
ErrorCount = errorCount;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((Content == null) ? 0 : Content.hashCode());
result = prime * result + ((CreateTime == null) ? 0 : CreateTime.hashCode());
result = prime * result + ((Description == null) ? 0 : Description.hashCode());
result = prime * result + ErrorCount;
result = prime * result + ((Event == null) ? 0 : Event.hashCode());
result = prime * result + ((EventKey == null) ? 0 : EventKey.hashCode());
result = prime * result + FilterCount;
result = prime * result + ((Format == null) ? 0 : Format.hashCode());
result = prime * result + ((FromUserName == null) ? 0 : FromUserName.hashCode());
result = prime * result + ((Label == null) ? 0 : Label.hashCode());
result = prime * result + ((Latitude == null) ? 0 : Latitude.hashCode());
result = prime * result + ((Location_X == null) ? 0 : Location_X.hashCode());
result = prime * result + ((Location_Y == null) ? 0 : Location_Y.hashCode());
result = prime * result + ((Longitude == null) ? 0 : Longitude.hashCode());
result = prime * result + ((MediaId == null) ? 0 : MediaId.hashCode());
result = prime * result + ((MsgId == null) ? 0 : MsgId.hashCode());
result = prime * result + ((MsgType == null) ? 0 : MsgType.hashCode());
result = prime * result + ((PicUrl == null) ? 0 : PicUrl.hashCode());
result = prime * result + ((Precision == null) ? 0 : Precision.hashCode());
result = prime * result + ((Recognition == null) ? 0 : Recognition.hashCode());
result = prime * result + ((Scale == null) ? 0 : Scale.hashCode());
result = prime * result + SentCount;
result = prime * result + ((Status == null) ? 0 : Status.hashCode());
result = prime * result + ((ThumbMediaId == null) ? 0 : ThumbMediaId.hashCode());
result = prime * result + ((Ticket == null) ? 0 : Ticket.hashCode());
result = prime * result + ((Title == null) ? 0 : Title.hashCode());
result = prime * result + ((ToUserName == null) ? 0 : ToUserName.hashCode());
result = prime * result + TotalCount;
result = prime * result + ((Url == null) ? 0 : Url.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
WxXmlMessage other = (WxXmlMessage) obj;
if (Content == null) {
if (other.Content != null) return false;
} else if (!Content.equals(other.Content)) return false;
if (CreateTime == null) {
if (other.CreateTime != null) return false;
} else if (!CreateTime.equals(other.CreateTime)) return false;
if (Description == null) {
if (other.Description != null) return false;
} else if (!Description.equals(other.Description)) return false;
if (ErrorCount != other.ErrorCount) return false;
if (Event == null) {
if (other.Event != null) return false;
} else if (!Event.equals(other.Event)) return false;
if (EventKey == null) {
if (other.EventKey != null) return false;
} else if (!EventKey.equals(other.EventKey)) return false;
if (FilterCount != other.FilterCount) return false;
if (Format == null) {
if (other.Format != null) return false;
} else if (!Format.equals(other.Format)) return false;
if (FromUserName == null) {
if (other.FromUserName != null) return false;
} else if (!FromUserName.equals(other.FromUserName)) return false;
if (Label == null) {
if (other.Label != null) return false;
} else if (!Label.equals(other.Label)) return false;
if (Latitude == null) {
if (other.Latitude != null) return false;
} else if (!Latitude.equals(other.Latitude)) return false;
if (Location_X == null) {
if (other.Location_X != null) return false;
} else if (!Location_X.equals(other.Location_X)) return false;
if (Location_Y == null) {
if (other.Location_Y != null) return false;
} else if (!Location_Y.equals(other.Location_Y)) return false;
if (Longitude == null) {
if (other.Longitude != null) return false;
} else if (!Longitude.equals(other.Longitude)) return false;
if (MediaId == null) {
if (other.MediaId != null) return false;
} else if (!MediaId.equals(other.MediaId)) return false;
if (MsgId == null) {
if (other.MsgId != null) return false;
} else if (!MsgId.equals(other.MsgId)) return false;
if (MsgType == null) {
if (other.MsgType != null) return false;
} else if (!MsgType.equals(other.MsgType)) return false;
if (PicUrl == null) {
if (other.PicUrl != null) return false;
} else if (!PicUrl.equals(other.PicUrl)) return false;
if (Precision == null) {
if (other.Precision != null) return false;
} else if (!Precision.equals(other.Precision)) return false;
if (Recognition == null) {
if (other.Recognition != null) return false;
} else if (!Recognition.equals(other.Recognition)) return false;
if (Scale == null) {
if (other.Scale != null) return false;
} else if (!Scale.equals(other.Scale)) return false;
if (SentCount != other.SentCount) return false;
if (Status == null) {
if (other.Status != null) return false;
} else if (!Status.equals(other.Status)) return false;
if (ThumbMediaId == null) {
if (other.ThumbMediaId != null) return false;
} else if (!ThumbMediaId.equals(other.ThumbMediaId)) return false;
if (Ticket == null) {
if (other.Ticket != null) return false;
} else if (!Ticket.equals(other.Ticket)) return false;
if (Title == null) {
if (other.Title != null) return false;
} else if (!Title.equals(other.Title)) return false;
if (ToUserName == null) {
if (other.ToUserName != null) return false;
} else if (!ToUserName.equals(other.ToUserName)) return false;
if (TotalCount != other.TotalCount) return false;
if (Url == null) {
if (other.Url != null) return false;
} else if (!Url.equals(other.Url)) return false;
return true;
}
}

View File

@ -7,6 +7,12 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import chanjarster.weixin.bean.outxmlbuilder.ImageBuilder;
import chanjarster.weixin.bean.outxmlbuilder.MusicBuilder;
import chanjarster.weixin.bean.outxmlbuilder.NewsBuilder;
import chanjarster.weixin.bean.outxmlbuilder.TextBuilder;
import chanjarster.weixin.bean.outxmlbuilder.VideoBuilder;
import chanjarster.weixin.bean.outxmlbuilder.VoiceBuilder;
import chanjarster.weixin.util.xml.AdapterCDATA;
import chanjarster.weixin.util.xml.XmlTransformer;
@ -69,4 +75,51 @@ public class WxXmlOutMessage {
return null;
}
/**
* 获得文本消息builder
* @return
*/
public static TextBuilder TEXT() {
return new TextBuilder();
}
/**
* 获得图片消息builder
* @return
*/
public static ImageBuilder IMAGE() {
return new ImageBuilder();
}
/**
* 获得语音消息builder
* @return
*/
public static VoiceBuilder VOICE() {
return new VoiceBuilder();
}
/**
* 获得视频消息builder
* @return
*/
public static VideoBuilder VIDEO() {
return new VideoBuilder();
}
/**
* 获得音乐消息builder
* @return
*/
public static MusicBuilder MUSIC() {
return new MusicBuilder();
}
/**
* 获得图文消息builder
* @return
*/
public static NewsBuilder NEWS() {
return new NewsBuilder();
}
}

View File

@ -1,52 +0,0 @@
package chanjarster.weixin.bean.custombuilder;
import chanjarster.weixin.bean.WxCustomMessage;
/**
* 图文消息文章builder
* <pre>
* 用法: WxCustomMessage.WxArticle m = WxCustomMessage.NEWS_ARTICLE()
* .url(...)
* .title(...)
* .picurl(...)
* .description(...)
* .build();
* </pre>
* @author chanjarster
*
*/
public final class NewsArticleBuilder {
private String title;
private String description;
private String url;
private String picurl;
public NewsArticleBuilder url(String url) {
this.url = url;
return this;
}
public NewsArticleBuilder title(String title) {
this.title = title;
return this;
}
public NewsArticleBuilder description(String description) {
this.description = description;
return this;
}
public NewsArticleBuilder picurl(String picurl) {
this.picurl = picurl;
return this;
}
public WxCustomMessage.WxArticle build() {
WxCustomMessage.WxArticle m = new WxCustomMessage.WxArticle();
m.setPicurl(this.picurl);
m.setTitle(title);
m.setDescription(description);
m.setUrl(this.url);
return m;
}
}

View File

@ -11,12 +11,6 @@ import chanjarster.weixin.bean.WxCustomMessage.WxArticle;
* 图文消息builder
* <pre>
* 用法:
* WxCustomMessage.WxArticle article = WxCustomMessage.NEWS_ARTICLE()
* .url(...)
* .title(...)
* .picurl(...)
* .description(...)
* .build();
* WxCustomMessage m = WxCustomMessage.NEWS().addArticle(article).touser(...).build();
* </pre>
* @author chanjarster

View File

@ -9,8 +9,6 @@ public abstract class BaseBuilder<BuilderType, ValueType> {
protected String fromUserName;
protected String msgtype;
public BuilderType touser(String touser) {
this.toUserName = touser;
return (BuilderType) this;
@ -26,7 +24,6 @@ public abstract class BaseBuilder<BuilderType, ValueType> {
public void setCommon(WxXmlOutMessage m) {
m.setToUserName(this.toUserName);
m.setFromUserName(this.fromUserName);
m.setMsgType(this.msgtype);
m.setCreateTime(System.currentTimeMillis() / 1000l);
}

View File

@ -1,32 +1,24 @@
package chanjarster.weixin.bean.outxmlbuilder;
import chanjarster.weixin.api.WxConsts;
import chanjarster.weixin.bean.WxXmlOutImageMessage;
/**
* 获得消息builder
* <pre>
* 用法: WxXmlMessage m = WxXmlMessage.IMAGE().media_id(...).touser(...).build();
* </pre>
* 图片消息builder
* @author chanjarster
*
*/
public final class ImageBuilder extends BaseBuilder<ImageBuilder, WxXmlOutImageMessage> {
private String media_id;
public ImageBuilder() {
this.msgtype = WxConsts.XML_MSG_IMAGE;
}
private String mediaId;
public ImageBuilder media_id(String media_id) {
this.media_id = media_id;
public ImageBuilder mediaId(String media_id) {
this.mediaId = media_id;
return this;
}
public WxXmlOutImageMessage build() {
WxXmlOutImageMessage m = new WxXmlOutImageMessage();
setCommon(m);
m.setMediaId(this.media_id);
m.setMediaId(this.mediaId);
return m;
}

View File

@ -0,0 +1,54 @@
package chanjarster.weixin.bean.outxmlbuilder;
import chanjarster.weixin.bean.WxXmlOutMusicMessage;
/**
* 音乐消息builder
*
* @author chanjarster
*/
public final class MusicBuilder extends BaseBuilder<MusicBuilder, WxXmlOutMusicMessage> {
private String title;
private String description;
private String hQMusicUrl;
private String musicUrl;
private String thumbMediaId;
public MusicBuilder title(String title) {
this.title = title;
return this;
}
public MusicBuilder description(String description) {
this.description = description;
return this;
}
public MusicBuilder hQMusicUrl(String hQMusicUrl) {
this.hQMusicUrl = hQMusicUrl;
return this;
}
public MusicBuilder musicUrl(String musicUrl) {
this.musicUrl = musicUrl;
return this;
}
public MusicBuilder thumbMediaId(String thumbMediaId) {
this.thumbMediaId = thumbMediaId;
return this;
}
public WxXmlOutMusicMessage build() {
WxXmlOutMusicMessage m = new WxXmlOutMusicMessage();
setCommon(m);
m.setTitle(title);
m.setDescription(description);
m.setHQMusicUrl(hQMusicUrl);
m.setMusicUrl(musicUrl);
m.setThumbMediaId(thumbMediaId);
return m;
}
}

View File

@ -0,0 +1,31 @@
package chanjarster.weixin.bean.outxmlbuilder;
import java.util.ArrayList;
import java.util.List;
import chanjarster.weixin.bean.WxXmlOutMewsMessage;
import chanjarster.weixin.bean.WxXmlOutMewsMessage.Item;
/**
* 图文消息builder
* @author chanjarster
*/
public final class NewsBuilder extends BaseBuilder<NewsBuilder, WxXmlOutMewsMessage> {
protected final List<Item> articles = new ArrayList<Item>();
public NewsBuilder addArticle(Item item) {
this.articles.add(item);
return this;
}
public WxXmlOutMewsMessage build() {
WxXmlOutMewsMessage m = new WxXmlOutMewsMessage();
for(Item item : articles) {
m.addArticle(item);
}
setCommon(m);
return m;
}
}

View File

@ -1,23 +1,15 @@
package chanjarster.weixin.bean.outxmlbuilder;
import chanjarster.weixin.api.WxConsts;
import chanjarster.weixin.bean.WxXmlOutTextMessage;
/**
* 文本消息builder
* <pre>
* 用法: WxXmlMessage m = WxXmlMessage.TEXT().touser(...).fromUser(...).content(...).build();
* </pre>
* @author chanjarster
*
*/
public final class TextBuilder extends BaseBuilder<TextBuilder, WxXmlOutTextMessage> {
private String content;
public TextBuilder() {
this.msgtype = WxConsts.XML_MSG_TEXT;
}
public TextBuilder content(String content) {
this.content = content;
return this;

View File

@ -0,0 +1,38 @@
package chanjarster.weixin.bean.outxmlbuilder;
import chanjarster.weixin.bean.WxXmlOutVideoMessage;
/**
* 视频消息builder
* @author chanjarster
*
*/
public final class VideoBuilder extends BaseBuilder<VideoBuilder, WxXmlOutVideoMessage> {
private String mediaId;
private String title;
private String description;
public VideoBuilder title(String title) {
this.title = title;
return this;
}
public VideoBuilder description(String description) {
this.description = description;
return this;
}
public VideoBuilder mediaId(String mediaId) {
this.mediaId = mediaId;
return this;
}
public WxXmlOutVideoMessage build() {
WxXmlOutVideoMessage m = new WxXmlOutVideoMessage();
setCommon(m);
m.setTitle(title);
m.setDescription(description);
m.setMediaId(mediaId);
return m;
}
}

View File

@ -0,0 +1,25 @@
package chanjarster.weixin.bean.outxmlbuilder;
import chanjarster.weixin.bean.WxXmlOutVoiceMessage;
/**
* 语音消息builder
* @author chanjarster
*/
public final class VoiceBuilder extends BaseBuilder<VoiceBuilder, WxXmlOutVoiceMessage> {
private String mediaId;
public VoiceBuilder mediaId(String mediaId) {
this.mediaId = mediaId;
return this;
}
public WxXmlOutVoiceMessage build() {
WxXmlOutVoiceMessage m = new WxXmlOutVoiceMessage();
setCommon(m);
m.setMediaId(mediaId);
return m;
}
}

View File

@ -10,12 +10,12 @@ public class WxXmlOutIMusicMessageTest {
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");
m.setCreateTime(1122l);
m.setFromUserName("fromUser");
m.setToUserName("toUser");
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ "<xml>"
@ -35,4 +35,40 @@ public class WxXmlOutIMusicMessageTest {
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
}
public void testBuild() {
WxXmlOutMusicMessage m = WxXmlOutMessage.MUSIC()
.fromUser("fromUser")
.touser("toUser")
.title("title")
.description("ddfff")
.hQMusicUrl("hQMusicUrl")
.musicUrl("musicUrl")
.thumbMediaId("thumbMediaId")
.build();
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", "")
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
expected
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", "")
);
}
}

View File

@ -45,4 +45,51 @@ public class WxXmlOutINewsMessageTest {
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
}
public void testBuild() {
WxXmlOutMewsMessage.Item item = new WxXmlOutMewsMessage.Item();
item.setDescription("description");
item.setPicUrl("picUrl");
item.setTitle("title");
item.setUrl("url");
WxXmlOutMewsMessage m = WxXmlOutMessage.NEWS()
.fromUser("fromUser")
.touser("toUser")
.addArticle(item)
.addArticle(item)
.build();
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", "")
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
expected
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", "")
);
}
}

View File

@ -31,4 +31,36 @@ public class WxXmlOutIVideoMessageTest {
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
}
public void testBuild() {
WxXmlOutVideoMessage m = WxXmlOutMessage.VIDEO()
.mediaId("media_id")
.fromUser("fromUser")
.touser("toUser")
.title("title")
.description("ddfff")
.build();
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", "")
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
expected
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", "")
);
}
}

View File

@ -25,4 +25,26 @@ public class WxXmlOutIVoiceMessageTest {
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
}
public void testBuild() {
WxXmlOutVoiceMessage m = WxXmlOutMessage.VOICE().mediaId("ddfefesfsdfef").fromUser("from").touser("to").build();
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", "")
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
expected
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", "")
);
}
}

View File

@ -25,4 +25,26 @@ public class WxXmlOutImageMessageTest {
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
}
public void testBuild() {
WxXmlOutImageMessage m = WxXmlOutMessage.IMAGE().mediaId("ddfefesfsdfef").fromUser("from").touser("to").build();
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[image]]></MsgType>"
+ "<Image><MediaId><![CDATA[ddfefesfsdfef]]></MediaId></Image>"
+ "</xml>";
System.out.println(m.toXml());
Assert.assertEquals(
m
.toXml()
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
expected
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", "")
);
}
}

View File

@ -25,4 +25,28 @@ public class WxXmlOutTextMessageTest {
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
}
public void testBuild() {
WxXmlOutTextMessage m = WxXmlOutMessage.TEXT().content("content").fromUser("from").touser("to").build();
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[text]]></MsgType>"
+ "<Content><![CDATA[content]]></Content>"
+ "</xml>";
System.out.println(m.toXml());
Assert.assertEquals(
m
.toXml()
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
expected
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", "")
);
}
}