powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / java,xmppconnection
7 сообщений из 7, страница 1 из 1
java,xmppconnection
    #37064826
WarmAndSunnyDay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. У меня следущая проблема: нужно написать код на java, отправляющий сообщение через XMPP на аккаунт, зарегистрированный на данном сайте. Я юзаю библиотеку Smack 3.1.0. Вот, собственно, код:

XMPPConnection connection = new XMPPConnection(xmppServer);
try{
connection.connect();
connection.login(xmppUser,xmppPwd);
Chat chat = connection.getChatManager().createChat(address, new MessageListener() {
public void processMessage(Chat chat, org.jivesoftware.smack.packet.Message message) {
logger.info("Received message: " + message);
}
});
chat.sendMessage(text);
} catch (XMPPException xmppExs) {
logger.error(xmppExs.getLocalizedMessage());
}

После строки
connection.login(xmppUser,xmppPwd);
возможны 2 варианта,в зависимости от имени указываемого сервера:
1) Если указан jabber.ru, то получаем Exception: "No response from server"
2) Если указан jabber.org, соответственно: "SASL authentication failed using mechanism DIGEST-MD5"

Целый день уже гуглю, во всех примерах указан сервер jabber.org. Вопрос: какой сервер указывать и, если проблема с этим DIGEST-MD5, то как её решить?
...
Рейтинг: 0 / 0
java,xmppconnection
    #37068302
zz5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если вот это добавить перед логином?
Код: plaintext
SASLAuthentication.supportSASLMechanism("PLAIN",  0 );
...
Рейтинг: 0 / 0
java,xmppconnection
    #37068310
zz5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается первой проблемы, то сам как-то натолкнулся на такую ошибку. Надо гуглить, лечится патчем smack.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
java,xmppconnection
    #39089198
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Туплю, не выходит каменный цветок )
В сети поднят сервер, необх. законнектиться к нему и отправить сообщение (нотификация).
Пишу для пробы тоже:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
class JabberTest {
    public static void main(String[] args) throws SmackException, XMPPException, IOException {
        XMPPTCPConnectionConfiguration configBuilder = XMPPTCPConnectionConfiguration.builder()
            .setServiceName("ipaddress")
            .setCompressionEnabled(false)
            .setHost("ipaddress")
            .setPort(5222)
            .setSendPresence(false)
            .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
            .build();

        XMPPTCPConnection  con = new XMPPTCPConnection(configBuilder);
        con.connect();
        try {
            con.login("user", "password");

            Chat chat = ChatManager.getInstanceFor(con).createChat("someOtherUser", new ChatMessageListener() {
                    @Override
                    public void processMessage(Chat chat, Message message) {
                        System.out.println("Received message: " + message);
                    }
                });

            chat.sendMessage("Test");            
        }  finally {
            con.disconnect();
        }
    }
}


Коннект проходит, на логине падает по NPE. (При этом с дажббера логин под этим же юзером конечно проходит)
Полностью выглядит так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Exception in thread "main" java.lang.NullPointerException
	at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:64)
	at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:60)
	at org.jivesoftware.smack.util.stringencoder.Base64.encodeToString(Base64.java:42)
	at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:202)
	at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:169)
	at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:236)
	at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.java:374)
	at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:457)
	at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:432)
	at jabbersmackapi.JabberTest.main(JabberTest.java:29)
Java Result: 1


По поводу как писали выше:
Код: java
1.
SASLAuthentication.supportSASLMechanism("PLAIN", 0);


Не нахожу метода supportSASLMechanism у SASLAuthentication, зато есть например registerSASLMechanism, но и с ним что делать не очень ясно пока ) И вообще поможет ли фз )
...
Рейтинг: 0 / 0
java,xmppconnection
    #39089857
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Включил дебаг в smack.
Запускаем с .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled), падаем на логине:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
12:46:15 PM SENT (0): <stream:stream xmlns='jabber:client' to='ipaddress' xmlns:stream='http://etherx.jabber.org/streams' 
                         version='1.0' from='user@ipaddress' xml:lang='en'>
12:46:15 PM RECV (0): <?xml version='1.0'?>
                         <stream:stream xmlns:stream='http://etherx.jabber.org/streams' 
                            version='1.0' 
                            from='ipaddress' 
                            id='1b43c742-5ac7-4e6a-9c1d-1f82892617dd' 
                            xml:lang='en' xmlns='jabber:client'>
                         <stream:features>
                            <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
                            <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
                               <mechanism>SCRAM-SHA-1</mechanism>
                               <mechanism>DIGEST-MD5</mechanism>
                            </mechanisms>
                            <register xmlns='http://jabber.org/features/iq-register'/>
                         </stream:features>
12:46:15 PM SENT (0): <presence id='KNYIX-1' type='unavailable'></presence>
12:46:15 PM SENT (0): </stream:stream>
Exception in thread "main" java.lang.NullPointerException
	at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:64)
	at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:60)
	at org.jivesoftware.smack.util.stringencoder.Base64.encodeToString(Base64.java:42)
	at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:202)
	at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:169)
	at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:236)
	at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginNonAnonymously(XMPPTCPConnection.java:374)
	at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:457)
	at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:415)
	at jabbersmackapi.JabberTest.main(JabberTest.java:33)
Java Result: 1


Странно. Будто клиент не поддерживает предлагаемые сервером механизмы аутентификации?
Как тогда включить при аутентификации тот же DIGESTMD5 например?

Запускаем с .setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
12:51:28 PM SENT (0): <stream:stream xmlns='jabber:client' to='ipaddress' xmlns:stream='http://etherx.jabber.org/streams' 
                         version='1.0' from='user@ipaddress' xml:lang='en'>
12:51:28 PM RECV (0): <?xml version='1.0'?>
                         <stream:stream xmlns:stream='http://etherx.jabber.org/streams' 
                            version='1.0' 
                            from='ipaddress' 
                            id='613a92d9-5ace-424f-bc2e-17a580453dda' 
                            xml:lang='en' xmlns='jabber:client'>
                         <stream:features>
                            <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
                            <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
                               <mechanism>SCRAM-SHA-1</mechanism>
                               <mechanism>DIGEST-MD5</mechanism>
                            </mechanisms>
                            <register xmlns='http://jabber.org/features/iq-register'/>
                         </stream:features>
12:51:28 PM SENT (0): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'></starttls>
12:51:28 PM RECV (0): <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
Exception in thread "main" org.jivesoftware.smack.SmackException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1017)
   at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:944)
   at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:959)
   at java.lang.Thread.run(Thread.java:745)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
   at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1917)
   at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:301)
   at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:295)
   at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1471)
   at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:212)
   at sun.security.ssl.Handshaker.processLoop(Handshaker.java:936)
   at sun.security.ssl.Handshaker.process_record(Handshaker.java:871)
   at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1043)
   at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343)
   at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371)
   at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
   at org.jivesoftware.smack.tcp.XMPPTCPConnection.proceedTLSReceived(XMPPTCPConnection.java:757)
   at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$1000(XMPPTCPConnection.java:140)
   at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1010)
   ... 3 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
   at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
   at sun.security.validator.Validator.validate(Validator.java:260)
   at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
   at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
   at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
   at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1453)
   ... 13 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:145)
   at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
   at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
   at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
   ... 19 more
окт 29, 2015 12:51:29 PM org.jivesoftware.smack.AbstractXMPPConnection callConnectionClosedOnErrorListener
WARNING: Connection closed with error
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
   at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1917)
   at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:301)
   at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:295)
   at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1471)
   at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:212)
	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:936)
	at sun.security.ssl.Handshaker.process_record(Handshaker.java:871)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1043)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
	at org.jivesoftware.smack.tcp.XMPPTCPConnection.proceedTLSReceived(XMPPTCPConnection.java:757)
	at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$1000(XMPPTCPConnection.java:140)
	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1010)
	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:944)
	at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:959)
	at java.lang.Thread.run(Thread.java:745)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
	at sun.security.validator.Validator.validate(Validator.java:260)
	at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1453)
	... 13 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:145)
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
	... 19 more
Java Result: 1


Здесь падает уже на самом коннекте. Походу какая-то беда с сертификатами, работа с которыми в примере конечно вообще никак не прописана походу.
Smack 4.1.4. Смотрел, в документации, или плохо искал, но толком не нашел ничего - приводится по сути этот же пример, что и тестирую.
Что не так? Или может есть у кого рабочие примеры по теме? )
...
Рейтинг: 0 / 0
java,xmppconnection
    #39090025
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первом случае (.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
пишут:
As suggested by Stephen Base64encoder is indeed coming null because its not being set. To initialise that you have to include smack-java7 module in your project.
Before connecting you have to initialize smack using,

Код: java
1.
new Java7SmackInitializer().initialize();


Ну подключил к проекту smack-java7-4.1.4.jar.
А толку. Как теперь найти в нем этот Java7SmackInitializer? )
Пишешь в IDE Java7SmackInitializer, но он нифига не подхватывает (как обычно предлагая импортировать нужный класс).
Смотришь в документацию
Но там из полезного видно только, что находится он в org.jivesoftware.smack.java7.
Пишешь руками import (вообще бред конечно) org.jivesoftware.smack. а java7-то и нет нифига
Зато есть org.jivesoftware.smack.SmackInitialization, но куда и чего с этим тоже не понятно.
При этом в документации только голая спецификация без примеров и что с чем связано непонятно, или я просто не нахожу примеры?
Как можно догадаться, что прежде надо инициализировать smack и как его вообще инициализировать?
Почему было не прописать на автомате эту инициализацию, если она действительно нужна?
Почему не выдавать нормальные сообщения об ошибках, а не NPE и сиди гадай ковыряйся что за хрень?
Почему получается, что часть методов/классов фигурирующая в примерах уже не обнаруживается в текущей версии?
...
Рейтинг: 0 / 0
java,xmppconnection
    #39090371
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... Оказалось, импортировал часть библиотек по невнимательности не к тому проекту,
после исправления прописал механизм аутентификации и вроде пошло, правда пока только
с .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / java,xmppconnection
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]