2013-09-11 2 views
0

Я должен отправить пользовательский IQ из [email protected]/Smack, используя свое собственное пространство имен http://www.test.com/test определенному пользователю [email protected]/Smack. Когда я использую OpenFire, все работает нормально, но Ejabberd не передает этот IQ пользователю. В файле журнала я вижу, что IQ получен сервером, внутренне отправлен в диспетчер сеансов, но не перенаправлен пользователю. Если я отправлю Message, он будет отправлен правильно. Я использую Java-smack-Client.XMPP: Ejabberd не перенаправляет пользовательский IQ с префиксом пространства имен пользователю

Требуется ли для Ejabberd конкретная конфигурация для пересылки пользовательских IQ?

=INFO REPORT==== 2013-09-11 13:55:36 === 
    D(<0.658.0>:ejabberd_receiver:320) : Received XML on stream = 
    "<iq id=\"0j8w6-8\" to=\"[email protected]/Smack\" type=\"set\"> 
     <ts:register-request xmlns:ts=\"http://www.test.com/test\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"> 
      <ts:node-id>550e8400-e29b-11d4-a716-446655440000</ts:node-id> 
      <ts:properties> 
       <ts:path>.</ts:path> 
       <ts:delivery-mode>1</ts:delivery-mode> 
      </ts:properties> 
     </ts:register-request> 
    </iq>" 


    =INFO REPORT==== 2013-09-11 13:55:36 === 
    D(<0.659.0>:ejabberd_router:313) : route 
from {jid,"eva","pc377","Smack","eva","pc377","Smack"} 
to {jid,"bob","pc377","Smack","bob","pc377","Smack"} 
packet {xmlelement,"iq", 
       [{"id","0j8w6-8"}, 
       {"to","[email protected]/Smack"}, 
       {"type","set"}], 
       [{xmlelement,"ts:register-request", 
        [{"xmlns:ts","http://www.test.com/test"}, 
        {"xmlns:xs","http://www.w3.org/2001/XMLSchema"}, 
        {"xmlns:xsi", 
         "http://www.w3.org/2001/XMLSchema-instance"}], 
        [{xmlelement,"ts:node-id",[], 
         [{xmlcdata, 
           <<"550e8400-e29b-11d4-a716-446655440000">>}]}, 
        {xmlelement,"ts:properties",[], 
         [{xmlelement,"ts:path",[],[{xmlcdata,<<".">>}]}, 
          {xmlelement,"ts:delivery-mode",[], 
           [{xmlcdata,<<"1">>}]}]}]}]} 


    =INFO REPORT==== 2013-09-11 13:55:36 === 
    D(<0.659.0>:ejabberd_local:300) : local route 
from {jid,"eva","pc377","Smack","eva","pc377","Smack"} 
to {jid,"bob","pc377","Smack","bob","pc377","Smack"} 
packet {xmlelement,"iq", 
         [{"id","0j8w6-8"},{"to",[...]},{[...],...}], 
         [{xmlelement,[...],...}]} 


    =INFO REPORT==== 2013-09-11 13:55:36 === 
    D(<0.659.0>:ejabberd_sm:411) : session manager 
from {jid,"eva","pc377","Smack","eva","pc377","Smack"} 
to {jid,"bob","pc377","Smack","bob","pc377","Smack"} 
packet {xmlelement,"iq", 
         [{"id","0j8w6-8"},{"to",[...]},{[...],...}], 
         [{xmlelement,[...],...}]} 


    =INFO REPORT==== 2013-09-11 13:55:36 === 
    D(<0.659.0>:ejabberd_sm:510) : sending to process <0.656.0> 

ответ

0

Попробуйте его с простым XML:

<iq id="0j8w6-8" to="[email protected]/Smack" type="set"> 
    <register-request xmlns="http://www.test.com/test"> 
     <node-id>550e8400-e29b-11d4-a716-446655440000</node-id> 
     <properties> 
      <path>.</path> 
      <delivery-mode>1</delivery-mode> 
     </properties> 
    </register-request> 
</iq> 

Если это не сработает, попробуйте переименовать register-request и delivery-mode удалить тире. Ни одно из этих изменений не требуется, но либо поможет команде ejabberd найти ошибку.

+0

Хорошее предложение ... Я попробовал, и IQ отправлен! После некоторых тестов мне кажется, что ejabberd не способен обрабатывать префиксы пространства имен в XML. –

+1

Я отправил отчет об ошибке. Его можно найти здесь: https://support.process-one.net/i#browse/EJAB-1661 –

Смежные вопросы