很久都沒有寫東西了。今天總結一下以前開發的一些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