重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果我们要扩展一个如下所示的IQ包:
成都创新互联于2013年创立,先为石狮等服务建站,石狮等地企业,进行企业商务咨询服务。为石狮企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
element
需要定义一个自定义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的文档是相当缺失的,很多问题,还是仔细阅读源代码比较好。