我有一个openfire服务器,其中安装了监控服务插件以存档聊天消息。从此处提供的链接XMPP Message Archiving
我发送了以下节:
<iq type='get' id='juliet1'>
<list xmlns='urn:xmpp:archive'
with='juliet@myserver.com'>
<set xmlns='http://jabber.org/protocol/rsm'>
<max>30</max>
</set>
</list>
</iq>
在我的android服务上使用此命令:
Packet packet = new Packet() {
@Override
public String toXML() {
String xExtension = "<iq type=\"get\" id=\"juliet1\">"+
"<list xmlns=\"urn:xmpp:archive\""+
" with=\"juliet@myserver.com\">"+
"<set xmlns=\"http://jabber.org/protocol/rsm\"><max>10</max></set></list></iq>";
return xExtension;
}
};
clientApplication.getXmppConnection().sendPacket(packet);
但是,不幸的是服务器回复:
<iq type="error" to="juliet@myserver.com/Smack"><error code="501" type="cancel"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
嗯,所以如何才能正确检索聊天消息呢?
答案 0 :(得分:1)
试试这个 发送&amp;接收数据包试试这个
if (connection.isConnected()) {
connection.login("username", "password");
CustomIQ myIQ = new CustomIQ();
myIQ. setType(IQ.Type.SET);
myIQ.setTo("juliet@myserver.com/Smack");
connection.sendPacket(myIQ);
//The listener for receiving all the packets from the peer device
connection.addPacketListener( new PacketListener() {
@Override
public void processPacket(Packet packet) {
if( packet.getClass() == JingleIQ.class ) {
JingleIQ j = (JingleIQ) packet;
System.out.println("packet details"+packet.toXML()+" <---- : [jingle packet] " + j.getSID() + " : " + j.getAction() + " : " + packet.toXML() );
System.out.println(" <---- : [jingle packet] " + j.getXmlns()+ " : " + j.getFrom() + " : " + j.getTo() );
}
}},
new PacketFilter() {
@Override
public boolean accept(Packet packet) {
System.out.println(" <---- : [jingle packet] " + packet.toXML() );
return true;
}} );
//My custom IQ class
class CustomIQ extends IQ {
public String getChildElementXML() {
String request = "<jingle initiator='juliet@myserver.com/Smack' sid='1' xmlns='urn:xmpp:jingle:1' action='session-initiate' compatibility='RFC5245'>"
+"<content name='video' creator='initiator'>" +
"<description xmlns='urn:xmpp:jingle:apps:rtp:1' media='type of file'</description>" +
"<transport pwd='fcX/0ZyOQNCBMs6c8H3ZIM' ufrag='L8Y0' xmlns='urn:xmpp:jingle:transports:ice-udp:1'>" +
"</transport>" +
"</content>" +
"</jingle>";
return request;
}
}
希望这会帮助你...... !!
答案 1 :(得分:0)
我正在使用asmack和openfire进行聊天项目但是当我尝试发送文件时我也得到错误501 ..我在很多帖子上看到提供者没有加载。试试这个我希望它有所帮助。我刚刚解决了我的错误501问题。这是一个服务器问题。代理端口。
configureProvider(ProviderManager.getInstance());
public void configureProvider(ProviderManager pm) {
// ----------------------------------------------------------------------------------------
// Private Data Storage
pm.addIQProvider("query", "jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider());
// Time
try {
pm.addIQProvider("query", "jabber:iq:time", Class.forName("org.jivesoftware.smackx.packet.Time"));
} catch (ClassNotFoundException e) {
Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Time");
}
// Roster Exchange
pm.addExtensionProvider("x", "jabber:x:roster", new RosterExchangeProvider());
// Message Events
pm.addExtensionProvider("x", "jabber:x:event", new MessageEventProvider());
// Chat State
pm.addExtensionProvider("active", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("composing", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("paused", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("inactive", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("gone", "http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
// XHTML
pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider());
// Group Chat Invitations
pm.addExtensionProvider("x", "jabber:x:conference", new GroupChatInvitation.Provider());
// Service Discovery # Items
pm.addIQProvider("query", "http://jabber.org/protocol/disco#items", new DiscoverItemsProvider());
// Service Discovery # Info
pm.addIQProvider("query", "http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());
// Data Forms
pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
// MUC User
pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user", new MUCUserProvider());
// MUC Admin
pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin", new MUCAdminProvider());
// MUC Owner
pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner", new MUCOwnerProvider());
// Delayed Delivery
pm.addExtensionProvider("x", "jabber:x:delay", new DelayInformationProvider());
// Version
try {
pm.addIQProvider("query", "jabber:iq:version", Class.forName("org.jivesoftware.smackx.packet.Version"));
} catch (ClassNotFoundException e) {
// Not sure what's happening here.
}
// VCard
pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
// Offline Message Requests
pm.addIQProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider());
// Offline Message Indicator
pm.addExtensionProvider("offline", "http://jabber.org/protocol/offline", new OfflineMessageInfo.Provider());
// Last Activity
pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());
// User Search
pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());
// SharedGroupsInfo
pm.addIQProvider("sharedgroup", "http://www.jivesoftware.org/protocol/sharedgroup", new SharedGroupsInfo.Provider());
// JEP-33: Extended Stanza Addressing
pm.addExtensionProvider("addresses", "http://jabber.org/protocol/address", new MultipleAddressesProvider());
// FileTransfer
pm.addIQProvider("si", "http://jabber.org/protocol/si", new StreamInitiationProvider());
pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams", new BytestreamsProvider());
pm.addIQProvider("open", "http://jabber.org/protocol/ibb", new OpenIQProvider());
pm.addIQProvider("close", "http://jabber.org/protocol/ibb", new CloseIQProvider());
pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb", new DataPacketProvider());
// Privacy
pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
pm.addIQProvider("command", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider());
pm.addExtensionProvider("malformed-action", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.MalformedActionError());
pm.addExtensionProvider("bad-locale", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadLocaleError());
pm.addExtensionProvider("bad-payload", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadPayloadError());
pm.addExtensionProvider("bad-sessionid", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadSessionIDError());
pm.addExtensionProvider("session-expired", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.SessionExpiredError());
}