powered by Jive Software

ClassCastException when using MUC


I am getting a ClassCastException when using MUC and try to get the participants of a room or create a room.

I am using jabberd 1.4 with MUC on Debian. That is pretty much the default, isn’'t it? Regarding smack I am using a daily build from mid july.

I get a ClassCastException in org.jivesoftware.smackx.muc.MultiUserChat.getMUCUserExtension, line 1629, called from the READER thread.

A code sample is here: http://tinyurl.com/6mr8h

Anything I am doing wrong here?




Check that the smack.providers file is in you classpath. It seems that Smack can’'t locate that file so you are getting a DefaultPacketExtension instead of a MUCUser.


– Gato

Hey Gato,

thanks. That was it.

I am using smack inside eclipse and build from the sources, but without ant. I double-checked the build.xml file now. That was the only thing to be done, but to compile the classes then, right?

I am facing a follow-up problem now when trying to create a room. I get the following exception:

Creation failed - Missing acknowledge of room creation.:

at org.jivesoftware.smackx.muc.MultiUserChat.create(MultiUserChat.java:293)

at test.smack.ChatTest.main(ChatTest.java:23)

Exception in thread “main”

And it happens here:

// Look for confirmation of room creation from the server

MUCUser mucUser = getMUCUserExtension(presence);

if (mucUser != null && mucUser.getStatus() != null) {

if ("201".equals(mucUser.getStatus().getCode())) {

// Room was created and the user has joined the room




// We need to leave the room since it seems that the room already existed


throw new XMPPException("Creation failed - Missing acknowledge of room creation.");

if (mucUser != null && mucUser.getStatus() != null) {

mucUser.getStatus() returns null.

Here is my breaking code:

http://tinyurl.com/5szo5 (http://www.jabberstudio.org/cgi-bin/viewcvs.cgi/pepemax/pepe


Against what server are you running your code?


Sorry, my fault. It seems I need to use the same name for creating the MultiUserChat as for the room creation. Makes sense.

Anyway, why am I able to specify the name during create() then?




The name that you specify during #create() is your nickname in the room. Take in consideration that when you create a new room you immediately join the new room with the specified nickname.

– Gato

Ok, understood.