Hi, this is my first post here and my english is not very good, so sorry for that
I'm working with a pubsub node, which is in authorize mode.
i make a StanzaListener on the owner of the node to authorize the subscription of users:
(i think the next code is ok, but i put it because i think it can help to understand and i dont know if this is the best way to do it)
StanzaListener myListener = new StanzaListener() { public void processPacket(Stanza packet) { for(ExtensionElement extension : packet.getExtensions()) { switch (extension.getNamespace()) { ... case "jabber:x:data": Form form=Form.getFormFrom(packet); if (form.getField("FORM_TYPE").getValues().get(0).equals("http://jabber.org/protocol/pubsub#subscribe_authorization")) { Form answer = form.createAnswerForm(); for (FormField field : answer.getFields()) { switch(field.getVariable()) { case "pubsub#allow": //I know, i accept all users for know field.addValue("true"); break; case "FORM_TYPE": break; default: field.addValues(form.getField(field.getVariable()).getValues()); } } Message respuesta = new Message(packet.getFrom()); respuesta.setFrom(packet.getTo()); respuesta.setStanzaId(packet.getStanzaId()); respuesta.addExtension(answer.getDataFormToSend()); try { connection.sendStanza(respuesta); } catch (SmackException.NotConnectedException ex) { Logger.getLogger(Xmpp.class.getName()).log(Level.SEVERE, null, ex); } break; } ...
The problem is that when a user try to subscribe to the node, with this code:
LeafNode node = pubsubManager.getNode("thePubsubNode"); node.addItemEventListener(new ItemPubsubListener()); node.subscribe("validUser@validServer");
it gets this message error in the console:
Connection closed with error
java.lang.ClassCastException: org.jivesoftware.smack.packet.DefaultExtensionElement cannot be cast to org.jivesoftware.smackx.pubsub.NodeExtension
at org.jivesoftware.smackx.pubsub.provider.EventProvider.createReturnExtension(Eve ntProvider.java:39)
at org.jivesoftware.smackx.pubsub.provider.EventProvider.createReturnExtension(Eve ntProvider.java:34)
at org.jivesoftware.smack.provider.EmbeddedExtensionProvider.parse(EmbeddedExtensi onProvider.java:108)
at org.jivesoftware.smack.provider.EmbeddedExtensionProvider.parse(EmbeddedExtensi onProvider.java:84)
at org.jivesoftware.smack.provider.Provider.parse(Provider.java:35)
at org.jivesoftware.smack.util.PacketParserUtils.parseExtensionElement(PacketParse rUtils.java:929)
at org.jivesoftware.smack.util.PacketParserUtils.addExtensionElement(PacketParserU tils.java:1060)
at org.jivesoftware.smack.util.PacketParserUtils.parseMessage(PacketParserUtils.ja va:287)
at org.jivesoftware.smack.util.PacketParserUtils.parseStanza(PacketParserUtils.jav a:151)
at org.jivesoftware.smack.AbstractXMPPConnection.parseAndProcessStanza(AbstractXMP PConnection.java:956)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$500(XMPPTCPConnection.java: 140)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPC onnection.java:989)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPCon nection.java:944)
at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnecti on.java:959)
at java.lang.Thread.run(Thread.java:745)
i dont receive the answer with the approval notification in the smack debug window, and i cant make a StanzaListener, because the error occur before
I'm using smack 4.1.4, on a 15.06 ejabberd server (draugr.de)
thanks in advance and if you need more information just tell me