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

转载于:https://www.cnblogs.com/jiyuqi/p/5077701.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值