在smack中实现 Jabber-RPC (XEP-0009)
1.首先扩展一个IQ:
源代码来自:
java代码为:
http://cvs.codehaus.org/viewrep/groovy/groovy/modules/xmlrpc/src/main...
import org.jivesoftware.smack.packet.IQ;
/**
* @author John Wilson
*
*/
public class JabberRPC extends IQ {
private final String xml;
public JabberRPC(final String xml) {
this.xml = "<query xmlns='jabber:iq:rpc'>\n" + xml + "\n</query>";
}
public String getChildElementXML() {
return this.xml;
}
}
2.扩展一个IQProvider.
源代码来自:
http://cvs.codehaus.org/viewrep/groovy/groovy/modules/xmlrpc/src/main...
java代码为:
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.util.StringUtils;
import org.xmlpull.v1.XmlPullParser;
/**
* @author John Wilson
*
*/
public class JabberRPCProvider implements IQProvider {
public IQ parseIQ(final XmlPullParser parser) throws Exception {
final StringBuffer buffer = new StringBuffer();
// skip the <query> tag by calling parser.next()
while (true) {
switch (parser.next()) {
case XmlPullParser.TEXT:
// We need to escape characters like & and <
buffer.append(StringUtils.escapeForXML(parser.getText()));
break;
case XmlPullParser.START_TAG:
buffer.append('<' + parser.getName() + '>');
break;
case XmlPullParser.END_TAG:
if ("query".equals(parser.getName())) {
// don't save the </query> end tag
return new JabberRPC(buffer.toString().trim());
} else {
buffer.append("</" + parser.getName() + '>');
break;
}
default:
}
}
}
}
3.在smack中注册IQProvider .
java代码为:
org.jivesoftware.smack.provider.ProviderManager.addIQProvider("query",
"jabber:iq:rpc", new JabberRPCProvider());
4.smack客户端例子:
try {
XMPPConnection con = new XMPPConnection("127.0.0.1", 5222);
con.login("username", "password");
//注册IQProvider
org.jivesoftware.smack.provider.ProviderManager.addIQProvider(
"query", "jabber:iq:rpc", new JabberRPCProvider());
// 监听所有的包
con.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
if (packet instanceof org.jivesoftware.smack.packet.IQ) {
org.jivesoftware.smack.packet.IQ iq =
(org.jivesoftware.smack.packet.IQ) packet;
System.out.println("rpc内容为 " + iq.getChildElementXML());
}
}
}, new org.jivesoftware.smack.filter.PacketFilter() {
public boolean accept(Packet arg0) {
return true;
}
});
con.createChat("xmlrpc.lizongbo.im").sendMessage("测试发送!");
JabberRPC jp = new JabberRPC("xmlrpc");
jp.setType(org.jivesoftware.smack.packet.IQ.Type.SET);
jp.setTo("xmlrpc.lizongbo.im");
con.sendPacket(jp);
Thread.sleep(25000);
con.close();
} catch (Exception e) {
e.printStackTrace();
}
5.服务端回应一个xmlrpc包:
wildfire中通过插件进行响应:
public void processPacket(Packet p) {
if (p instanceof IQ) {
IQ iq =(IQ)p;
IQ niq=IQ.createResultIQ(iq);
Element responseElement=niq.setChildElement("query",
"jabber:iq:rpc");
try {
java.util.Vector v=new java.util.Vector();
v.add("lizongbo xmpp");
v.add("jabber-rpc lizongbo");
v.add("xep-0009 lizongbo");
XmlRpcResponseProcessor xrrp=new XmlRpcResponseProcessor();
String rs= new String( xrrp.encodeResponse(v, "UTF-8"));
org.dom4j.Document re=org.dom4j.DocumentHelper.parseText(rs);
responseElement.add(re.getRootElement());
componentManager.sendPacket(this, niq);
} catch (Exception e) {
e.printStackTrace();
}
}
}
6.客户端输出结果为:
rpc内容为 <query xmlns='jabber:iq:rpc'>
<methodResponse><params><param><value><array><data><value>lizongbo
xmpp</value><value>jabber-rpc lizongbo</value><value>xep-0009
lizongbo</value></data></array></value></param></params></methodResponse>
</query>
转载:http://www.blogjava.net/lizongbo/archive/2006/12/04/85433.html
分享到:
相关推荐
标题中的"smack-resolver-javax-4.1.0-alpha6.zip"是一个软件库的压缩包,Smack是一款开源的XMPP客户端库,而"javax"可能指的是它提供了与Java平台兼容的解析器组件。这个版本是4.1.0的Alpha6,意味着它是一个开发...
【标题】"smack-resolver-dnsjava-4.0.0-rc2.zip" 提供的是 Smack 开源库的一个版本,其中包含了 DNSJava 的解析器模块。Smack 是一个用于 XMPP(Extensible Messaging and Presence Protocol)的 Java 库,它允许...
jxmpp-core-0.5.0-alpha7 jxmpp-util-cache-0.5.0-alpha7 smack-android-4.1.6 smack-core-4.1.6 smack-extensions-4.1.6 smack-im-4.1.6 smack-sasl-provided-4.1.6 smack-tcp-4.1.6
smack4.1.0的依赖包minidns.jar。可用于smack4.1.3,亲测可用!
在Android平台上,开发即时通讯应用时,我们常常会利用XMPP(Extensible Messaging and Presence Protocol)协议来实现。本文将详细讲解如何使用Smack库连接到ejabberd服务器,并进行用户注册、登录以及收发消息的...
本压缩包"smack-core-4.0.0.zip"包含了Smack Core 4.0.0版本的源代码,这是一个著名的Java即时通讯(Instant Messaging)库,主要用于实现XMPP协议。Smack为开发者提供了丰富的API,使得构建XMPP应用变得更加便捷。 ...
用户可以通过"**user-guide-smack-master**"这个文件进一步了解如何集成和使用这些组件,构建自己的SMACK大数据系统。 在实践中,SMACK架构被许多大型企业和组织采用,以应对快速增长的数据处理需求。理解并掌握...
7. smack-bosh-4.1.5.jar:支持HTTP绑定(BOSH)协议,这是一种让XMPP客户端通过HTTP长轮询与服务器保持连接的方式,适用于那些无法直接使用TCP连接的环境,如在网页浏览器中。 8. jxmpp-core-0.4.1.jar:JXMPP是一...
【标题】"smack-im-4.3.4-sources_www.im.43_im_" 指的是 Smack IM 的4.3.4版本的源代码,这个开源项目主要关注即时通讯(IM)功能的实现。Smack是一个用Java编写的库,允许开发者在他们的应用程序中集成XMPP...
【标题】"smack-extensions-4.1.0-alpha3.zip" 提供的是 Smack 开源库的一个扩展包,版本为4.1.0的Alpha3版本。Smack 是一个用于XMPP(Extensible Messaging and Presence Protocol)的Java库,它允许开发者在Java...
Smack是一个开源的XMPP客户端库,用于在Java应用中实现即时通讯(Instant Messaging and Presence Protocol)。它支持多种Java平台,包括Android,但这里特别强调了它是针对Java平台而非Android。 描述中提到"网上...
这个"smack-1.0-master"压缩包包含的是Smack工具的源代码,主要版本为1.0,并且经过了特定的修改,能够支持`.smackcipso`、`smackload`、`smackaccess`和`smackctl`等工具的使用。下面将详细介绍这些工具和Smack系统...
smack4.1框架所依赖的jar包,引用smack4.1框架,除smack4.1本身的包外,还需要所依赖的五个jar包。 包括xmlpull-xpp3-3.0.0.20130526、commons-logging-1.1.1等五个jar包
4. smack-core-4.1.6.jar:Smack的核心库,包含了实现基本XMPP功能的类和接口。 5. smack-core-4.1.6-sources.jar:核心库的源代码,供开发者参考和学习。 6. xpp3_xpath-1.1.4.jar:XPP3库的一个版本,用于处理...
在Smack 4.3.1版本中,开发者能够利用这个强大的框架为Android移动端构建高效、安全的聊天应用程序。它与Openfire等服务器软件配合使用,为用户提供实时的通信服务,包括一对一聊天、群组聊天、文件传输、在线状态...
在Smack-3.4.1中,我们可以期待以下关键知识点: 1. **连接管理**:Smack 提供了连接到XMPP服务器的接口,支持TCP、TLS/SSL以及WebSocket等多种连接方式。开发者可以方便地创建并管理连接,确保数据安全传输。 2. ...
smack-im-4.2.2.jar smack-tcp-4.2.2.jar smack-extensions-4.2.2.jar smack-core-4.2.2.jar smack-android-extensions-4.2.2.jar jxmpp-jid-0.6.0.jar jxmpp-core-0.6.0.jar jxmpp-util-cache-0.6.0.jar等jar包