HTTP Service插件
这里的http接口插件是神马?
Openfire主要是在消息推送,那么与其他系统的的消息怎么结合呢,那么这里这个HTTP Service插件就提供了一个基于HTTP的接口。为什么要提供这样的接口?在有些互联网的场景。一个用户平台可以是web的,当然也会有移动终端的APP,那么web端要给移动终端的APP发送消息就依赖这样的接口了。当然这里只是一种实现方式。
首先查看在OF控制太的web页面
本人这里做新增了短信接口。有业务场景的不同这里就不提出来了。
接下来看看插件目录包:
下面编写一个个业务类:
JAVA部分
HttpServiceServlet:
@SuppressWarnings("deprecation")
public class HttpServiceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private HttpServicePlugin plugin;
private RoutingTable routingTable;
private SendMessageUtil sendMessageUtil;
private SendMessageUtil messageUtil ;
private static XmlPullParserFactory factory = null;
private ThreadPool threadPool;
static {
try {
factory = XmlPullParserFactory.newInstance(MXParser.class.getName(), null);
factory.setNamespaceAware(true);
}
catch (XmlPullParserException e) {
Log.error("Error creating a parser factory", e);
}
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
plugin = (HttpServicePlugin) XMPPServer.getInstance().getPluginManager().getPlugin("httpedu");
AuthCheckFilter.addExclude("httpedu/httpservice");
if (null == routingTable)
routingTable = XMPPServer.getInstance().getRoutingTable();
if (null == sendMessageUtil)
sendMessageUtil = new SendMessageUtil();
if (null == threadPool)
threadPool = new ThreadPool(10);
}
@SuppressWarnings("unused")
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = response.getWriter();
BufferedReader reader = request.getReader();
StringBuffer buffer = new StringBuffer();
String string="";
while ((string = reader.readLine()) != null) {
String x = new String(string.getBytes("ISO-8859-1"), "UTF-8");
buffer.append(x);
}
reader.close();
// Check that our plugin is enabled.
if (!plugin.isEnabled()) {
Log.warn("http service plugin is disabled: " + request.getQueryString());
replyError("Error1002",response, out);
return;
}
// Check the request type and process accordingly
try {
JSONObject object = new org.json.JSONObject(buffer.toString());
if(null == object){
Log.warn("json is null " + request.getQueryString());
replyError("Error1003",response, out);
return;
}
//参数
String secret = object.getString("secret").trim();
String optType = object.getString("optType").trim();
String fromid = object.getString("sender").trim();
String domain = object.getString("domain").trim();
String resources = object.getString("resources").trim();
......
String schoolid = object.getString("schoolid").trim();
// Check this request is authorised
if (secret == null || !secret.equals(plugin.getSecret())){
Log.warn("secret is error: " + request.getQueryString());
replyError("Error1004",response, out);
return;
}
......
if (null == messageUtil)
messageUtil = new SendMessageUtil();
if ("1".equals(optType)){
//Personal business to send separately
if(toIds == null || "".equals(toIds)){
Log.warn("toIds is error: " + request.getQueryString());
replyError("Error1020",response, out);
return;
}
try {
threadPool.execute(createTask(object,routingTable));
replyMessage("ok", response, out);
} catch (Exception e) {
Log.warn("toIds is error: " + request.getQueryString());
}
}
else {
Log.warn("opttype is error: " + request.getQueryString());
replyError("Error1021",response, out);
}
}
catch (IllegalArgumentException e) {
Log.error("IllegalArgumentException: ", e);
replyError("Ex1002",response, out);
}
catch (Exception e) {
Log.error("Exception: ", e);
replyError("Ex1001",response, out);
}
}
@SuppressWarnings("unused")
private void replyMessage(String message,HttpServletResponse response, PrintWriter out){
response.setContentType("text/xml");
out.println("<result>" + message + "</result>");
out.flush();
}
private void replyError(String error,HttpServletResponse response, PrintWriter out){
response.setContentType("text/xml");
out.println("<error>" + error + "</error>");
out.flush();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
@Override
public void destroy() {
threadPool.waitFinish();
threadPool.closePool();
super.destroy();
// Release the excluded URL
AuthCheckFilter.removeExclude("httpedu/httpservice");
}
private static Runnable createTask(final JSONObject object,final RoutingTable routingTable) {
return new Runnable() {