2015-07-28 3 views
1

Я пытаюсь написать клиенту XMPP для подключения к Quickblox и использовать его в качестве бота для приложения чата. Для этого я использую Smack 4.1.3. Вот мой код:Клиент XMPP для Quickblox с помощью Smack

public static void sendChat1() { 

    XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() 
      .setUsernameAndPassword("4461610-26179", "pass") 
      .setServiceName("chat.quickblox.com") 
      .setPort(5222) 
      .build(); 

    System.out.println("Establishing Connection"); 
    AbstractXMPPConnection conn2 = new XMPPTCPConnection(config); 
    try { 
     conn2.connect(); 
    } catch (SmackException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
    } catch (XMPPException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
    } 



    MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(conn2); 

    System.out.println("Creating multi user chat room"); 
    MultiUserChat muc = manager.getMultiUserChat("[email protected]"); 

    System.out.println("Joining chat room"); 
    try { 
     muc.join("4461610"); 
    } catch (XMPPException.XMPPErrorException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
     return; 
    } catch (SmackException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
     return; 
    } 

    System.out.println("Chat room request"); 
    try { 
     muc.sendConfigurationForm(new Form(DataForm.Type.submit)); 
    } catch (SmackException.NoResponseException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
    } catch (XMPPException.XMPPErrorException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
    } catch (SmackException.NotConnectedException e) { 
     System.out.println("ERROR"); 
     e.printStackTrace(); 
    } 
} 

    public static void main(String[] args) { 
     sendChat1(); 
    } 

По некоторым причинам, я не могу сделать клиент подключиться к чату с помощью MultiUserChat. Вот вывод, когда я запускаю этот код:

Establishing Connection 
Creating multi user chat room 
Joining chat room 
ERROR 
org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: not-authorized - auth 
at      org.jivesoftware.smack.XMPPException$XMPPErrorException.ifHasErrorThenThrow(XMPPException.java:135) 
at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232) 
at org.jivesoftware.smackx.muc.MultiUserChat.enter(MultiUserChat.java:311) 
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:495) 
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:430) 
at Main.sendChat1(Main.java:53) 
at Main.main(Main.java:80) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
Jul 29, 2015 12:52:36 AM org.jivesoftware.smack.roster.Roster$PresencePacketListener processPacket 
WARNING: Roster not loaded while processing presence stanza 

Process finished with exit code 0 

я включил отладку и нашел это:

Establishing Connection 
01:28:55 AM SENT (0): <stream:stream xmlns='jabber:client' to='chat.quickblox.com' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='[email protected]@chat.quickblox.com' xml:lang='en'> 
01:28:56 AM RECV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='tigase-error-tigase' from='chat.quickblox.com' version='1.0' xml:lang='en'><stream:error><improper-addressing xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error></stream:stream> 

Конфигурация приложения на quickblox кажется правильным, а также. Я создал пользователя, который я использую в этом приложении. Я также создал публичный диалог, который также используется в этом приложении. Не уверен, что здесь происходит.

Btw, я не могу использовать SDK, предоставленные с Quickblox, так как я должен развернуть этот код на своем веб-сервере, который построен на основе java.

ответ

0

неподходящий адресации ошибки говорит, что он говорит

Это JID странно 4461610-26179 @ chat.quickblox.com @ chat.quickblox.com

это должно быть просто 4461610-26179 @ чат .quickblox.com

, именно поэтому вы получаете эту ошибку

Я не вижу, где это может быть проблема с этим в коде, во всяком случае, пожалуйста, проверьте такую ​​возможность

+0

@ saksham-gupta какие-либо обновления до сих пор? –

+0

У меня такая же проблема, даже если я обновился до QB 3.0, когда мой список не подключен, он начинает получать пакет присутствия Smack и показывает W/Roster: реестр не загружается при обработке строфы присутствия, а позже он сбой падает: java.lang .NullPointerException: попытка вызвать виртуальный метод 'int java.lang.String.indexOf (int)' в ссылке нулевого объекта на org.jxmpp.util.XmppStringUtils.parseBareJid (XmppStringUtils.java:124) – Artist404