zoukankan      html  css  js  c++  java
  • 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的文档是相当缺失的,很多问题,还是仔细阅读源代码比较好。

  • 相关阅读:
    IOS开发之UIview
    poj2823(单调队列)
    poj3250(单调栈)
    poj2796(单调栈+树状数组)
    hdu5033(单调栈)
    hdu1506(单调栈)
    2018 Multi-University Training Contest 2
    hdu4417(主席树)
    2018 Multi-University Training Contest 1
    poj2104(主席树)
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/5077701.html
Copyright © 2011-2022 走看看