Как заставить работать Smackx PubSub - PullRequest
2 голосов
/ 27 марта 2011

У меня есть следующий код:

        PubSubManager manager = new PubSubManager(connection, "pubsub.openfire.local");
        LeafNode myNode = (LeafNode) manager.createNode("NewNode", form);

        SimplePayload payload = new SimplePayload("session", "pubsub:NewNode:session", "<sessionId>1234</sessionId>");


        // putting null for id means you let server generate id
        PayloadItem<SimplePayload> item = new PayloadItem<SimplePayload>(null, payload);

        // you could use publish() for asynchronous call
        myNode.send(item);

, и я постоянно получаю следующую ошибку при попытке отправить значение узла:

конфликта (409) в>org.jivesoftware.smackx.pubsub.PubSubManager.sendPubsubPacket (PubSubManager.java:324) в> org.jivesoftware.smackx.pubsub.PubSubManager.sendPubsubPacket (PubSubManager.java:318) в org.jivesoftububSan) на PubSubPublisher.main (PubSubPublisher.java:33)

Любил бы любые идеи о том, как отлаживать, или двигаться вперед с этим.Благодаря.

1 Ответ

2 голосов
/ 28 июня 2011

Узел, который вы пытаетесь создать, уже существует. Сначала вызовите getNode и / или deleteNode , а затем createNode. Оберните ваш код в блок try/catch для обработки XMPPException, который может быть выброшен.

LeafNode myNode = null;
try{
  try{
    LeafNode existingNode = manager.getNode("NewNode");  
    //exists, so delete
    manager.deleteNode("NewNode");
  }catch(XMPPException e){
    //'getNode' threw an exception.
    //so we know that the node did not exist
  }
  myNode = (LeafNode) manager.createNode("NewNode", form);
}catch(XMPPException e){
  System.err.println(e);
}
...