启用IQProvider时,Smack无法识别type =“result”节

时间:2016-04-09 09:51:07

标签: java xmpp smack

TL;博士

在注册IQProvider时,我没有在'service' . $value得到答案,我可能没有准确理解IQProviders的工作方式,但不知道从哪里开始。

我正在使用Smack发送和接收一些自定义IQ。这是我用来发送自定义IQ的代码。

StanzaListener

好的。我确定发送了正确的答案,因为调试模式向我展示了我想要看到的内容。结果节由另一方的节点客户端提供,因此不关心这个问题。

以下是对我没有用的东西:我在iq.setFrom(JidCreate.fullFrom(CLIENT_USER)); iq.setTo(JidCreate.fullFrom(SERVER_USER)); xmppConnection.sendIqWithResponseCallback(iq, new StanzaListener() { @Override public void processPacket(Stanza packet) throws SmackException.NotConnectedException, InterruptedException { handleReply((WedooIQ) packet); } }, new ExceptionCallback() @Override public void processException(Exception exception) { exception.printStackTrace(); } }); 得到答案,当然,如果我不想要的话,我也无法做到这一点我自己做所有的解析。我被告知要实现一个IQProvider并注册它 - 所以我这样做:

StanzaListener()

但是当注册时,我不再得到答案,而是在那5秒之后出现超时异常

ProviderManager.addIQProvider(Xxx.ELEMENT_NAME, Yyy.NAMESPACE, new ZzzIQProvider());

我在想System.err: org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 5000ms (~5s). Waited for response using: IQReplyFilter ...... 会这样做,以便我从上面IQProvider获得一个更有用的对象。这是如何运作的?我已在smack homepage上阅读了有关此文档的文档,但我不明白如何获得智商,我只了解如何注册提供商而对我没有任何明显影响。

可能只是在这里遗漏了一些小小的东西,因为我已经坐了好几天了,所以对我们的帮助非常感激。

1 个答案:

答案 0 :(得分:0)

我的解析器中出现错误,我没有读到所有标签。所以它会在没有任何通知的情况下默默地失败确保您正确地读取整个XML,同时在课堂

之前不要滥用解析器或解析器

如果不是这样,那么@calvinfly在评论中提出了另一个想法:

  

我遇到同样的问题,我在IQProvider上发现了一个错误。   IQProvider返回具有不同节id的IQ,因此StanzaListener不会使用StanzaFilter捕获结果IQ .....