java – asmack – 接收自定义XML消息||

前端之家收集整理的这篇文章主要介绍了java – asmack – 接收自定义XML消息||前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我花了一些时间在 Android设备中添加smack.providers,我的应用程序很好地接收了它.我添加了默认的iqProviders和extensionProviders,但我还添加了我的自定义extensionProvider,它是以下内容
  1. <extensionProvider>
  2. <elementName>players</elementName>
  3. <namespace>Boxer:players</namespace>
  4. <className>company.games.Boxer.PlayerListProvider</className>
  5. </extensionProvider>

我还要介绍一下PlayerListProvider类,它目前只是为了看它是否会被调用(它不会被调用) – 当我知道它被调用时我将完全实现它,因此至少是功能的一部分作品:

  1. import java.util.List;
  2. import java.util.Map;
  3.  
  4. import org.jivesoftware.smack.packet.PacketExtension;
  5. import org.jivesoftware.smackx.provider.EmbeddedExtensionProvider;
  6.  
  7. import android.util.Log;
  8.  
  9. @SuppressWarnings("deprecation")
  10. class PlayerListProvider extends EmbeddedExtensionProvider {
  11. protected PacketExtension createReturnExtension(String currentElement,String currentNamespace,Map<String,String> attributeMap,List<? extends PacketExtension> content) {
  12. Log.w("***** AAAAAAAAAAAAAAAAAAAA *******","0");
  13. return new XMLPlayerList();
  14. }
  15.  
  16. }
  17.  
  18.  
  19.  
  20. class XMLPlayerList implements PacketExtension {
  21.  
  22. public String getElementName() {
  23. return "aaaaa";
  24. }
  25.  
  26. public String getNamespace() {
  27. return "aaaaa";
  28. }
  29.  
  30. public String toXML() {
  31. return "aaaaa";
  32. }
  33.  
  34. }

当我运行客户端Android应用程序时,我收到以下消息:

  1. <message to="eee@localhost" type="chat" id="9" from="admin@localhost">
  2. <body>
  3. &lt;players xmlns="Boxer:players" command="playerlist"&gt;
  4. &lt;player&gt;test1&lt;/player&gt;
  5. &lt;player&gt;test2&lt;/player&gt;
  6. &lt;/players&gt;
  7. </body>
  8. <thread>3P0i00</thread>
  9. </message>

我现在的问题是,为什么在收到消息时没有调用PlayerListProvider(EmbeddedExtensionProvider).该消息包含标记,并具有Boxer:player的命名空间,正如我在smack.providers中指定的那样.

有什么想法吗?

解决方法

在SO上阅读了类似问题之后,我遇到了 question/answerblog post about another way( part 1)( part 2)来实现自定义消息发送/接收.

您是否考虑过使用PacketExtensionProvider代替EmbeddedExtensionProvider

如果您有兴趣试用它来代替EmbeddedExtensionProvider,可以在here中更详细地解释它.它可能不是您正在寻找的……(看起来它需要更多的手动解析方法),但它可能会识别您的PlayerListProvider类(通过扩展PEPEvent类.)

猜你在找的Java相关文章