如何使用smack库将自定义IQ节发送给其他用户?

问题描述:

这是用于获取名册如何使用smack库将自定义IQ节发送给其他用户?

<iq from="[email protected]/pda" id="rr82a1z7" 
type="get"> 
    <query xmlns="jabber:iq:roster"/> 
</iq> 

从这standard specification样品IQ节,IQ节可以通过设置“TO”属性被引导到特定的用户,以便XMPP服务器将在IQ节转发到JID (完整的Jabber ID)在 “TO” 属性指定,check specification

但是,当我查询IQ节,适合我的需要,这

<iq from="[email protected]/pda" id="rr82a1z7" 
to="[email protected]/Smack" 
type="get"> 
    <UserDetails xmlns="http://www.test.org/User/"> 
     <userName>username</username> 
    </UserDetails> 
</iq> 

诗节被转发到“爱丽丝梦游@ wond erland.lit“,但是我收到了来自Openfire服务器的错误条件”feature-not-implemented“的IQ Stanzs。

有什么办法摆脱这个错误,并得到结果?

我按照此tutorial生成客户端。

我可以看到正在接收的自定义Stanza的wireshark痕迹,但看不到“myIQListener”被调用?

问题:

  • 任何其他我很想念中间步骤?
  • 还有其他更好的例子吗?
+0

要发送节到另一个花名册,您需要在花名册订阅列表中。 –

+0

@GirishKumar aha,感谢您的信息,我将验证 –

+0

该示例工作正常,这是名称空间中的拼写错误,需要整整一天才能解决。再一次证明,检查自己的代码错别字应该是第一优先,而不是感到不安全的知识,你有:) –

这是我如何解决我的自己的问题。

  • 采用完整的Jabber ID(包括资源)

  • 由于嫌库不理解自定义IQ节实现 自己IQProvider,过滤器,并将其添加您的连接,恰好 解释here

您需要发送自己<presence type="subscribe" to="[email protected]"/>或需要在其他用户的名单列表:

参见:here

OR

Deny messages from non-roster users in Openfire

+1

我已经验证,并在wireshark的痕迹,我可以看到openfire XMPP服务器转发请求到客户端地址(全Jabber ID),甚至在本规范https://tools.ietf.org/html/rfc6120#page-105中,它规定“除非该消息被发送到已连接客户端帐户的纯粹JID” 。收到 带'to'地址的消息节后,服务器应该尝试 路由或将其发送给目标收件人(关于 的 与XML节相关的一般路由和传送规则,请参见第10节)“ –