Не удается отправлять / повторно получать сообщения с сервера openfire через Smack API - PullRequest
1 голос
/ 25 августа 2011

У меня есть собственный настроенный сервер OpenFire. Я создал двух пользователей user1 и user2 и пытаюсь отправлять / получать сообщения между этими пользователями через API Smack.

Я включил режим отладки в Smack API и вижу, что мое фиктивное приложение отправляет и получает сообщения, но MessageListener не работает, оно никогда не вызывает метод processMessage(Chat chat, Message message), также я не вижу сообщений в Миранде IM клиент пользователя 2..

Код:

public class Main {
    public static void main(String[] args) throws XMPPException, InterruptedException {
        sendJabberMessage();

        while (true) {
            Thread.sleep(50);
        }
    }

    public static void sendJabberMessage() throws XMPPException {
    XMPPConnection.DEBUG_ENABLED = true;
    ConnectionConfiguration config = new ConnectionConfiguration("ejab.net", 5222, "ejab.net");
    SASLAuthentication.supportSASLMechanism("PLAIN", 0);

    config.setCompressionEnabled(true);
    config.setSASLAuthenticationEnabled(true);

    XMPPConnection connection = new XMPPConnection(config);
    connection.connect();
    connection.login("user1", "password");
    Chat chat = connection.getChatManager().createChat("user2@ejab.net.ru", new MessageListener() {
        public void processMessage(Chat chat, Message message) {
            System.out.println("Received message: " + message);
        }
    });
}

Вот мои журналы отладки:

Отправленный лог

<stream:stream to="ejab.net" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
<stream:stream to="ejab.net" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
<auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">b3BlcmF0b3IyQGVqYWIubmV0AG9wZXJhdG9yMkBlamFiLm5ldAA4ZGRYUGdQYTU0MlQ=</auth>
<stream:stream to="ejab.net" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
<iq id="4KApN-0" type="set"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>Smack</resource></bind></iq>
<iq id="4KApN-1" type="set"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>
<compress xmlns='http://jabber.org/protocol/compress'>
<method>zlib</method></compress>
<stream:stream to="ejab.net" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
<iq id="4KApN-2" type="get"><query xmlns="jabber:iq:roster"></query></iq>
<presence id="4KApN-3"></presence>
<message id="4KApN-4" to="user1@ejab.net.ru" from="user2@ejab.net/Smack" type="chat"><body>Hello world</body><thread>T0T5u0</thread></message>
<iq id="mir_148" to="user1@ejab.net/Miranda" type="result"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="client" name="Smack" type="pc"/><feature var="http://jabber.org/protocol/xhtml-im"/><feature var="http://jabber.org/protocol/muc"/><feature var="http://jabber.org/protocol/commands"/></query></iq>

Полученный журнал

<?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="ejab.net" id="4942adbf" xml:lang="en" version="1.0"><stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>JIVE-SHAREDSECRET</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms></stream:features>
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
<?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="ejab.net" id="4942adbf" xml:lang="en" version="1.0"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>JIVE-SHAREDSECRET</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><auth xmlns="http://jabber.org/features/iq-auth"/><register xmlns="http://jabber.org/features/iq-register"/></stream:features>
<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
<?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="ejab.net" id="4942adbf" xml:lang="en" version="1.0"><stream:features><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features>
<iq type="result" id="4KApN-0" to="ejab.net/4942adbf"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>user2@ejab.net/Smack</jid></bind></iq>
<iq type="result" id="4KApN-1" to="user2@ejab.net/Smack"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>
<compressed xmlns='http://jabber.org/protocol/compress'/>
<?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="ejab.net" id="4942adbf" xml:lang="en" version="1.0"><stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features>
<iq type="result" id="4KApN-2" to="user2@ejab.net/Smack"><query xmlns="jabber:iq:roster"><item jid="user1@ejab.net" name="user1" subscription="both"/></query></iq>
<presence from="user1@ejab.net/Miranda" to="user2@ejab.net/Smack"><priority>0</priority><c xmlns="http://jabber.org/protocol/caps" node="http://miranda-im.org/caps" ver="0.9.28.0" ext="pmuc-v1 mood activity mir_notes"/><x xmlns="vcard-temp:x:update"><photo/></x><status>Yep, I'm here.</status></presence>
<iq type="get" to="user2@ejab.net/Smack" id="mir_147" from="user1@ejab.net/Miranda"><query xmlns="jabber:iq:version"/></iq>
<iq type="get" to="user2@ejab.net/Smack" id="mir_148" from="user1@ejab.net/Miranda"><query xmlns="http://jabber.org/protocol/disco#info"/></iq>
<message type="chat" to="user2@ejab.net/Smack" id="mir_151" from="user1@ejab.net/Miranda"><body>TEST</body></message>

Может ли кто-нибудь помочь мне и сказать, почему мой клиент не печатает не входящие в него сообщения на консоли и почему user2 не получает сообщения; Журналы не содержат ошибок.

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Меня несколько смущает то, что вы сказали, что находится в вашем коде и что вы показываете в своем журнале отладки.

Ваш код (и ваше сообщение) говорят, что вы входите в систему как user1 склиент Smack, но ваш журнал показывает, что вы отправляете как user2 и получаете от user1.Я предполагаю, что это просто простая ошибка в ваших отчетах.

Реальная проблема заключается в том, что вы отправляете сообщение на

user1@ejab.net.ru

и получаете сообщение от

user1@ejab.net/Miranda

Это 2 разных пользователя.Вы, кажется, отправляете другому пользователю, от которого вы получаете.Таким образом, причина, по которой клиент Miranda не получает сообщение, заключается в том, что клиент Smack не отправил его на правильный JID, и, конечно, это та же самая причина, по которой вы ничего не получили в своем слушателе.

НаС другой стороны, чтобы получить входящее сообщение, вы можете создать ChatManagerListener , а затем вы получите входящий чат от клиента Miranda.

0 голосов
/ 25 августа 2011

Оба пользователя на самом деле должны открыть чат друг с другом, прежде чем получать сообщения. Вы должны открыть чат между user1 и user2, зарегистрировать MessageListener, который будет прослушивать сообщения, отправленные user2 (тот, который вы создали, на самом деле прослушивает сообщения, отправленные user2, а в вашем журнале сообщений говорится, что вы отправляете сообщение от user2 для user1), затем сделайте то же самое с точностью до наоборот. Наконец, отправьте сообщение, и вы сможете его обработать.

Кроме того, просто комментарий, пожалуйста, будьте более конкретны в своих заголовках, так как API хорошо работает с openfire

...