Добрейший денек, славные нынче погоды стоят, не правда ли?..
Ну а теперь к делу. Второй день мучаюсь сильными болями - не могу понять, то ли perl не едет, то ли jabber..
Суть задачи - скрипт отсылающий сообщения по джаберу. В качестве джаббер-сервера - openfire. Вроде просто, да не тут то было. Русский текст - будь он неладен.
Испробовал все что нашел - Net::Jabber, Net::XMPP, Jabber::SimpleSend, чёто еще уже не помню.. С инглишем проблем нет, с русским тоже пока не большой текст (т.е. тупо «Проверка», «Прием. Ау.. Аллё.» - все работает на ура), но стоит дать текст поболее так в ответ тишина - и ошибок нет (на клиенте) и сообщения нет (у получателя).
Про UTF8 и Perl знаю, и в курсе о внутреннем представлении и прочее.. Все вокруг юникодное, use utf-8 и прочее все в норме.
Единственное, что я надыбал, это когда длинный русский текст уходит, в warn.log джаббер сервера выплевывается вот такая дрянь
2011.08.29 14:20:14 Closing session due to exception: (SOCKET, R: /192.168.1.2:33402, L: /192.168.1.23:5222, S: 0.0.0.0/0.0.0.0:5222)
org.apache.mina.filter.codec.ProtocolDecoderException: java.nio.charset.MalformedInputException: Input length = 1 (Hexdump: 3C 6D 65 73 73 61 67 65 20 74 6F 3D 27 73 68 65 76 5F 61 79 40 73 77 69 66 74 2E 67 65 6F 73 65 69 73 27 3E 3C 62 6F 64 79 3E D0 9D D0 BE D0 B2 D1 8B D0 B9 20 D0 BA D0 BE D0 BC D0 BC D0 B5 D0 BD D1 82 D0 B0 D1 80 D0 B8 D0 B9 20 D0 B4 D0 BE D0 B1 D0 B0 D0 B2 D0 BB D0 B5 D0 BD 20 D0 BA 20 D0 B7 D0 B0 D0 B4 D0 B0 D1 87 D0 B5 20 D0 97 D0 B0 D0 B4 D0 B0 D1 87 D0 B0 3A 20 D0 93 D0 B0 D0 B7 D0 BF D1 80 D0 BE D0 BD D0 B5 D1 84 D1 82 D1 8C 2D D0 9D D0 A2 D0 A6 2C 20 D0 BF D0 B5 D1 80 D0 B5 D1 83 D1 81 D1 82 D0 B0 D0 BD D0 BE D0 B2 D0 BA D0 B0 20 45 43 48 4F 53 20 D0 94 D0 BE D0 B1 D0 B0 D0 B2 D0 B8 D0 BB 3A 20 D0 98 D0 B2 D0 B0 D0 BD 20 D0 98 D0 B2 D0 B0 D0 BD D0 BE D0 B2 20 D0 9F D1 80 D0 B8 D0 BE D1 80 D0 B8 D1 82 D0 B5 D1 82 3A 20 D0 9D D0 BE D1 80 D0 BC D0 B0 D0)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:170)
at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:239)
at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:283)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
at java.lang.Thread.run(Unknown Source)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(Unknown Source)
at java.nio.charset.CharsetDecoder.decode(Unknown Source)
at org.jivesoftware.openfire.nio.XMLLightweightParser.read(XMLLightweightParser.java:183)
at org.jivesoftware.openfire.nio.XMPPDecoder.doDecode(XMPPDecoder.java:41)
at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:163)
... 9 more
2011.08.29 14:20:14 Closing session due to exception: (SOCKET, R: /192.168.1.2:33402, L: /192.168.1.23:5222, S: 0.0.0.0/0.0.0.0:5222)
org.apache.mina.filter.codec.ProtocolDecoderException: java.nio.charset.MalformedInputException: Input length = 1 (Hexdump: BB D1 8C D0 BD D1 8B D0 B9 20 D0 92 D1 8B D0 BF D0 BE D0 BB D0 BD D0 B5 D0 BD D0 BE 3A 20 35 36 25 20 D0 9C D0 B5 D0 BD D0 B5 D0 B4 D0 B6 D0 B5 D1 80 3A 20 49 76 61 6E 20 49 76 61 6E 6F 76 20 D0 9F D1 80 D0 BE D0 B5 D0 BA D1 82 3A 20 D0 A1 D0 BE D0 BF D1 80 D0 BE D0 B2 D0 BE D0 B6 D0 B4 D0 B5 D0 BD D0 B8 D0 B5 20 50 61 72 61 64 69 67 6D 20 32 30 3C 2F 62 6F 64 79 3E 3C 73 75 62 6A 65 63 74 3E 50 69 65 20 41 64 76 69 63 65 3C 2F 73 75 62 6A 65 63 74 3E 3C 2F 6D 65 73 73 61 67 65 3E)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:170)
at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:239)
at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:283)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
at java.lang.Thread.run(Unknown Source)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(Unknown Source)
at java.nio.charset.CharsetDecoder.decode(Unknown Source)
at org.jivesoftware.openfire.nio.XMLLightweightParser.read(XMLLightweightParser.java:183)
at org.jivesoftware.openfire.nio.XMPPDecoder.doDecode(XMPPDecoder.java:41)
at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:163)
... 9 more
Как я понимаю, чтото в кодировке не то.. Это породил простой код
use strict;
use warnings;
use Jabber::SimpleSend qw(send_jabber_message);
use utf8;
my $txt=qq~Новый комментарий добавлен к задаче Задача: Газпронефть-НТЦ, переустановка ECHOS Добавил: Иван Иванов Приоритет: Нормальный Выполнено: 56% Менедер: Ivan Ivanov Проект: Сопровождение Paradigm 20~;
send_jabber_message
(
{
user => 'otkogo@swift',
password => 'password',
target => 'kuda@swift',
subject => 'Pie Advice',
message => $txt
}
);
С другими модулями ситуация точно такая же. Неуж сервер чудит? Хотя опенфаер стоит не первый год (сейчас последняя версия) - нареканий никогда не было