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

  • 相关阅读:
    WordPress插入图片无法居中的解决方法
    wordpress文章显示同一分类下的上一篇下一篇
    git4
    git3
    git2
    git1
    百度地图vue版本标记点拖拽事件传参问题
    postcss-plugin-px2rem的使用
    保留小数位toFixed()方法的怪异表现
    大公司是怎样开发和部署前端代码(转张云龙大神的回答)
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/5077701.html
Copyright © 2011-2022 走看看