2014-11-08 2 views
0

Я пытаюсь хранить постоянные общедоступные данные на сервере xmpp. В идеале пользователь сможет хранить узел на сервере, а затем извлекать этот конкретный узел позже. Все это реализовано на сервере openfire, используя strophe для переднего конца.XMPP обнаружение узла Pubsub, элемент не найден

Когда я создаю узел, я использую что-то вроде этого:

$iq({ 
type: 'set', 
to: 'pubsub.ubuntu', 
id: 'pubsubecreatenode1' 
}).c('pubsub', {xmlns: Strophe.NS.PUBSUB}) 
.c('create', { 
node: "princely_musings"; 
}); 

, которая возвращает результат строфу с создания узла, если я уже создал узел, в этом случае она возвращает:

<iq id="pubsubecreatenode1" xmlns="jabber:client" type="error" 
    from="pubsub.ubuntu" 
    to="[email protected]"> 
<pubsub xmlns="http://jabber.org/protocol/pubsub"> 
    <create node="princely_musings"></create> 
</pubsub> 
<error code="409" type="cancel"> 
    <conflict xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"></conflict> 
</error> 
</iq> 

Я также опубликовать его с помощью этого:

$iq({ 
type: "set", 
to: 'pubsub.ubuntu', 
id: 'pub1' 
}).c("pubsub", { 
xmlns: Strophe.NS.PUBSUB 
}).c("publish", { 
node: "princely_musings" 
}).c("item") 
.c("object", {xmlns: "http://www.w3.org/2005/Atom"}) 
.h("somedata"); 

Какие также возвращает успешную строфу результата IQ.

Однако, когда я отправляюсь открывать узлы, я получаю ошибку, не найденную при запросе конкретного узла (princely_musings), или пустой список, если не указывать узел.

$iq({ 
    type: "get", 
    to: 'pubsub.ubuntu', 
    id: "disco1" 
}).c("query", { 
    xmlns: Strophe.NS.DISCO_ITEMS 
}); 

и в качестве альтернативы для конкретного узла:

.c("query", { 
    xmlns: Strophe.NS.DISCO_ITEMS, 
    node: "princely_musings" 
}); 

Эти возвращения:

<iq id="disco1" xmlns="jabber:client" type="result" 
    from="pubsub.ubuntu" 
    to="[email protected]"> 
<query xmlns="http://jabber.org/protocol/disco#items"></query> 
</iq> 

и

<iq id="disco1" xmlns="jabber:client" type="error" 
    from="pubsub.ubuntu" 
    to="[email protected]"> 
<query xmlns="http://jabber.org/protocol/disco#items" 
     node="princely_musings"> 
</query> 
<error code="404" type="cancel"> 
    <item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"></item-not-found> 
</error> 
</iq> 

ошибки конфликта, что я возникает, когда я пытаюсь создать существующий узел привел меня к считают, что я am надлежащим образом хранил узлы на сервере, однако я не могу определить, почему мое открытие iq stanzas не находит ничего. Есть ли что-то, что мне не хватает или неправильно сконфигурировано в этих вызовах, или есть другой протокол, который я должен использовать для этой операции?

ответ

0

Итак, я понял это. Я должен был искать базу данных openfire в inPubsubItem, чтобы определить, действительно ли я создал элементы (я не был). Это происходило напрямую из-за конфигурации узла по умолчанию. Создать IQ должен был выглядел так:

$iq({ 
     type: 'set', 
     to: 'pubsub.ubuntu', 
     from: 'create1' 
    }).c('pubsub', {xmlns: Strophe.NS.PUBSUB}) 
.c('create', { node: 'princely_musings' }).up() 
.c('configure') 
.c('x', {xmlns: 'jabber:x:data', type: 'submit'}) 
.c('field', {'var': 'pubsub#persist_items'}).c('value').t('1').up().up() 
.c('field', {'var': 'pubsub#access_model'}).c('value').t('open').up().up() 
.c('field', {'var': 'pubsub#publish_model'}).c('value').t('open') 
0

я уже решил этот вопрос, проблема заключается не в том, есть элементы в таблице «ofPubsubItem»

я отправить «» IQ на сервере " pubsub.myserver»вместо„MyServer“, то будет для OpenFire характерного точки PubSub

<iq to='pubsub.myserver' 
type='set' 
id='create'> 
<pubsub xmlns='http://jabber.org/protocol/pubsub'> 
<create/> 
</pubsub> 
</iq> 

ТНХА все равно

+0

Я думаю, ваш вопрос, возможно, был немного отличается от моей первоначальной проблемы, хотя, глядя на тексте мой вопрос, я также вижу, что я использовал неправильный адрес сервера. Я редактировал вопрос, чтобы использовать правильный формат pubsub. По-прежнему важно, чтобы persist_items правильно устанавливался в конфигурации узла, иначе вы потеряете данные между сеансами. – nmarsh

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