smack/asmack 监听特定报文代码

来源:互联网 发布:淘宝没有指纹支付选项 编辑:程序博客网 时间:2024/06/05 17:53

首先需要两个类

import org.jivesoftware.smack.packet.PacketExtension;public class XtalkMessage implements PacketExtension {private StringBuffer packetContent = null;public static final String ELEMENT_NAME="xtalk";public static final String NAME_SPACE="urn:xmpp:xtalk:dd";public StringBuffer getPacketContent() {return packetContent;}public void setPacketContent(StringBuffer packetContent) {this.packetContent = packetContent;}@Overridepublic String getElementName() {// TODO Auto-generated method stubreturn ELEMENT_NAME;}@Overridepublic String getNamespace() {// TODO Auto-generated method stubreturn NAME_SPACE;}@Overridepublic String toXML() {// TODO Auto-generated method stubreturn packetContent.toString();}}

import org.jivesoftware.smack.packet.PacketExtension;import org.jivesoftware.smack.provider.PacketExtensionProvider;import org.jivesoftware.smack.util.StringUtils;import org.xmlpull.v1.XmlPullParser;public class XtalkMessageProvider implements PacketExtensionProvider {public XtalkMessageProvider() {}public PacketExtension parseExtension(XmlPullParser parser)throws Exception {XtalkMessage messageEvent = new XtalkMessage();StringBuffer buffer = new StringBuffer();boolean done = false;int oldNsCount = 0;oldNsCount = parser.getNamespaceCount(parser.getDepth());while (!done) {int eventType = parser.next();if (eventType == XmlPullParser.START_TAG) {buffer.append('<' + parser.getName());int ns = parser.getNamespaceCount(parser.getDepth());for (int i = oldNsCount; i < ns; i++) {if (parser.getNamespacePrefix(i) != null) {buffer.append("  xmlns:").append(parser.getNamespacePrefix(i)).append("=\"").append(parser.getNamespaceUri(i)).append("\"");} else {buffer.append("  xmlns=\"").append(parser.getNamespaceUri(i)).append("\"");}}oldNsCount = ns;for (int i = 0; i < parser.getAttributeCount(); i++) {buffer.append(" ").append(parser.getAttributeName(i)).append("=");buffer.append("\"").append(parser.getAttributeValue(i)).append("\"");}buffer.append('>');} else if (eventType == XmlPullParser.TEXT) {// System.out.println("XmlPullParser.TEXT:"// + StringUtils.escapeForXML(parser.getText()));//buffer.append(StringUtils.escapeForXML(parser.getText()));                               buffer.append(parser.getText());} else if (eventType == XmlPullParser.END_TAG) {if (parser.getName().equals(XtalkMessage.ELEMENT_NAME)) {done = true;} else {buffer.append("</" + parser.getName() + '>');}}}// System.out.println(TAG + " PacketExtension:" + buffer.toString());messageEvent.setPacketContent(buffer);return messageEvent;}}

在主程序中调用如下:

ProviderManager.getInstance().addExtensionProvider(XtalkMessage.ELEMENT_NAME, XtalkMessage.NAME_SPACE,new XtalkMessageProvider());


0 0
原创粉丝点击