我正在尝试通过mod_mam在ejabberd(来自jessie-backports的16.09)中查询用户的消息存档(如示例2中所示。用户在其存档中查询消息),但继续得到“没有模块正在处理此查询”错误。
使用Babbler Java客户端与服务器进行交互。
以下是自定义有效内容类:
@XmlRootElement(name = "query", namespace = "urn:xmpp:mam:2")
@XmlAccessorType(XmlAccessType.FIELD)
public final class UserMessageArchiveQuery {
@XmlAttribute(name = "queryid")
private String queryId;
public UserMessageArchiveQuery() {}
public String getQueryId() {
return queryId;
}
public void setQueryId(String string) {
this.queryId = string;
}
}
然后将其添加到会话配置中。
XmppSessionConfiguration sessionConfiguration =
XmppSessionConfiguration
.builder()
.extensions(Extension.of(UserMessageArchiveQuery.class))
.build();
现在我们可以建立连接,因为我可以相应地发送和接收消息。
XmppClient client = XmppClient.create("localhost", sessionConfiguration, tcpConfiguration, boshConfiguration);
client.connect();
client.login("someuser", password);
这是事情向南的地方。为给定用户和有效负载准备IQ,并查询服务器:
UserMessageArchiveQuery payload = new UserMessageArchiveQuery();
IQ iq = IQ.set(Jid.of("someuser@localhost"), payload);
return client.query(iq).getResult();
查看ejabberd日志,发送到服务器的结果XML如下:
<iq id="47a6204a-6ac3-453b-9dfd-7488ec6de734" to="someuser@localhost" type="set">
<query xmlns="urn:xmpp:mam:2"></query>
</iq>
我们得到了:
packet {xmlel,<<"iq">>,[{<<"type">>,<<"error">>},{<<"from">>,<<"someuser@localhost">>},{<<"xml:lang">>,<<"en-US">>},{<<"id">>,<<"47a6204a-6ac3-453b-9dfd-7488ec6de734">>}],[{xmlel,<<"query">>,[{<<"xmlns">>,<<"urn:xmpp:mam:2">>}],[]},{xmlel,<<"error">>,[{<<"code">>,<<"503">>},{<<"type">>,<<"cancel">>}],[{xmlel,<<"service-unavailable">>,[{<<"xmlns">>,<<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],[]},{xmlel,<<"text">>,[{<<"xmlns">>,<<"urn:ietf:params:xml:ns:xmpp-stanzas">>}],[{xmlcdata,<<"No module is handling this query">>}]}]}]}
我确信mod_mam已启用且工作正常,因为我可以在“archive”表中看到已存档的消息。我不知道如何继续下去。
答案 0 :(得分:1)
ejabberd目前不支持urn:xmpp:mam:2。