﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-openfire-文章分类-openfire插件</title><link>http://www.blogjava.net/jyleon/category/37549.html</link><description>研究</description><language>zh-cn</language><lastBuildDate>Fri, 20 Feb 2009 18:45:49 GMT</lastBuildDate><pubDate>Fri, 20 Feb 2009 18:45:49 GMT</pubDate><ttl>60</ttl><item><title>openfire3.6.3插件开发方法(经小组测试成功)</title><link>http://www.blogjava.net/jyleon/articles/255623.html</link><dc:creator>jyleon</dc:creator><author>jyleon</author><pubDate>Thu, 19 Feb 2009 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/jyleon/articles/255623.html</guid><wfw:comment>http://www.blogjava.net/jyleon/comments/255623.html</wfw:comment><comments>http://www.blogjava.net/jyleon/articles/255623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jyleon/comments/commentRss/255623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jyleon/services/trackbacks/255623.html</trackback:ping><description><![CDATA[<div class="title" align="center">openfire3.6.3插件开发方法说明：<br />
</div>
<div class="todo">作用:初始化时在控制台打印测试消息。</div>
<div class="todo">
<p>开发环境：winxp/myeclipse6.5/jdk1.5&amp;1.6/mysql5.0/openfire3.6.3</p>
<p>QQ群：28588322 (openfire专题研究小组)</p>
<p>&nbsp;</p>
</div>
<div class="content_title">开发步骤：</div>
<div class="content_title">1. 布署openfire3.6.3源码（请参考openfire3.6.3导入eclipse项目实现方法)</div>
<div class="content">结构如下：<br />
<br />
<img height="595" src="file:///E:/openfire/openfire3.6.3/src/plugins/itvi/web/01.jpg" width="330"  alt="" /></div>
<div class="content_title">2. src/plugins目录下新建文件夹itvi。并按下图的目录结构新建对应的文件。</div>
<div class="content"><img height="560" alt="" src="http://www.blogjava.net/images/blogjava_net/jyleon/02.jpg" width="391" border="0" /></div>
<div class="content">
<div class="contentCodeFont">plugin.xml文件代码如下：</div>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;plugin&gt;<br />
&lt;class&gt;org.jivesoftware.openfire.plugin.Itvi&lt;/class&gt;<br />
&lt;name&gt;Itvi&lt;/name&gt;<br />
&lt;description&gt;Broadcasts messages to users.&lt;/description&gt;<br />
&lt;author&gt;openfireteam&lt;/author&gt;<br />
&lt;version&gt;1.7.0&lt;/version&gt;<br />
&lt;date&gt;2/19/2009&lt;/date&gt;<br />
&lt;url&gt;http://openfireteam.blogjava.net&lt;/url&gt;<br />
&lt;minServerVersion&gt;3.6.3&lt;/minServerVersion&gt;<br />
&lt;/plugin&gt;</p>
<p>&nbsp;</p>
</div>
<div class="content">
<div class="contentCodeFont">Itvi.java文件代码如下：</div>
<p>package org.jivesoftware.openfire.plugin;<br />
import org.dom4j.Element;<br />
import org.jivesoftware.openfire.IQHandlerInfo;</p>
<p>import org.xmpp.packet.*;<br />
import org.jivesoftware.openfire.handler.IQHandler;<br />
import org.jivesoftware.openfire.auth.UnauthorizedException;<br />
</p>
<p>/**<br />
* 处理客户端发来的IQ，并回送结果IQ<br />
* <br />
* @author Phoenix<br />
* <br />
* Mar 14, 2008 4:55:33 PM<br />
* <br />
* version 0.1<br />
*/</p>
<p>import org.dom4j.DocumentHelper;<br />
import org.dom4j.Element;<br />
import org.dom4j.QName;<br />
import org.jivesoftware.openfire.XMPPServer;<br />
import org.jivesoftware.openfire.container.Plugin;<br />
import org.jivesoftware.openfire.container.PluginManager;<br />
import org.jivesoftware.openfire.disco.IQDiscoInfoHandler;<br />
import org.jivesoftware.openfire.disco.IQDiscoItemsHandler;<br />
import org.jivesoftware.openfire.forms.DataForm;<br />
import org.jivesoftware.openfire.forms.FormField;<br />
import org.jivesoftware.openfire.forms.spi.XDataFormImpl;<br />
import org.jivesoftware.openfire.forms.spi.XFormFieldImpl;<br />
import org.jivesoftware.openfire.resultsetmanager.ResultSet;<br />
import org.jivesoftware.openfire.resultsetmanager.ResultSetImpl;<br />
import org.jivesoftware.openfire.user.User;<br />
import org.jivesoftware.openfire.user.UserManager;<br />
import org.jivesoftware.openfire.user.UserNotFoundException;<br />
import org.jivesoftware.util.*;<br />
import org.xmpp.component.Component;<br />
import org.xmpp.component.ComponentException;<br />
import org.xmpp.component.ComponentManager;<br />
import org.xmpp.component.ComponentManagerFactory;<br />
import org.xmpp.packet.IQ;<br />
import org.xmpp.packet.IQ.Type;<br />
import org.xmpp.packet.JID;<br />
import org.xmpp.packet.Packet;<br />
import org.xmpp.packet.PacketError;<br />
import org.xmpp.packet.PacketError.Condition;</p>
<p>import java.io.File;<br />
import java.util.*;<br />
import java.util.Map.Entry;<br />
</p>
<p>public class Itvi implements Plugin<br />
{<br />
private XMPPServer server;</p>
<p>/*<br />
* (non-Javadoc)<br />
* <br />
* @see org.jivesoftware.openfire.container.Plugin#destroyPlugin()<br />
*/<br />
public void destroyPlugin()<br />
{</p>
<p>}</p>
<p>/*<br />
* (non-Javadoc)<br />
* <br />
* @see org.jivesoftware.openfire.container.Plugin#initializePlugin(org.jivesoftware.openfire.container.PluginManager,<br />
* java.io.File)<br />
*/<br />
public void initializePlugin(PluginManager manager, File pluginDirectory)<br />
{<br />
server = XMPPServer.getInstance();<br />
server.getIQRouter().addHandler(new ItviIQHander()); //<br />
System.out.println("测试插件启动成功");<br />
}</p>
<p>}<br />
</p>
</div>
<div class="content">
<div class="contentCodeFont">ItviIQHander.java文件代码如下：</div>
<p>&nbsp;</p>
<p>package org.jivesoftware.openfire.plugin;<br />
import org.dom4j.Element;<br />
import org.jivesoftware.openfire.IQHandlerInfo;</p>
<p>import org.xmpp.packet.*;<br />
import org.jivesoftware.openfire.handler.IQHandler;<br />
import org.jivesoftware.openfire.auth.UnauthorizedException;<br />
</p>
<p>/**<br />
* 处理客户端发来的IQ，并回送结果IQ<br />
* <br />
* @author Phoenix<br />
* <br />
* Mar 14, 2008 4:55:33 PM<br />
* <br />
* version 0.1<br />
*/<br />
public class ItviIQHander extends IQHandler<br />
{</p>
<p>private static final String MODULE_NAME = "group tree handler";</p>
<p>private static final String NAME_SPACE = "com:im:group";</p>
<p>private IQHandlerInfo info;</p>
<p>public ItviIQHander()<br />
{<br />
super(MODULE_NAME);<br />
info = new IQHandlerInfo("gruops", NAME_SPACE);<br />
}</p>
<p>/*<br />
* (non-Javadoc)<br />
* <br />
* @see org.jivesoftware.openfire.handler.IQHandler#getInfo()<br />
*/<br />
@Override<br />
public IQHandlerInfo getInfo()<br />
{<br />
return info;<br />
}</p>
<p>/*<br />
* (non-Javadoc)<br />
* <br />
* @see org.jivesoftware.openfire.handler.IQHandler#handleIQ(org.xmpp.packet.IQ)<br />
*/<br />
@Override<br />
public IQ handleIQ(IQ packet) throws UnauthorizedException<br />
{<br />
IQ reply = IQ.createResultIQ(packet);<br />
Element groups = packet.getChildElement();//1<br />
<br />
if (!IQ.Type.get.equals(packet.getType()))<br />
{<br />
System.out.println("非法的请求类型");<br />
reply.setChildElement(groups.createCopy());<br />
reply.setError(PacketError.Condition.bad_request);<br />
return reply;<br />
}<br />
<br />
//String userName = StringUtils.substringBefore(packet.getFrom().toString(),"@");</p>
<p>//GroupManager.getInstance().initElement(groups,userName);<br />
<br />
//reply.setChildElement(groups.createCopy());//2</p>
<p>//System.out.println("返回的最终XML" reply.toXML());</p>
<p>return reply;<br />
}</p>
<p>}</p>
</div>
<div class="content"></div>
<div class="content"></div>
<div class="content_title">3.打包插件</div>
<div class="content">a.第一次打包需配置ant工具。在环境变量中，
<p>添加 path=C:\Program Files\Java\jdk1.5.0_09\;D:\Program Files\MyEclipse6.5\eclipse\plugins\org.apache.ant_1.7.0.v200706080842\bin (如果原来有path,在变量值的尾部添加半角分号 ; 然后再加入上面的jdk和ant路径 )</p>
<p>b.编译</p>
<p>进入cmd，进入 openfire／build所在目录：输入命令：ant&nbsp;plugins 等待执行完，而且没有报错，说明打包成功。在openfire3.6.3\target\openfire\plugins目录下就生成了itvi.jar </p>
</div>
<div class="content_title">4.测试</div>
<div class="content">启动openfire ，如发现控制台输出&#8220;测试插件启动成功&#8221;，说明插件开发成功。</div>
<br />
<br />
<br />
<br />
<br />
 <img src ="http://www.blogjava.net/jyleon/aggbug/255623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jyleon/" target="_blank">jyleon</a> 2009-02-19 18:08 <a href="http://www.blogjava.net/jyleon/articles/255623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Openfire插件开发人员指南</title><link>http://www.blogjava.net/jyleon/articles/254197.html</link><dc:creator>jyleon</dc:creator><author>jyleon</author><pubDate>Wed, 11 Feb 2009 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/jyleon/articles/254197.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; Openfire插件开发人员指南导言插件是增强Openfire功能。这份文件是一个开发人员创建插件指南。结构的一个插件插件存放在插件openfireHome目录。当部署一个jar或war插件文件，它会自动解压安装。该文件在插件目录结构如下：插件结构&nbsp;&nbsp; myplugin /&nbsp;&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/jyleon/articles/254197.html'>阅读全文</a><img src ="http://www.blogjava.net/jyleon/aggbug/254197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jyleon/" target="_blank">jyleon</a> 2009-02-11 09:49 <a href="http://www.blogjava.net/jyleon/articles/254197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>