Smack API, исключение connect () - PullRequest
       18

Smack API, исключение connect ()

2 голосов
/ 08 февраля 2012

Я пытаюсь подключиться к своей компании XMPPServer и получаю следующее исключение:

java.io.EOFException: input contained no data
at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:3003)
at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)
at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1410)
at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1395)
at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:325)
at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)

Мой код действительно прост ...

System.setProperty("smack.debugEnabled", "true");
XMPPConnection.DEBUG_ENABLED = true;
ConnectionConfiguration config = new ConnectionConfiguration("xxx", 5223);
config.setSecurityMode(SecurityMode.enabled);
config.setSASLAuthenticationEnabled(true);
config.setDebuggerEnabled(true);
config.setCompressionEnabled(false);
XMPPConnection connection = new XMPPConnection(config);
connection.connect();

Что я делаю не так?
«Сырые отправленные пакеты» из окна «Отладка Smack», похоже, отображают правильный поток XML:

<stream:stream to="xxx" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
<presence id="3347O-0" type="unavailable"></presence>
</stream:stream>

---- ОБНОВЛЕНИЕ ----

Я нашелпроблема.
Для SSL-соединения необходим следующий код:

config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
config.setSocketFactory(new DummySSLSocketFactory());

Класс DummySSLSocketFactory можно найти в Spark или непосредственно здесь:

http://svn.igniterealtime.org/svn/repos/spark/trunk/src/java/org/jivesoftware/spark/util/DummySSLSocketFactory.java

1 Ответ

2 голосов
/ 09 февраля 2012

Я обнаружил проблему.
Для SSL-соединения необходим следующий код:

config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
config.setSocketFactory(new DummySSLSocketFactory());

Вы можете использовать DummySSL class , который также можно найти в Spark.

...