简体   繁体   English

使用Smack库解析XMPP的EventElement

[英]Parsing EventElement for XMPP using Smack Library

Can anyone please help to show me on how to parse this Event pub element and get the Message object for the following Packet. 任何人都可以帮忙向我展示如何解析此Event pub元素并获取以下Packet的Message对象。 Maybe my keyword/search term googling is not correct but I'm not able to find anything helpful while looking for the documentation or tutorial about this. 也许我的关键字/搜索词谷歌搜索不正确,但是在查找有关此文档或教程时找不到任何有用的信息。

I have read something about PacketParserUtils and XmlPullParser and tried to implement it, I keep on getting null. 我已经阅读了有关PacketParserUtils和XmlPullParser的内容,并尝试实现它,但我一直在获取null。

Code

EventElement event = groupMessage.getExtension("event", "http://jabber.org/protocol/pubsub#event");

try {
    XmlPullParser parser = PacketParserUtils.newXmppParser();

    Log.d(TAG, "processStanza event: "+ event.toXML().toString());
    parser.setInput(new StringReader(event.toXML().toString()));
    Item  items = (Item) parser.getProperty("items");

    Log.d(TAG, "processStanza: " + items);
} catch (XmlPullParserException e) {
    e.printStackTrace();
}


<message to='+60174443333@crystal.domain.com/Resource' from='9176d3d3-e893-4add-91a1-82b42338c223@group.crystal.domain.com'>
    <event xmlns='http://jabber.org/protocol/pubsub#event'>
        <items node='urn:xmpp:mucsub:nodes:messages'>
            <item id='17100773132085304799'>
                <message xmlns='jabber:client' lang='en' to='+60174443333@crystal.domain.com' from='9176d3d3-e893-4add-91a1-82b42338c223@group.crystal.domain.com/+60149711089@crystal.domain.com' type='groupchat' id='21D85845-8434-4E0B-BB0C-5768256C5B66'>
                    <body xmlns='jabber:client'>This is the message</body>
                </message>
            </item>
        </items>
    </event>
</message>

Though its late, it may help new users. 尽管已过时,但它可能会帮助新用户。 You can parse custom muc-sub xml as : 您可以将自定义muc-sub xml解析为:

(In Kotlin) (在科特林)

xmppTcpConnection.addAsyncStanzaListener(StanzaListener {
it?.let { stanza ->
  if (stanza is Message) {

    val eventElement: EventElement? = stanza.getExtension(

              "event",
              "http://jabber.org/protocol/pubsub#event") 

    if (eventElement != null) {

        val itemsExtension: ItemsExtension = eventElement .event as ItemsExtension 

        itemsExtension.items?.forEach { namedElement ->
             val payloadItem = namedElement as PayloadItem<*>

             val simplePayload: SimplePayload = payloadItem.payload as SimplePayload

             val parserString: String = simplePayload.toXML(null)

             val xmlPullParser: XmlPullParser = PacketParserUtils.getParserFor(parserString)

             val message: Message = PacketParserUtils.parseMessage(xmlPullParser)

             //Your code here
         }
       }
   }
 }
}, StanzaTypeFilter(Message::class.java))

Refer Smack Discussion here 请在此处参考“讨论”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM