• Smack IQ包的扩展


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

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

    <iq id="0001" to="search@jiyq.cn" 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的文档是相当缺失的,很多问题,还是仔细阅读源代码比较好。

  • 相关阅读:
    Swing中GridBagLayout布局的使用
    Android下Slidingmenu和actionbarsherlock的使用
    Swing基础知识
    Android下的ActionBar
    android下ADT的更新
    spark插件入门完整版本
    IOS开发准备 资料集锦
    Java调用本地浏览器
    Android源码在线查看网址
    Android中ProgressBar
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/5077701.html
Copyright © 2020-2023  润新知