spark+smack+openfire实现请求响应简单流程 (一)

2014-11-24 10:21:33 · 作者: · 浏览: 0

当时我想知道的问题很简单 就是服务端如何返回给客户端一个字符串或者数字或者布尔值 客户端如何接收

现在分享出来给和我一样的初学者 泪奔中

简单的查询好友测试,客户端成功发送请求,服务端接收并返回响应结果。


源码版本 openfire 3.8.1

spark 2.5.0

测试前需将openfire及spark源码配置并发布成功,搭建简单测试环境,用户可成功登录。


一.客户端代码

1.测试IQ类


[java]
package org.jivesoftware.expand.send.test;

import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smackx.packet.DiscoverItems.Item;

public class TestrrIQ extends IQ {
public static final String ELEMENT = "query";
public static final String NAMESPACE = "jabber:iq:testrr"; //指定命名空间 服务端接收请求后将根据此命名空间调用业务处理类处理并响应请求 可以用B/S求响应方式套用理解

package org.jivesoftware.expand.send.test;

import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smackx.packet.DiscoverItems.Item;

public class TestrrIQ extends IQ {
public static final String ELEMENT = "query";
public static final String NAMESPACE = "jabber:iq:testrr"; //指定命名空间 服务端接收请求后将根据此命名空间调用业务处理类处理并响应请求 可以用B/S求响应方式套用理解 [java] view plaincopyprint
private final List items;
private String node;

@SuppressWarnings("unchecked")
public TestrrIQ() {
this.items = new CopyOnWriteArrayList();
}

public void addItem(Item item) {
synchronized (this.items) {
this.items.add(item);
}
}

public Iterator getItems() {
synchronized (this.items) {
return Collections.unmodifiableList(this.items).iterator();
}
}

public String getNode() {
return this.node;
}

public void setNode(String node) {
this.node = node;
}

public String getChildElementXML() {
StringBuilder buf = new StringBuilder();

buf.append("
if (getNode() != null) {
buf.append(" node=\"");
buf.append(getNode());
buf.append("\"");
}

buf.append(">");

synchronized (this.items) {
for (Item item : this.items) {
buf.append(item.toXML());
}
}

buf.append("
");

return buf.toString();
}


private final List items;
private String node;

@SuppressWarnings("unchecked")
public TestrrIQ() {
this.items = new CopyOnWriteArrayList();
}

public void addItem(Item item) {
synchronized (this.items) {
this.items.add(item);
}
}

public Iterator getItems() {
synchronized (this.items) {
return Collections.unmodifiableList(this.items).iterator();
}
}

public String getNode() {
return this.node;
}

public void setNode(String node) {
this.node = node;
}

public String getChildElementXML() {
StringBuilder buf = new StringBuilder();

buf.append("
if (getNode() != null) {
buf.append(" node=\"");
buf.append(getNode());
buf.append("\"");
}

buf.append(">");

synchronized (this.items) {
for (Item item : this.items) {
buf.append(item.toXML());
}
}

buf.append("
");

return buf.toString();
}
}


2.测试IQProvider类(解析服务端返回的packet)

[java]
package org.jivesoftware.expand.send.test;

import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.xmlpull.v1.XmlPullParser;

public class TestrrIQProvider implements IQProvider {
public IQ parseIQ(XmlPullParser xp) throws Exception {
Tes