OpenFire源码学习之十七:HTTP Service插件

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() {   
          
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值