java封装类,发送消息回复消息⼯具类的封装
2(第⼗⼀课)
⽤户关注后发送消息,后端服务器接收服务器把⽤户发送的数据封装成XML格式,并且后端服务器封装XML格式数据消息返回给服务器,服务器在解析数据并推送给终端⽤户。这必导致我们的java代码有解析和封装XML格式的能⼒。
那么如何解析请求消息的问题也就转化为如何从request中得到服务器发送给我们的xml格式的消息了。这⾥我们借助于开源框架
dom4j去解析xml(这⾥使⽤的是dom4j-1.6.1.jar),然后将解析得到的结果存⼊HashMap@SuppressWarnings("unchecked")
public static Map parseXml(HttpServletRequest request) throws Exception {
// 将解析结果存储在HashMap中
Map map = new HashMap();
// 从request中取得输⼊流
InputStream inputStream = InputStream();
// 读取输⼊流
SAXReader reader = new SAXReader();
Document document = ad(inputStream);
// 得到xml根元素
Element root = RootElement();
// 得到根元素的所有⼦节点
List elementList = root.elements();
// 遍历所有⼦节点
for (Element e : elementList) {
map.Name(), e.getText());
}
// 释放资源
inputStream.close();
inputStream = null;
return map;
}
如何将响应消息转换成xml返回?
我们先前已经将响应消息封装成了Java类,⽅便我们在代码中使⽤。那么,请求接收成功、处理完成后,该如何将消息返回呢?这⾥就涉及到如何将响应消息转换成xml返回的问题,这⾥我们将采⽤开源框架xstream来实现Java类到xml的转换(这⾥使⽤的是xstream-
1.3.1.jar),代码如下:/**
* ⽂本消息对象转换成xml
代码转换
* @param textMessage ⽂本消息对象
* @return xml
public static String textMessageToXml(TextMessage textMessage) { xstream.alias("xml", Class());
XML(textMessage);
}
/**
* ⾳乐消息对象转换成xml
* @param musicMessage ⾳乐消息对象
* @return xml
*/
public static String musicMessageToXml(MusicMessage musicMessage) { xstream.alias("xml", Class());
XML(musicMessage);
}
/**
* 图⽂消息对象转换成xml
* @param newsMessage 图⽂消息对象
* @return xml
*/
public static String newsMessageToXml(NewsMessage newsMessage) { xstream.alias("xml", Class());
xstream.alias("item", new Article().getClass());
XML(newsMessage);
}
/**
* 扩展xstream,使其⽀持CDATA块
* @date
*/
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
// 对所有xml节点的转换都增加CDATA标记
boolean cdata = true;
@SuppressWarnings("unchecked")
super.startNode(name, clazz);
}
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
依赖的jar包如下图
接收消息发送消息的处理⼯具类完整代码:st.util; /***
* V型知识库www.vxzsk
*
*/
import java.io.InputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.dom4j.Document;
import org.dom4j.Element;
sp.Article;
sp.MusicMessage;
sp.NewsMessage;
sp.TextMessage;
import com.thoughtworks.xstream.XStream;
import com.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.l.PrettyPrintWriter;
import com.thoughtworks.l.XppDriver;
/**
* 消息⼯具类
*/
public class MessageUtil {
/**
* 返回消息类型:⽂本
*/
public static final String RESP_MESSAGE_TYPE_TEXT = "text";
/**
* 返回消息类型:⾳乐
*/
public static final String RESP_MESSAGE_TYPE_MUSIC = "music"; /**
* 返回消息类型:图⽂
*/
public static final String RESP_MESSAGE_TYPE_NEWS = "news"; /**
* 请求消息类型:⽂本
*/
public static final String REQ_MESSAGE_TYPE_TEXT = "text";
/**
* 请求消息类型:图⽚
*/
public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
* 请求消息类型:链接
*/
public static final String REQ_MESSAGE_TYPE_LINK = "link";
/**
* 请求消息类型:地理位置
*/
public static final String REQ_MESSAGE_TYPE_LOCATION = "location"; /**
* 请求消息类型:⾳频
*/
public static final String REQ_MESSAGE_TYPE_VOICE = "voice";
/**
* 请求消息类型:推送
*/
public static final String REQ_MESSAGE_TYPE_EVENT = "event";
/**
* 事件类型:subscribe(订阅)
*/
public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
/**
* 事件类型:unsubscribe(取消订阅)
*/
public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe"; /**
* 事件类型:CLICK(⾃定义菜单点击事件)
*/
public static final String EVENT_TYPE_CLICK = "CLICK";
/**
* 解析发来的请求(XML)
*
* @param request
* @return
* @throws Exception
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论