Spring Integration Xmpp 4 — отправить запрос на создание muc

Я настроил интеграцию spring с xmpp и могу отправлять сообщения другим jid. Для создания сообщения я использую следующий метод:

Message<?> message = MessageBuilder.withPayload("Test Message").
        setHeader(XmppHeaders.TO, "[email protected]").
        build();
messageChannel.send(message);

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

Любая помощь?

использование: XmppHeaders.TYPE установлено в "groupchat" и XmppHeaders.TO в "myroommmm" не работает. Журнал сервера xmpp:

[info] <0.609.0>@ejabberd_c2s:open_session:1105 ({socket_state,gen_tcp,#Port<0.16208>,<0.608.0>}) Opened session for [email protected]/resource 2016-04-12 15:55:40.987 [info] <0.609.0>@ejabberd_s2s:new_connection:406 New s2s connection started <0.611.0> 

[info] <0.611.0>@ejabberd_s2s_out:log_s2s_out:1253 Trying to open s2s connection: chiarottos-macbook-pro.local -> myroommmmme with TLS=false 2016-04-12 15:55:40.999 [info] <0.611.0>@ejabberd_s2s_out:open_socket:246 s2s connection: chiarottos-macbook-pro.local -> myroommmmme (remote server not found)

Я запускаю интеграционный тест

Обновление 2: Использование:

MultiUserChat multiUserChat = new MultiUserChat(xmppConnection,"prova");
        try {
            multiUserChat.join("soisdjdsoijds");
        } catch (XMPPException.XMPPErrorException e) {
            e.printStackTrace();
        } catch (SmackException e) {
            e.printStackTrace();
        }

Я получаю следующую ошибку:

remote-server-not-found
    at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:196)
    at org.jivesoftware.smackx.muc.MultiUserChat.enter(MultiUserChat.java:352)
    at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:516)
    at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:451)
    at radiosa.service.muc.MUCService.testRoom(MUCService.java:83)

(Сервер настроен правильно и работает)


person chiarotto.alessandro    schedule 12.04.2016    source источник


Ответы (1)


ChatMessageSendingMessageHandler предназначен только для отправки сообщений.

Все управление многопользовательским чатом (создание, присоединение, выход и т. д.) должно выполняться через org.jivesoftware.smackx.muc.MultiUserChatManager.

Хотя вы все еще можете отправить туда сообщение, используя ChatMessageSendingMessageHandler:

  • Заголовок XmppHeaders.TO должен быть именем room согласно JavaDocs:

    * @param jid the name of the room in the form "roomName@service", where "service" is the hostname at which the
    *        multi-user chat service is running. Make sure to provide a valid JID.
    */
    public synchronized MultiUserChat getMultiUserChat(String jid) { 
    
  • И заголовок XmppHeaders.TYPE должен быть как значение Message.Type.groupchat

person Artem Bilan    schedule 12.04.2016
comment
спасибо, если я использую MultiUserChatManager, мне нужно передать ему свой компонент XMPPConnection? Кстати, я использую последнюю версию spring-integration-xmpp (4.2.5), и это зависит от версии smack, которая не содержит MultiUserChatManager. - person chiarotto.alessandro; 12.04.2016
comment
О да, я понял. Похоже, это было введено с Smack 4.1.x. Мы поддерживаем это, начиная с SI-4.3. Я думаю, вы можете сделать то же самое, просто используя MultiUserChat: public MultiUserChat(XMPPConnection connection, String room). - person Artem Bilan; 12.04.2016
comment
Но используя MultiUserChat, я бы больше не использовал канал, только xmppconnection, верно? Я хотел бы использовать канал и просто отправить минимальную информацию на мой сервер xmpp, чтобы создать комнату. - person chiarotto.alessandro; 12.04.2016
comment
Я думаю, вам нужно сначала join многопользовательский чат, прежде чем отправлять сообщение. И я уже говорил вам: через ChatMessageSendingMessageHandler вы можете отправить только Message Пакет на xmppconnection. Вы должны использовать MultiUserChat напрямую для любого управления групповым чатом. Хотя можно завернуть всю операцию в service-activator и отправлять командные сообщения для управления чатом. - person Artem Bilan; 12.04.2016
comment
До встречи в логах: remote server not found. Это не проблема интеграции Spring. Извини. - person Artem Bilan; 12.04.2016
comment
спасибо, мой локальный сервер работает, если я отправлю сообщение другому jid, используя тот же интеграционный тест, все работает. Ошибка проявляется при попытке создания muc. Я не говорю, что пружина не работает. Прошу помощи в достижении моей цели. - person chiarotto.alessandro; 12.04.2016
comment
Ага... Я не знаком с MultiUserChat. Я добавил тег Smack к вашему вопросу в надежде, что кто-нибудь из Ignite Realtime посмотрит. - person Artem Bilan; 12.04.2016
comment
Хотя можно завернуть всю операцию в сервис-активатор и отправлять командные сообщения для управления чатом есть пример в инете? Для меня это как араб :-) - person chiarotto.alessandro; 12.04.2016
comment
М-м-м. Нет, конечно, нет. Это выходит за рамки Spring Integration. И даже больше: такая логика не соответствует цели EIP. Поэтому я бы рекомендовал использовать MultiUserChat чат напрямую для управления. - person Artem Bilan; 12.04.2016