首页 文章

在openfire中搜索用户时出现错误请求400

提问于
浏览
1

我试图在明火中搜索用户 .

public void searchUser(String username) {
        UserSearchManager userSearchManager = new UserSearchManager(
                xmppConnection);
        Form searchForm;
        try {

            searchForm = userSearchManager.getSearchForm("search."
                    + xmppConnection.getServiceName());

            Form answerForm = searchForm.createAnswerForm();
            answerForm.setAnswer("Username", true);

            answerForm.setAnswer("search", username);

            org.jivesoftware.smackx.ReportedData data = userSearchManager
                    .getSearchResults(answerForm,
                            "search." + xmppConnection.getServiceName());

            if (data.getRows() != null) {
                Iterator<Row> it = data.getRows();
                while (it.hasNext()) {
                    Row row = it.next();
                    Iterator<?> iterator = row.getValues("jid");
                    if (iterator.hasNext()) {
                        String value = iterator.next().toString();
                        System.out.println(value);
                    }

                }

            }
        } catch (XMPPException e) {
            e.printStackTrace();
        }
    }

有一些类似的线程所以我跟着他们并在连接之前添加了这个提供者管理器 .

public void getProviderManager(ProviderManager providerManager) {

        // Private Data Storage
        providerManager.addIQProvider("query", "jabber:iq:private",
                new PrivateDataManager.PrivateDataIQProvider());

        // Time
        try {
            providerManager.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
        providerManager.addExtensionProvider("x", "jabber:x:roster",
                new RosterExchangeProvider());

        // Message Events
        providerManager.addExtensionProvider("x", "jabber:x:event",
                new MessageEventProvider());

        // Chat State
        providerManager.addExtensionProvider("active",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        providerManager.addExtensionProvider("composing",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        providerManager.addExtensionProvider("paused",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        providerManager.addExtensionProvider("inactive",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        providerManager.addExtensionProvider("gone",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());

        // XHTML
        providerManager.addExtensionProvider("html",
                "http://jabber.org/protocol/xhtml-im",
                new XHTMLExtensionProvider());

        // Group Chat Invitations
        providerManager.addExtensionProvider("x", "jabber:x:conference",
                new GroupChatInvitation.Provider());

        // Service Discovery # Items
        providerManager.addIQProvider("query",
                "http://jabber.org/protocol/disco#items",
                new DiscoverItemsProvider());

        // Service Discovery # Info
        providerManager.addIQProvider("query",
                "http://jabber.org/protocol/disco#info",
                new DiscoverInfoProvider());

        // Data Forms
        providerManager.addExtensionProvider("x", "jabber:x:data",
                new DataFormProvider());

        // MUC User
        providerManager.addExtensionProvider("x",
                "http://jabber.org/protocol/muc#user", new MUCUserProvider());

        // MUC Admin
        providerManager.addIQProvider("query",
                "http://jabber.org/protocol/muc#admin", new MUCAdminProvider());

        // MUC Owner
        providerManager.addIQProvider("query",
                "http://jabber.org/protocol/muc#owner", new MUCOwnerProvider());

        // Delayed Delivery
        providerManager.addExtensionProvider("x", "jabber:x:delay",
                new DelayInformationProvider());

        // Version
        try {
            providerManager.addIQProvider("query", "jabber:iq:version",
                    Class.forName("org.jivesoftware.smackx.packet.Version"));
        } catch (ClassNotFoundException e) {
            // Not sure what's happening here.
        }

        // VCard
        providerManager.addIQProvider("vCard", "vcard-temp",
                new VCardProvider());

        // Offline Message Requests
        providerManager.addIQProvider("offline",
                "http://jabber.org/protocol/offline",
                new OfflineMessageRequest.Provider());

        // Offline Message Indicator
        providerManager.addExtensionProvider("offline",
                "http://jabber.org/protocol/offline",
                new OfflineMessageInfo.Provider());

        // Last Activity
        providerManager.addIQProvider("query", "jabber:iq:last",
                new LastActivity.Provider());

        // User Search
        providerManager.addIQProvider("query", "jabber:iq:search",
                new UserSearch.Provider());

        // SharedGroupsInfo
        providerManager.addIQProvider("sharedgroup",
                "http://www.jivesoftware.org/protocol/sharedgroup",
                new SharedGroupsInfo.Provider());

        // JEP-33: Extended Stanza Addressing
        providerManager.addExtensionProvider("addresses",
                "http://jabber.org/protocol/address",
                new MultipleAddressesProvider());

        // FileTransfer
        providerManager.addIQProvider("si", "http://jabber.org/protocol/si",
                new StreamInitiationProvider());

        providerManager.addIQProvider("query",
                "http://jabber.org/protocol/bytestreams",
                new BytestreamsProvider());

        // Privacy
        providerManager.addIQProvider("query", "jabber:iq:privacy",
                new PrivacyProvider());
        providerManager.addIQProvider("command",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider());
        providerManager.addExtensionProvider("malformed-action",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.MalformedActionError());
        providerManager.addExtensionProvider("bad-locale",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.BadLocaleError());
        providerManager.addExtensionProvider("bad-payload",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.BadPayloadError());
        providerManager.addExtensionProvider("bad-sessionid",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.BadSessionIDError());
        providerManager.addExtensionProvider("session-expired",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.SessionExpiredError());

    }

我还在

12-07 01:14:58.027: W/System.err(1591): bad-request(400)
12-07 01:14:58.037: W/System.err(1591):     at org.jivesoftware.smackx.search.UserSearch.getSearchForm(UserSearch.java:84)
12-07 01:14:58.037: W/System.err(1591):     at org.jivesoftware.smackx.search.UserSearchManager.getSearchForm(UserSearchManager.java:73)
12-07 01:14:58.037: W/System.err(1591):     at com.afinity.core.chat.ChatManager.searchUser(ChatManager.java:107)
12-07 01:14:58.037: W/System.err(1591):     at com.afinity.chat.ui.Activity.<init>(Activity.java:19)
12-07 01:14:58.037: W/System.err(1591):     at java.lang.Class.newInstanceImpl(Native Method)
12-07 01:14:58.047: W/System.err(1591):     at java.lang.Class.newInstance(Class.java:1208)
12-07 01:14:58.047: W/System.err(1591):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
12-07 01:14:58.047: W/System.err(1591):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093)
12-07 01:14:58.047: W/System.err(1591):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
12-07 01:14:58.047: W/System.err(1591):     at android.app.ActivityThread.access$700(ActivityThread.java:135)
12-07 01:14:58.047: W/System.err(1591):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
12-07 01:14:58.047: W/System.err(1591):     at android.os.Handler.dispatchMessage(Handler.java:102)
12-07 01:14:58.047: W/System.err(1591):     at android.os.Looper.loop(Looper.java:137)
12-07 01:14:58.047: W/System.err(1591):     at android.app.ActivityThread.main(ActivityThread.java:4998)
12-07 01:14:58.047: W/System.err(1591):     at java.lang.reflect.Method.invokeNative(Native Method)
12-07 01:14:58.047: W/System.err(1591):     at java.lang.reflect.Method.invoke(Method.java:515)
12-07 01:14:58.047: W/System.err(1591):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-07 01:14:58.047: W/System.err(1591):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-07 01:14:58.047: W/System.err(1591):     at dalvik.system.NativeStart.main(Native Method)

1 回答

  • 0

    我通过以下步骤解决了这个问题:

    step 1 :在调用XMPPConnection的连接之前调用follow方法configure .

    step 2 :调用XMPPConnection 's addConnectionListener and addPacketListener after invoking login(make sure XMPPConnection' s isAuthenticated为true) .

    配置方法:

    public void configure(ProviderManager pm) {
        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 (Exception e) {
            e.printStackTrace();
        }
        // 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());
    
        pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",
                new DiscoverItemsProvider());
    
        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());
        pm.addIQProvider("si", "http://jabber.org/protocol/si",
                new StreamInitiationProvider());
        pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",
                new BytestreamsProvider());
        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());
    
    }
    

相关问题