openfire 插件開發例子

    很久都沒有寫東西了。今天總結一下以前開發的一些openfire插件。java

    此次的插件須要提供一個HTTP的接口。經過HTTP來對openfire作一些操做。web

    插件的目錄結構:項目名稱「exampleplugin"app

src/main/java
    org/jivesoftware/openfire/plugin/ExamplePlugin.java
    org/jivesoftware/openfire/plugin/example/ExampleServlet.java
src/main/resources
    logo_large.gif
    logo_small.gif
    plugin.xml
web
    images/
    WEB-INF/
        web-custom.xml

ExamplePlugin.java 實現了openfire Plugin接口。它提供了一個handle方法。咱們的主要邏輯代碼在這個方法裏面實現:ide

package org.jivesoftware.openfire.plugin;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import org.jivesoftware.openfire.SessionManager;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.auth.UnauthorizedException;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



public class ExamplePlugin implements Plugin{

	private static final long serialVersionUID = 4609828712383867663L;

	private static final Logger log = LoggerFactory.getLogger(ExamplePlugin.class);
	private XMPPServer server = null;
	
	@Override
	public void destroyPlugin() {
		server = null;
	}

	@Override
	public void initializePlugin(PluginManager arg0, File arg1) {
		log.info("enter--initializePlugin");
		server = XMPPServer.getInstance();
		log.info("exit---initializePlugin");
	}
	
	public String handle(String input) {
		//your logic code
	}
}

ExampleServlet.java 實現了HttpServlet。它的主要功能是提供HTTP接口,經過HTTP接口來操做ExamplePlugin類中的handle方法。

package org.jivesoftware.openfire.plugin.example;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jivesoftware.admin.AuthCheckFilter;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.plugin.ExamplePlugin;
import org.jivesoftware.openfire.user.UserAlreadyExistsException;
import org.jivesoftware.openfire.user.UserNotFoundException;
import org.jivesoftware.util.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.JID;

public class ExampleServlet extends HttpServlet {

	private static final long serialVersionUID = 5815016363356541081L;
	private static final Logger log = LoggerFactory.getLogger(ExampleServlet.class);
	
	private ExamplePlugin plugin;

	@Override
	public void init(ServletConfig servletConfig) throws ServletException {
		super.init(servletConfig);
		plugin = (ExamplePlugin) XMPPServer.getInstance()
				.getPluginManager().getPlugin("exampleplugin");
		AuthCheckFilter.addExclude("exampleplugin/exampleplugin");
	}

	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		try {
			String input = request.getParameter("input");
			plugin.handle(input);
		} catch (Exception e) {
			replyError(e.toString(), response, out);
		}
	}

	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() {
		super.destroy();
		AuthCheckFilter.removeExclude("exampleplugin/exampleplugin");
	}
}

plugin.xml描述了插件的信息:

<?xml version="1.0" encoding="UTF-8"?>

<plugin>
    <class>org.jivesoftware.openfire.plugin.ExamplePlugin</class>
    <name>Example</name>
    <description>Example</description>
    <author>ilxlf</author>
    <version>1.0.0</version>
    <date>06/05/2012</date>
    <minServerVersion>3.7.1</minServerVersion>
</plugin>

web-custom.xml描述了ExampleServlet的一些信息:

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <!-- Servlets -->
    <servlet>
        <servlet-name>ExampleServlet</servlet-name>
        <servlet-class>org.jivesoftware.openfire.plugin.example.ExampleServlet</servlet-class>
    </servlet>

    <!-- Servlet mappings -->
    <servlet-mapping>
        <servlet-name>ExampleServlet</servlet-name>
        <url-pattern>/exampleplugin</url-pattern>
    </servlet-mapping>

</web-app>

項目的名稱叫: 」exampleplugin"gradle

這個項目用gradle來提供編譯,打包。這裏就不寫了。url

編譯的結果是一個exampleplugin.jar。 openfire安裝目錄下面有一個plugins目錄。把這個jar包拷貝到該目錄下就能夠了。插件

而後咱們就能夠在openfire admin console界面 plugin標籤頁裏面看到咱們這個插件了。code

HTTP的對外接口就是:server

http://your_openfire_ip:9090/plugins/exampleplugin/exampleplugin/test_inputxml

相關文章
相關標籤/搜索