没有登录的Smack服务发现给出了错误的请求(400)

时间:2012-03-16 09:32:30

标签: xmpp smack

我正在尝试发现pubsub服务提供的项目。当我登录目标服务器时,我可以成功获得响应。但是当我连接bu不登录时,它会给出错误的请求错误。

这是代码:

ConnectionConfiguration config = new ConnectionConfiguration(serverAddress, 5222);
config.setServiceName(serviceName);
connection = new XMPPConnection(config);
connection.connect();
connection.login(userName, password); //!!!when I remove this line, bad request error is received

ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(connection);
DiscoverItems items;
try {
items = discoManager.discoverItems("pubsubservice." + serverName);
} catch (XMPPException e) {
e.printStackTrace();
}

当用户未登录但是已建立连接时,是否有办法发现项目?

2 个答案:

答案 0 :(得分:0)

不,您必须进行身份验证才能将节点发送到XMPP中的任何JID(否则他们将无法回复您,因为他们不知道您的地址)。

也许一个选项是匿名身份验证。大多数服务器都支持它,它会在服务器上为您创建一个临时帐户,并使用临时JID。您不需要密码,登录时间很快。

答案 1 :(得分:0)

@MattJ是正确的,您可以尝试使用匿名登录。那会让你分道扬..

您当前的请求只会获取节点,之后您必须获取每个节点的项目。使用 PubsubManager 来获取所需信息会更简单,因为它提供了访问/使用所有pubsub的便捷方法。

尝试documentation here,您正在寻找 getAffiliations() 方法。

BTW,我认为pubsub的典型默认服务名称是 pubsub 而不是 pubsubservice 。至少就是Openfire的情况。