Smack IQ包的扩展

前几天一直很烦躁,怎么扩展smack的IQ包堵了我好久,今天静下心来看了下smack的源码,把这个问题解决了。下面给出步骤:

如果我们要扩展一个如下所示的IQ包:

<iq id="0001" to="[email protected]" type=”get”>
    <query xmls="emcc.jiyq" condition="what"/>
        <extrament>element</extrament>
    <query>
</iq>

需要定义一个自定义IQ进行扩展:

package com.emcc.stc.demo.iq;
import org.jivesoftware.smack.packet.IQ;
public class SampleIQ extends IQ
{
    String condition;
    String value;
    protected SampleIQ(String childElementName, String childElementNamespace,
            String condition, String value)
    {
        super(childElementName, childElementNamespace);
        this.condition = condition;
        this.value = value;
    }
    /**
     * 最关键的实现类
     */
    @Override
    protected IQChildElementXmlStringBuilder getIQChildElementBuilder(
            IQChildElementXmlStringBuilder xml)
    {
        xml.attribute("condition", condition);
        xml.rightAngleBracket();
        xml.element("extraElement", "value");
        return xml;
    }
    public static void main(String[] args)
    {
        IQ iq = new SampleIQ("query", "emcc.jiyq", "what", "elemeng");
        System.out.println(iq.toXML());
    }
}

这种方式的好处是,每一种IQ都有特定定义,每个自定义IQ类都有其应用场景,而且无需再手动配置XML。

另外,可以编写相应的IQParser解析特定类型的IQ包,更加利于使用。

最后,Smack的文档是相当缺失的,很多问题,还是仔细阅读源代码比较好。

时间: 2024-12-30 16:07:03

Smack IQ包的扩展的相关文章

在LaTeX中使用tikz宏包及其扩展包共同绘制UML图

LaTeX宏包tikz的绘图功能很强,完全可以绘制UML的各种图形,并且在tikz的基础上扩展出不少这方面的宏包.前面我介绍过宏包tikz-uml,这个宏包功能不错,只是外观上略微有些不足.所以我现在还是立足于tikz的基础功能,结合tikz-uml宏包一起绘制UML图. 下面直接给出示例代码.效果图与说明. 操作系统:Ubuntu 16.04 64位桌面版LaTeX工具:TeXstudio 2.10.8 示例一 % 51CTO陆巍的博客 \documentclass[oneside, Auto

Windows下用Composer引入官方GitHub扩展包

Windows下用Composer引入官方GitHub扩展包 1. 当你打开威武RC4版本的链接的时候,往下拉你可以看到这个,然后你要做的就是想到,百度Composer,看看是个什么鬼,别想太多,跟着我走.接下来点击Composer中文文档,再点击下载你会看到下载完后,点开如图所示点击next后发现不知道怎么继续,正常,这里是提示你选择php文件夹下面的php.exe文件,这里我选好再截图如下:到这里一般再点击下一步等上三分钟左右就没什么问题啦,这个随便你个人喜好,我是没有点直接一直next到f

如何开发、本地测试、发布 Laravel 扩展包?

 Laravel/ 1年前/  4022 /  11 现在已经有了很多,关于如何开发 Laravel 扩展包的文章.但是大多文章写的太过片面,不够完整,而且我在实际进行开发扩展包的时候,还是遇到了很多的问题,我把自己的开发经验,以及遇到的问题记录下来,分享给大家. 扩展包开发 1. 创建新项目,初始化扩展包配置 首先创建一个新的 Laravel 项目: composer create-project laravel/laravel laradmin -vvv 接下来在此项目中,创建目录 pack

Android基于XMPP Smack及Openfire学习笔记(1)

之前开发的项目中实用到IM聊天功能.可是这块功能公司有专门的IM团队来开发,由他们开发好后.直接接入到我们APP中.我參与写IM相关功能非常地少,所以也一直想学习相关知识 . 眼下Android主要用的是XMPP协议及OPenfireserver来实现IM功能,我也从这块入手学习.也感谢全部分享资料让我有机会学习的同行们. 如今正式開始啦. 第一步:搭建Openfireserver: Openfire工具下载地址:http://www.igniterealtime.org/downloads/i

日志系统之扩展Flume-LineDeserializer

本人博客文章如未特别注明皆为原创!如有转载请注明出处:http://blog.csdn.net/yanghua_kobe/article/details/46595401 继续闲聊日志系统,在之前的博文里已提到我们在日志收集上的选择是flume-ng.应用程序将日志打到各自的日志文件或指定的文件夹(日志文件按天滚动),然后利用flume的agent去日志文件中收集. Deserializer简介 flume将一条日志抽象成一个event.这里我们从日志文件中收集日志采用的是定制版的SpoolDi

笔记6 压缩工具、安装软件包(rpm、yum、源码包)、shell。

压缩打包 常见的压缩文件 windows:rar.zip.7z Linux:.zip..gz..bz2..xz..tar..gz..tar.bz2..tar.xz gzip压缩工具 它压缩后边直接跟文件名就可以 命令:gzip -d 解压的意思 命令gzip -数字  表示它的压缩级别,1--9,数字越大越严谨,默认保持的是6级别. 命令:file 查看解压缩文件,因为它被解压缩了,是一个二进制文件所以不能用cat来查看它的内容. 命令:zcat  可以查看解压缩文件的内容 命令:gzip -c

thinkphp 3.23 第三方登录sdk集成包

本集成包在官方包上扩展了支付宝登录和微信,支持最新的3.23版本 config    /* URL配置 */     'URL_CASE_INSENSITIVE' => true, //默认false 表示URL区分大小写 true则表示不区分大小写     'URL_MODEL' 本集成包在官方包上扩展了支付宝登录和微信,支持最新的3.23版本 config     /* URL配置 */     'URL_CASE_INSENSITIVE' => true, //默认false 表示URL

java项目中可能会使用到的jar包解释

一.Struts2 用的版本是struts2.3.1.1 一个简单的Struts项目所需的jar包有如下8个 1. struts2-core-2.3.1.1.jar: Struts2的核心类库. 2. xwork-core-2.3.1.1.jar: XWork核心类,XWork是一个标准的command模式实现,并且完全从web层剥离出来.WebWork被构建在Xwork上,而Struts2由Struts1和WebWork两个经典的MVC框架发展而来. 3. ognl-3.0.3.jar: 支持

linux CentOS7 中安装包管理:rpm 、yum及源码包安装使用

一. 安装软件包的三种方法 yum ---python rpm工具 yum工具 源码包 二. rpm包介绍 设置光驱并挂载: [[email protected] ~]# mount /dev/cdrom /mntmount: /dev/sr0 写保护,将以只读方式挂载 [[email protected] ~]# ls /mntEULA    isolinux  repodata                      TRANS.TBL GPL     LiveOS    RPM-GPG-