Pergunta

Estou tentando usar o mais recente tronco Smackx para obter e depois assinar um nó pubsub. No entanto, o OpenFire apenas me envia um erro de volta: o item não encontrado (404).

Estou instanciando os objetos Java da Coldfusion, para que meus trechos de código possam parecer engraçados, mas talvez alguém seja capaz de me dizer o que eu esqueci.

Veja como eu crio o nó:

    ftype = createObject("java", "org.jivesoftware.smackx.pubsub.FormType");
    cform = createObject("java", "org.jivesoftware.smackx.pubsub.ConfigureForm").init(ftype.submit);
    cform.setPersistentItems(true);
    cform.setDeliverPayloads(true);
    caccess = createObject("java", "org.jivesoftware.smackx.pubsub.AccessModel");
    cform.setAccessModel(caccess.open);
    cpublish = createObject("java", "org.jivesoftware.smackx.pubsub.PublishModel");
    cform.setPublishModel(cpublish.open);
    cform.setMaxItems(99);

    manager = createObject("java", "org.jivesoftware.smackx.pubsub.PubSubManager").init(XMPPConnection);

    myNode = manager.createNode("subber", cform);

E eis como estou tentando chegar a isso (em uma seção diferente do código):

    manager = createObject("java", "org.jivesoftware.smackx.pubsub.PubSubManager").init(XMPPConnection);
    myNode = manager.getNode("subber");

Imediatamente após criando O nó que pareço ser capaz de publicar assim:

    payload = createObject("java", "org.jivesoftware.smackx.pubsub.SimplePayload").init("book","pubsub:test:book","<book xmlns='pubsub:test:book'><title>Lord of the Rings</title></book>");
    item = createObject("java", "org.jivesoftware.smackx.pubsub.Item").init(payload);
    myNode.publish(item);

No entanto, é a chamada getNode () que está causando meu código ao erro.

Verifiquei que os nós estão sendo criados verificando o banco de dados usado pelo meu servidor OpenFire. Eu posso vê -los lá, devidamente atribuídos como nós de folhas, etc.

Algum conselho? Alguém mais lá fora fazendo alguma coisa com XMPP e Coldfusion? Eu tive um grande sucesso enviando e recebendo mensagens com CF e Smack simplesmente não teve o pubsub ainda funcionando :)

Obrigado!

Foi útil?

Solução

Isso foi respondido:

Há um segundo método na aula de pubsubmanager que aceita dois argumentos, uma conexão e um para parâmetro. Aparentemente o OpenFire requer isso para parâmetro e depois de algumas experiências, descobri que funciona usando pubsub.your.xmpp.address

manager = createObject("java", "org.jivesoftware.smackx.pubsub.PubSubManager").init(XMPPConnection,"pubsub.127.0.0.1");

Outras dicas

Talvez este exemplo possa ser usado como referência para você:

 public void login(String Ip,String username,String passwaord)
     {
         try 
         {
            connConfig = new AndroidConnectionConfiguration(Ip, 5222);
            connection = new XMPPConnection(connConfig);
            connection.connect();  
            connection.login(username, passwaord);
            pubSubAddress = "pubsub."+ connection.getServiceName();
            manager = new PubSubManager(connection,pubSubAddress);
            Log.i("MyError","connection success");  
         }
         catch (XMPPException e) 
         {
             Log.i("MyError","connection failed");      
             e.printStackTrace();
         }

     }

Um exemplo normalizado é mostrado como seguinte:

Publique o nó:

import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smackx.pubsub.LeafNode;
import org.jivesoftware.smackx.pubsub.PayloadItem;
import org.jivesoftware.smackx.pubsub.PubSubManager;
import org.jivesoftware.smackx.pubsub.SimplePayload;

public class XmppPubsub_Publisher {
    private static XMPPConnection connection = new XMPPConnection("think");
    private static String USRE_NAME = "test1";
    private static String PASSWORD = "1";
    static{
        try {
            connection.connect();
            connection.login(USRE_NAME,PASSWORD);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args)throws Exception{
        try{
            PubSubManager manager = new PubSubManager(connection);
            String nodeId = "test2";
            LeafNode myNode = null;
            try {
                myNode = manager.getNode(nodeId);
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(myNode == null){
                myNode = manager.createNode(nodeId);
            }
            String msg = "fsadfasdfsadfasdfd---";
            SimplePayload payload = new SimplePayload("message","pubsub:test:message", "<message xmlns='pubsub:test:message'><body>"+msg+"</body></message>");
            PayloadItem<SimplePayload> item = new PayloadItem<SimplePayload>("5", payload);
            myNode.publish(item);
            System.out.println("-----publish-----------");
        }
        catch(Exception E)
        {E.printStackTrace();}
    }
}

Recuperar o nó:

import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smackx.pubsub.ItemPublishEvent;
import org.jivesoftware.smackx.pubsub.Node;
import org.jivesoftware.smackx.pubsub.PayloadItem;
import org.jivesoftware.smackx.pubsub.PubSubManager;
import org.jivesoftware.smackx.pubsub.listener.ItemEventListener;

public class XmppPubsub_Reciever {
    private static XMPPConnection connection = new XMPPConnection("think");
    private static String USRE_NAME = "test1";
    private static String PASSWORD = "1";
    static {
        try {
            connection.connect();
            connection.login(USRE_NAME, PASSWORD);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws Exception {
        String nodeId = "test2";
        PubSubManager manager = new PubSubManager(connection);
        Node eventNode = manager.getNode(nodeId);
        eventNode.addItemEventListener(new ItemEventListener<PayloadItem>() {
            public void handlePublishedItems(ItemPublishEvent evt) {
                for (Object obj : evt.getItems()) {
                    PayloadItem item = (PayloadItem) obj;
                    System.out.println("--:Payload=" + item.getPayload().toString());
                }
            }
        });
        eventNode.subscribe(connection.getUser());
        while(true);
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top