You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2010/05/16 22:39:31 UTC

svn commit: r944906 [1/2] - in /mina/vysper/trunk: nbxml/src/main/java/org/apache/vysper/xml/fragment/ server/core/src/main/java/org/apache/vysper/xmpp/authorization/ server/core/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/ server/co...

Author: ngn
Date: Sun May 16 20:39:29 2010
New Revision: 944906

URL: http://svn.apache.org/viewvc?rev=944906&view=rev
Log:
Basic implementation of MUC IQ hander
Initial implementation of "Kicking an Occupant" MUC use case (VYSPER-124)
Fixing some remaining ns declarations (VYSPER-196)

Added:
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/UserX.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ModeratorKickOccupantTestCase.java
Removed:
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/Item.java
Modified:
    mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java
    mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/authorization/AuthorizationResponses.java
    mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java
    mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0049_privatedata/PrivateDataIQHandler.java
    mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0054_vcardtemp/VcardTempIQHandler.java
    mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java
    mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java
    mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandlerTestCase.java
    mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java
    mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java
    mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/async/AsyncIQGetHandlerTestCase.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeStatusTestCase.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionHistoryTestCase.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessageTestCase.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/XTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/SubscriberPayloadNotificationVisitor.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishHandler.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsHandler.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveSubscriptionsHandler.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerManageAffiliationsHandler.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubCreateNodeTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubPublishTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveSubscriptionsTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubConfigureNodeTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubDeleteNodeTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerModifyAffiliationsTestCase.java
    mina/vysper/trunk/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/owner/PubSubOwnerRetrieveAffiliationsTestCase.java

Modified: mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java (original)
+++ mina/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xml/fragment/AbstractXMLElementBuilder.java Sun May 16 20:39:29 2010
@@ -80,7 +80,6 @@ public abstract class AbstractXMLElement
     
     private void startNewElement(String name, String namespaceURI, String namespacePrefix) {
         // TODO assert that name does not contain namespace (":")
-        // TODO handle the namespace, given by URI, currently always NULL in XMLElement constructors
         ElementStruct element = new ElementStruct();
         element.attributes = new ArrayList<Attribute>();
         element.namespaces = new HashMap<String, String>();

Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/authorization/AuthorizationResponses.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/authorization/AuthorizationResponses.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/authorization/AuthorizationResponses.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/authorization/AuthorizationResponses.java Sun May 16 20:39:29 2010
@@ -42,7 +42,7 @@ public class AuthorizationResponses {
 
     public Stanza getFailure(SASLFailureType failureType) {
         return new StanzaBuilder("failure", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_SASL)
-                .startInnerElement(failureType.value()).endInnerElement().build();
+                .startInnerElement(failureType.value(), NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_SASL).endInnerElement().build();
     }
     public Stanza getFailureMalformedRequest() {
         return getFailure(SASLFailureType.MALFORMED_REQUEST);

Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandler.java Sun May 16 20:39:29 2010
@@ -83,7 +83,7 @@ public class BindIQHandler extends Defau
     private Stanza bindError(IQStanza stanza, SessionContext sessionContext) {
         StanzaBuilder stanzaBuilder =
             StanzaBuilder.createIQStanza(null, null, IQStanzaType.ERROR, stanza.getID()).
-            startInnerElement("error").
+            startInnerElement("error", NamespaceURIs.JABBER_CLIENT).
                     addAttribute("type", "cancel").
                     startInnerElement("not-allowed", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS).
             endInnerElement();

Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0049_privatedata/PrivateDataIQHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0049_privatedata/PrivateDataIQHandler.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0049_privatedata/PrivateDataIQHandler.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0049_privatedata/PrivateDataIQHandler.java Sun May 16 20:39:29 2010
@@ -131,7 +131,7 @@ public class PrivateDataIQHandler extend
 
         StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID());
         if (privateDataXML == null) {
-            stanzaBuilder.startInnerElement(x.getName());
+            stanzaBuilder.startInnerElement(x.getName(), x.getNamespaceURI());
             for (Attribute a : x.getAttributes()) {
                 stanzaBuilder.addAttribute(a);
             }

Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0054_vcardtemp/VcardTempIQHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0054_vcardtemp/VcardTempIQHandler.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0054_vcardtemp/VcardTempIQHandler.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0054_vcardtemp/VcardTempIQHandler.java Sun May 16 20:39:29 2010
@@ -117,7 +117,7 @@ public class VcardTempIQHandler extends 
                 // keep it like it is
             } else {
                 stanzaBuilder.
-                    startInnerElement("error").addAttribute("type", "cancel").
+                    startInnerElement("error", NamespaceURIs.JABBER_CLIENT).addAttribute("type", "cancel").
                         startInnerElement("item-not-found", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS).
                         endInnerElement().
                     endInnerElement();

Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/server/response/ServerErrorResponses.java Sun May 16 20:39:29 2010
@@ -114,7 +114,7 @@ public class ServerErrorResponses
         }
 
         // error element
-        responseBuilder.startInnerElement("error")
+        responseBuilder.startInnerElement("error", NamespaceURIs.JABBER_CLIENT)
                          .addAttribute("type", type.value());
 
         // insert defined error condition relating to the stanza error type
@@ -141,7 +141,7 @@ public class ServerErrorResponses
     public Stanza getSASLFailure(SASLFailureType failureType) {
         StanzaBuilder stanzaBuilder = new StanzaBuilder("failure", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_SASL);
         if (failureType != null) {
-            stanzaBuilder.startInnerElement(failureType.toString()).endInnerElement();
+            stanzaBuilder.startInnerElement(failureType.toString(), NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_SASL).endInnerElement();
         }
         return stanzaBuilder.build();
     }

Modified: mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java (original)
+++ mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/stanza/StanzaBuilder.java Sun May 16 20:39:29 2010
@@ -55,7 +55,7 @@ public class StanzaBuilder extends Abstr
         stanzaBuilder.addAttribute("from", from.getFullQualifiedName());
         stanzaBuilder.addAttribute("to", to.getFullQualifiedName());
         if(lang != null) stanzaBuilder.addAttribute(NamespaceURIs.XML, "lang", lang);
-        if(body != null) stanzaBuilder.startInnerElement("body").addText(body).endInnerElement();
+        if(body != null) stanzaBuilder.startInnerElement("body", NamespaceURIs.JABBER_CLIENT).addText(body).endInnerElement();
         return stanzaBuilder;
     }
 
@@ -82,10 +82,10 @@ public class StanzaBuilder extends Abstr
         if (lang != null) stanzaBuilder.addAttribute(NamespaceURIs.XML, "lang", lang);
         if (type != null) stanzaBuilder.addAttribute("type", type.value());
         if (show != null) {
-            stanzaBuilder.startInnerElement("show").addText(show).endInnerElement();
+            stanzaBuilder.startInnerElement("show", NamespaceURIs.JABBER_CLIENT).addText(show).endInnerElement();
         }
         if (status != null) {
-            stanzaBuilder.startInnerElement("status").addText(status).endInnerElement();
+            stanzaBuilder.startInnerElement("status", NamespaceURIs.JABBER_CLIENT).addText(status).endInnerElement();
         }
         return stanzaBuilder;
     }

Modified: mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandlerTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandlerTestCase.java (original)
+++ mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/IQHandlerTestCase.java Sun May 16 20:39:29 2010
@@ -50,7 +50,7 @@ public class IQHandlerTestCase extends T
         stanzaBuilder.addAttribute("type", "get");
         // missing stanzaBuilder.addAttribute("to", "test@example.com");
         stanzaBuilder.addAttribute("id", "anyway");
-        stanzaBuilder.startInnerElement("inner").endInnerElement();
+        stanzaBuilder.startInnerElement("inner", NamespaceURIs.JABBER_SERVER).endInnerElement();
 
         TestSessionContext sessionContext = this.sessionContext;
         sessionContext.setServerToServer();
@@ -126,8 +126,8 @@ public class IQHandlerTestCase extends T
         StanzaBuilder stanzaTwoSubs = new StanzaBuilder("iq", NamespaceURIs.JABBER_CLIENT);
         stanzaTwoSubs.addAttribute("id", "1");
         stanzaTwoSubs.addAttribute("type", type);
-        stanzaTwoSubs.startInnerElement("firstSub").endInnerElement();
-        stanzaTwoSubs.startInnerElement("secondSub").endInnerElement();
+        stanzaTwoSubs.startInnerElement("firstSub", NamespaceURIs.JABBER_CLIENT).endInnerElement();
+        stanzaTwoSubs.startInnerElement("secondSub", NamespaceURIs.JABBER_CLIENT).endInnerElement();
         assertIQError(stanzaTwoSubs.build());
     }
 
@@ -142,7 +142,7 @@ public class IQHandlerTestCase extends T
         StanzaBuilder stanzaBuilder = new StanzaBuilder("iq", NamespaceURIs.JABBER_CLIENT);
         stanzaBuilder.addAttribute("id", "1");
         stanzaBuilder.addAttribute("type", "get");
-        stanzaBuilder.startInnerElement("getRequest").endInnerElement();
+        stanzaBuilder.startInnerElement("getRequest", NamespaceURIs.JABBER_CLIENT).endInnerElement();
 
         TestIQHandler iqHandler = new TestIQHandler();
         ResponseStanzaContainer responseStanzaContainer = iqHandler.execute(stanzaBuilder.build(), sessionContext.getServerRuntimeContext(), true, sessionContext, null);

Modified: mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java (original)
+++ mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java Sun May 16 20:39:29 2010
@@ -75,7 +75,7 @@ public class MessageHandlerRelayTestCase
         StanzaBuilder stanzaBuilder = new StanzaBuilder("message", NamespaceURIs.JABBER_SERVER);
         // receiver@vysper.org, NOT receiver@vysper.org/resourceID 
         stanzaBuilder.addAttribute("to", receiverUser.getEntity().getBareJID().getFullQualifiedName());
-        stanzaBuilder.startInnerElement("timestamp").addAttribute("value", timestamp).endInnerElement();
+        stanzaBuilder.startInnerElement("timestamp", NamespaceURIs.JABBER_SERVER).addAttribute("value", timestamp).endInnerElement();
 
         senderSessionContext.setClientToServer();
         

Modified: mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java (original)
+++ mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java Sun May 16 20:39:29 2010
@@ -20,6 +20,7 @@
 package org.apache.vysper.xmpp.modules.core.base.handler;
 
 import org.apache.vysper.xmpp.modules.core.im.handler.PresenceHandlerBaseTestCase;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.stanza.*;
 
@@ -30,7 +31,7 @@ public class RelayingIQHandlerTestCase e
     protected RelayingIQHandler relayingIQHandler = new RelayingIQHandler();
 
     public void testIQClientToClient_Outbound_NotSubscribed() {
-        Stanza iqStanza = StanzaBuilder.createIQStanza(initiatingUser.getEntityFQ(), unrelatedUser.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory").build();
+        Stanza iqStanza = StanzaBuilder.createIQStanza(initiatingUser.getEntityFQ(), unrelatedUser.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory", NamespaceURIs.JABBER_CLIENT).build();
 
         ResponseStanzaContainer stanzaContainer = relayingIQHandler.execute(iqStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null /*don't we have as sessionStateHolder?*/);
         XMPPCoreStanza response = XMPPCoreStanza.getWrapper(stanzaContainer.getResponseStanza());
@@ -39,17 +40,17 @@ public class RelayingIQHandlerTestCase e
     }
 
     public void testIQClientToClient_Outbound() {
-        Stanza iqStanza = StanzaBuilder.createIQStanza(initiatingUser.getEntityFQ(), subscribed_FROM.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory").build();
+        Stanza iqStanza = StanzaBuilder.createIQStanza(initiatingUser.getEntityFQ(), subscribed_FROM.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory", NamespaceURIs.JABBER_CLIENT).build();
 
         ResponseStanzaContainer stanzaContainer = relayingIQHandler.execute(iqStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null /*don't we have as sessionStateHolder?*/);
         assertNull(stanzaContainer);
         Stanza deliveredStanza = subscribed_FROM.getNextStanza();
-        assertTrue(deliveredStanza.getVerifier().onlySubelementEquals("mandatory", null));
+        assertTrue(deliveredStanza.getVerifier().onlySubelementEquals("mandatory", NamespaceURIs.JABBER_CLIENT));
         assertEquals(subscribed_FROM.getEntityFQ(), deliveredStanza.getTo());
     }
 
     public void testIQClientToClient_Inbound_NoTO() {
-        Stanza iqStanza = StanzaBuilder.createIQStanza(subscribed_FROM.getEntityFQ(), initiatingUser.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory").build();
+        Stanza iqStanza = StanzaBuilder.createIQStanza(subscribed_FROM.getEntityFQ(), initiatingUser.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory", NamespaceURIs.JABBER_CLIENT).build();
 
         ResponseStanzaContainer stanzaContainer = relayingIQHandler.execute(iqStanza, sessionContext.getServerRuntimeContext(), false, sessionContext, null /*don't we have as sessionStateHolder?*/);
         XMPPCoreStanza response = XMPPCoreStanza.getWrapper(stanzaContainer.getResponseStanza());
@@ -58,12 +59,12 @@ public class RelayingIQHandlerTestCase e
     }
 
     public void testIQClientToClient_Inbound() {
-        Stanza iqStanza = StanzaBuilder.createIQStanza(subscribed_TO.getEntityFQ(), initiatingUser.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory").build();
+        Stanza iqStanza = StanzaBuilder.createIQStanza(subscribed_TO.getEntityFQ(), initiatingUser.getEntityFQ(), IQStanzaType.GET, "test").startInnerElement("mandatory", NamespaceURIs.JABBER_CLIENT).build();
 
         ResponseStanzaContainer stanzaContainer = relayingIQHandler.execute(iqStanza, sessionContext.getServerRuntimeContext(), false, sessionContext, null /*don't we have as sessionStateHolder?*/);
         assertNull(stanzaContainer);
         Stanza deliveredStanza = sessionContext.getNextRecordedResponse();
-        assertTrue(deliveredStanza.getVerifier().onlySubelementEquals("mandatory", null));
+        assertTrue(deliveredStanza.getVerifier().onlySubelementEquals("mandatory", NamespaceURIs.JABBER_CLIENT));
         assertEquals(initiatingUser.getEntityFQ(), deliveredStanza.getTo());
     }
 }

Modified: mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/async/AsyncIQGetHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/async/AsyncIQGetHandlerTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/async/AsyncIQGetHandlerTestCase.java (original)
+++ mina/vysper/trunk/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/async/AsyncIQGetHandlerTestCase.java Sun May 16 20:39:29 2010
@@ -21,6 +21,7 @@ package org.apache.vysper.xmpp.modules.c
 
 import junit.framework.TestCase;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -120,7 +121,7 @@ public class AsyncIQGetHandlerTestCase e
                 }
                 try {
                     Stanza finalStanza = StanzaBuilder.createIQStanza(requestStanza.getTo(), requestStanza.getFrom(), IQStanzaType.RESULT, requestStanza.getID()).
-                            startInnerElement("success").endInnerElement().build();
+                            startInnerElement("success", NamespaceURIs.JABBER_CLIENT).endInnerElement().build();
                     response = XMPPCoreStanza.getWrapper(finalStanza);
                 } catch (Throwable e) {
                     e.printStackTrace();
@@ -141,7 +142,7 @@ public class AsyncIQGetHandlerTestCase e
         assertNull("future is create on execute", asyncIQGetHandler.getWaitingRunnableFuture());
 
         StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(new EntityImpl("test", "vysper.org", null), null, IQStanzaType.GET, "id1");
-        stanzaBuilder.startInnerElement("query").endInnerElement();
+        stanzaBuilder.startInnerElement("query", NamespaceURIs.JABBER_CLIENT).endInnerElement();
         Stanza iqStanza = stanzaBuilder.build();
 
         ResponseStanzaContainer container = asyncIQGetHandler.execute(iqStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, sessionStateHolder);

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCModule.java Sun May 16 20:39:29 2010
@@ -28,6 +28,7 @@ import org.apache.vysper.xmpp.addressing
 import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
 import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy;
 import org.apache.vysper.xmpp.modules.DefaultDiscoAwareModule;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler.MUCIqAdminHandler;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler.MUCMessageHandler;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler.MUCPresenceHandler;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
@@ -100,6 +101,7 @@ public class MUCModule 
         ComponentStanzaProcessor processor = new ComponentStanzaProcessor(serverRuntimeContext);
         processor.addHandler(new MUCPresenceHandler(conference));
         processor.addHandler(new MUCMessageHandler(conference, fullDomain));
+        processor.addHandler(new MUCIqAdminHandler(conference));
         stanzaProcessor = processor;
 
         RoomStorageProvider roomStorageProvider = (RoomStorageProvider) serverRuntimeContext.getStorageProvider(RoomStorageProvider.class);

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCHandlerHelper.java Sun May 16 20:39:29 2010
@@ -82,7 +82,7 @@ public class MUCHandlerHelper {
             }
         }
         
-        builder.startInnerElement("error").addAttribute("type", type);
+        builder.startInnerElement("error",NamespaceURIs.JABBER_CLIENT).addAttribute("type", type);
         builder.startInnerElement(errorName, NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS).endInnerElement();
         builder.endInnerElement();
         

Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java?rev=944906&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java Sun May 16 20:39:29 2010
@@ -0,0 +1,156 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import java.util.List;
+
+import org.apache.vysper.xml.fragment.XMLSemanticError;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
+import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy;
+import org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.IqAdminItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.server.ServerRuntimeContext;
+import org.apache.vysper.xmpp.server.SessionContext;
+import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
+import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Implementation of <a href="http://xmpp.org/extensions/xep-0045.html">XEP-0045 Multi-user chat</a>.
+ * 
+ *  
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class MUCIqAdminHandler extends DefaultIQHandler {
+
+    final Logger logger = LoggerFactory.getLogger(MUCIqAdminHandler.class);
+
+    private Conference conference;
+    
+    public MUCIqAdminHandler(Conference conference) {
+		this.conference = conference;
+	}
+
+	@Override
+    protected boolean verifyNamespace(Stanza stanza) {
+        return verifyInnerNamespace(stanza, NamespaceURIs.XEP0045_MUC_ADMIN);
+    }
+	
+	private Entity roomAndNick(Room room, Occupant occupant) {
+		return new EntityImpl(room.getJID(), occupant.getName());
+	}
+	
+	@Override
+	protected Stanza handleSet(IQStanza stanza,
+			ServerRuntimeContext serverRuntimeContext,
+			SessionContext sessionContext) {
+
+		Room room = conference.findRoom(stanza.getTo());
+		
+		Occupant moderator = room.findOccupantByJID(stanza.getFrom());
+		
+		// TODO add check if moderator or admin
+		
+		try {
+			List<IqAdminItem> items = IqAdminItem.extractItems(stanza);
+			
+			for(IqAdminItem item : items) {
+				
+				
+				if(item.getRole().equals(Role.None)) {
+					// kicking a user
+					
+					// find kicked users jid
+					Occupant kicked = null;
+					if(item.getNick() != null) {
+						kicked = room.findOccupantByNick(item.getNick());
+					} else {
+						// TODO fix
+					}
+					
+					// remove user from room
+					kicked.setRole(Role.None);
+					room.removeOccupant(kicked.getJid());
+					Entity kickedInRoom = roomAndNick(room, kicked);
+					
+					// notify user he got kicked
+					StanzaBuilder presenceBuilder = StanzaBuilder.createPresenceStanza(kickedInRoom, kicked.getJid(), null, 
+							PresenceStanzaType.UNAVAILABLE, null, null);
+					presenceBuilder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
+							new MucUserPresenceItem(Affiliation.None, Role.None),
+							// TODO handle <actor>
+							// TODO handle <reason>
+							new Status(StatusCode.BEEN_KICKED)));
+
+					relayStanza(kicked.getJid(), presenceBuilder.build(), serverRuntimeContext);
+					
+					// notify remaining users that user got kicked
+					for(Occupant remaining : room.getOccupants()) {
+						StanzaBuilder presenceToRemainingBuilder = StanzaBuilder.createPresenceStanza(kickedInRoom, remaining.getJid(), null, 
+								PresenceStanzaType.UNAVAILABLE, null, null);
+						presenceToRemainingBuilder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
+								new MucUserPresenceItem(Affiliation.None, Role.None),
+								new Status(StatusCode.BEEN_KICKED)));
+						
+						relayStanza(remaining.getJid(), presenceToRemainingBuilder.build(), serverRuntimeContext);
+					}
+				}
+			}
+			
+	        return StanzaBuilder.createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID()).build();
+			
+		} catch (XMLSemanticError e) {
+            return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.BAD_REQUEST, stanza,
+                    StanzaErrorType.MODIFY,
+                    "iq stanza of type set requires exactly one query element",
+                    getErrorLanguage(serverRuntimeContext, sessionContext), null);
+		}
+		
+		
+	}
+    
+    protected void relayStanza(Entity receiver, Stanza stanza, ServerRuntimeContext serverRuntimeContext) {
+        try {
+                serverRuntimeContext.getStanzaRelay().relay(receiver, stanza, new IgnoreFailureStrategy());
+        } catch (DeliveryException e) {
+                logger.warn("presence relaying failed ", e);
+        }
+    }
+
+}

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCMessageHandler.java Sun May 16 20:39:29 2010
@@ -34,7 +34,6 @@ import org.apache.vysper.xmpp.delivery.f
 import org.apache.vysper.xmpp.modules.core.base.handler.DefaultMessageHandler;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java Sun May 16 20:39:29 2010
@@ -39,7 +39,7 @@ import org.apache.vysper.xmpp.modules.ex
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.History;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Item;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
@@ -273,7 +273,7 @@ public class MUCPresenceHandler extends 
         StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndOccupantNick, newOccupant.getJid(), null, null, null, null);
         
         builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
-                new Item(null, null, existingOccupant.getAffiliation(), existingOccupant.getRole())));
+                new MucUserPresenceItem(null, null, existingOccupant.getAffiliation(), existingOccupant.getRole())));
 
         
         logger.debug("Room presence from {} sent to {}", newOccupant, roomAndOccupantNick);
@@ -291,7 +291,7 @@ public class MUCPresenceHandler extends 
         // room is non-anonymous or semi-anonmoys and the occupant a moderator, send full user JID
         boolean includeJid = room.getRoomTypes().contains(RoomType.NonAnonymous) ||
             (room.getRoomTypes().contains(RoomType.SemiAnonymous) && existingOccupant.getRole() == Role.Moderator); 
-        inner.add(new Item(newOccupant, includeJid, false));
+        inner.add(new MucUserPresenceItem(newOccupant, includeJid, false));
         
         if(existingOccupant.getJid().equals(newOccupant.getJid())) {
             
@@ -318,7 +318,7 @@ public class MUCPresenceHandler extends 
         List<XMLElement> inner = new ArrayList<XMLElement>();
         
         boolean includeJid = includeJidInItem(room, receiver); 
-        inner.add(new Item(changer, includeJid, true));
+        inner.add(new MucUserPresenceItem(changer, includeJid, true));
         inner.add(new Status(StatusCode.NEW_NICK));
         
         if(receiver.getJid().equals(changer.getJid())) {
@@ -344,7 +344,7 @@ public class MUCPresenceHandler extends 
 //            new Status(StatusCode.OWN_PRESENCE).insertElement(builder);
 //        }
 
-        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, new Item(changer, includeJid, true)));
+        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, new MucUserPresenceItem(changer, includeJid, true)));
 
         logger.debug("Room presence from {} sent to {}", roomAndNick, receiver);
         relayStanza(receiver.getJid(), builder.build(), serverRuntimeContext);
@@ -363,7 +363,7 @@ public class MUCPresenceHandler extends 
         
         List<XMLElement> inner = new ArrayList<XMLElement>();
         boolean includeJid = includeJidInItem(room, receiver);  
-        inner.add(new Item(changer, includeJid, false));
+        inner.add(new MucUserPresenceItem(changer, includeJid, false));
         
         if(receiver.getJid().equals(changer.getJid())) {
             // send status to indicate that this is the users own presence
@@ -383,7 +383,7 @@ public class MUCPresenceHandler extends 
                 PresenceStanzaType.UNAVAILABLE, null, null);
 
         List<XMLElement> inner = new ArrayList<XMLElement>();
-        inner.add(new Item(null, null, existingOccupant.getAffiliation(), Role.None));
+        inner.add(new MucUserPresenceItem(null, null, existingOccupant.getAffiliation(), Role.None));
         
         // is this stanza to be sent to the exiting user himself?
         boolean ownStanza = existingOccupant.getJid().equals(exitingOccupant.getJid()); 

Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java?rev=944906&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/IqAdminItem.java Sun May 16 20:39:29 2010
@@ -0,0 +1,86 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.vysper.xml.fragment.Attribute;
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xml.fragment.XMLSemanticError;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class IqAdminItem extends XMLElement {
+
+	public static List<IqAdminItem> extractItems(IQStanza stanza) throws XMLSemanticError {
+		XMLElement query = stanza.getSingleInnerElementsNamed("query", NamespaceURIs.XEP0045_MUC_ADMIN);
+		List<XMLElement> itemElms = query.getInnerElementsNamed("item", NamespaceURIs.XEP0045_MUC_ADMIN);
+		
+		List<IqAdminItem> items = new ArrayList<IqAdminItem>();
+		for(XMLElement itemElm : itemElms) {
+			items.add(getWrapper(itemElm));
+		}
+		return items;
+	}
+
+	public static IqAdminItem getWrapper(XMLElement itemElm) {
+		String nick = itemElm.getAttributeValue("nick");
+		String roleStr = itemElm.getAttributeValue("role");
+		Role role = null;
+		if(roleStr != null) {
+			role = Role.fromString(roleStr);
+		}
+		
+		return new IqAdminItem(nick, role);
+	}
+	
+    public IqAdminItem(String nick, Role role) {
+        super(NamespaceURIs.XEP0045_MUC_ADMIN, "item", null, 
+                createAttributes(nick, role), null);
+    }
+
+    
+    public String getNick() {
+        return getAttributeValue("nick");
+    }
+    
+    public Role getRole() {
+        String value = getAttributeValue("role");
+        if(value != null) {
+            return Role.fromString(value);
+        } else {
+            return null;
+        }
+    }
+    
+    private static List<Attribute> createAttributes(String nick, Role role) {
+        List<Attribute> attributes = new ArrayList<Attribute>();
+        if(nick != null) attributes.add(new Attribute("nick", nick));
+        if(role != null) attributes.add(new Attribute("role", role.toString()));
+        return attributes;
+    }
+
+}

Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java?rev=944906&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/MucUserPresenceItem.java Sun May 16 20:39:29 2010
@@ -0,0 +1,106 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.vysper.xml.fragment.Attribute;
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.addressing.EntityFormatException;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+
+/**
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class MucUserPresenceItem extends XMLElement {
+
+    public MucUserPresenceItem(Occupant occupant, boolean includeJid, boolean includeNick) {
+        super(NamespaceURIs.XEP0045_MUC_USER, "item", null, 
+                createAttributes(occupant, includeJid, includeNick), null);
+    }
+
+    public MucUserPresenceItem(Affiliation affiliation, Role role) {
+        super(NamespaceURIs.XEP0045_MUC_USER, "item", null, 
+                createAttributes(null, null, affiliation, role), null);
+    }
+
+    
+    public MucUserPresenceItem(Entity jid, String nick, Affiliation affiliation, Role role) {
+        super(NamespaceURIs.XEP0045_MUC_USER, "item", null, 
+                createAttributes(jid, nick, affiliation, role), null);
+    }
+
+    private static List<Attribute> createAttributes(Occupant occupant, boolean includeJid, boolean includeNick) {
+        Entity jid = includeJid ? occupant.getJid() : null;
+        String nick = includeNick ? occupant.getName() : null;
+        
+        return createAttributes(jid, nick, occupant.getAffiliation(), occupant.getRole());
+    }
+
+    public Entity getJid() throws EntityFormatException {
+        String value = getAttributeValue("jid");
+        if(value != null) {
+            return EntityImpl.parse(value);
+        } else {
+            return null;
+        }
+    }
+    
+    public String getNick() {
+        return getAttributeValue("nick");
+    }
+    
+    public Affiliation getAffiliation() {
+        String value = getAttributeValue("affiliation");
+        if(value != null) {
+            return Affiliation.fromString(value);
+        } else {
+            return null;
+        }
+        
+    }
+
+    public Role getRole() {
+        String value = getAttributeValue("role");
+        if(value != null) {
+            return Role.fromString(value);
+        } else {
+            return null;
+        }
+    }
+
+    
+    private static List<Attribute> createAttributes(Entity jid, String nick, Affiliation affiliation, Role role) {
+        List<Attribute> attributes = new ArrayList<Attribute>();
+        if(jid != null) attributes.add(new Attribute("jid", jid.getFullQualifiedName()));
+        if(nick != null) attributes.add(new Attribute("nick", nick));
+        if(affiliation != null) attributes.add(new Attribute("affiliation", affiliation.toString()));
+        if(role != null) attributes.add(new Attribute("role", role.toString()));
+        return attributes;
+    }
+
+}

Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/UserX.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/UserX.java?rev=944906&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/UserX.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/UserX.java Sun May 16 20:39:29 2010
@@ -0,0 +1,99 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xml.fragment.XMLSemanticError;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+
+/**
+ * <x xmlns='http://jabber.org/protocol/muc#user'>
+ *   <item affiliation='none' role='none'>
+ *     <actor jid='fluellen@shakespeare.lit'/>
+ *     <reason>Avaunt, you cullion!</reason>
+ *   </item>
+ *   <status code='307'/>
+ * </x>
+ *
+ */
+public class UserX extends XMLElement {
+
+    public UserX(XMLElement...elements) {
+        this(Arrays.asList(elements));
+    }
+
+    public UserX(List<XMLElement> elements) {
+        super(NamespaceURIs.XEP0045_MUC_USER, "x", null, null, elements.toArray(new XMLElement[]{}));
+    }
+    
+    public Invite getInvite() {
+        try {
+            XMLElement inviteElm = getSingleInnerElementsNamed("invite");
+            if(inviteElm != null) {
+                return new Invite(inviteElm);
+            } else {
+                return null;
+            }
+        } catch (XMLSemanticError e) {
+            throw new IllegalArgumentException("Invalid stanza", e);
+        }
+    }
+
+    public Decline getDecline() {
+        try {
+            XMLElement inviteElm = getSingleInnerElementsNamed("decline");
+            if(inviteElm != null) {
+                return new Decline(inviteElm);
+            } else {
+                return null;
+            }
+        } catch (XMLSemanticError e) {
+            throw new IllegalArgumentException("Invalid stanza", e);
+        }
+    }
+
+    
+    public Password getPassword() {
+        try {
+            XMLElement passwordElm = getSingleInnerElementsNamed("password");
+            if(passwordElm != null && passwordElm.getInnerText() != null) {
+                return new Password(passwordElm.getInnerText().getText());
+            } else {
+                return null;
+            }
+        } catch (XMLSemanticError e) {
+            throw new IllegalArgumentException("Invalid stanza", e);
+        }
+    }
+    
+    public String getPasswordValue() {
+        Password password = getPassword();
+        if(password != null && password.getInnerText() != null) {
+            return password.getInnerText().getText();
+        } else {
+            return null;
+        }
+    }
+
+    
+}

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java Sun May 16 20:39:29 2010
@@ -19,20 +19,34 @@
  */
 package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import junit.framework.TestCase;
 
 import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.delivery.StanzaReceiverQueue;
 import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.TestSessionContext;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.protocol.ProtocolException;
+import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.stanza.MessageStanza;
+import org.apache.vysper.xmpp.stanza.PresenceStanza;
 import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 
 /**
  */
@@ -106,4 +120,132 @@ public abstract class AbstractMUCHandler
         assertEquals(errorName, jidMalformedElement.getName());
         assertEquals(NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS, jidMalformedElement.getNamespaceURI());
     }
+    
+    protected void assertMessageStanza(Entity from, Entity to, String type,
+            String body, Stanza stanza) throws XMLSemanticError {
+        assertMessageStanza(from, to, type, body, null, null, stanza);
+    }
+    
+    protected void assertMessageStanza(Entity from, Entity to, String type,
+            String expectedBody, String expectedSubject, X expectedX, Stanza stanza) throws XMLSemanticError {
+        assertNotNull(stanza);
+        MessageStanza msgStanza = (MessageStanza) MessageStanza.getWrapper(stanza);
+        
+        assertEquals(from, stanza.getFrom());
+        assertEquals(to, stanza.getTo());
+        if (type != null) {
+            assertEquals(type, msgStanza.getType());
+        }
+
+        assertEquals(expectedBody, msgStanza.getBody(null));
+        assertEquals(expectedSubject, msgStanza.getSubject(null));
+
+        if(expectedX != null) {
+            X actualX = X.fromStanza(stanza);
+            assertEquals(expectedX, actualX);
+        }
+    }
+
+    protected void assertIqResultStanza(Entity from, Entity to, String id, 
+            Stanza stanza) throws XMLSemanticError {
+        assertNotNull(stanza);
+        IQStanza iqStanza = (IQStanza) IQStanza.getWrapper(stanza);
+        
+        assertEquals(from, iqStanza.getFrom());
+        assertEquals(to, iqStanza.getTo());
+        assertEquals(id, iqStanza.getID());
+        assertEquals("result", iqStanza.getType());
+    }
+    
+    protected void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedShow,
+            String expectedStatus,
+            MucUserPresenceItem expectedItem) throws XMLSemanticError, Exception {
+
+        PresenceStanza presenceStanza = (PresenceStanza) PresenceStanza.getWrapper(stanza);
+        assertNotNull("Stanza must not be null", stanza);
+        assertEquals(expectedFrom, stanza.getFrom());
+        assertEquals(expectedTo, stanza.getTo());
+        assertEquals(expectedShow, presenceStanza.getShow());
+        assertEquals(expectedStatus, presenceStanza.getStatus(null));
+        
+        XMLElement xElm = stanza.getSingleInnerElementsNamed("x");
+        assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElm.getNamespaceURI());
+        
+        List<XMLElement> innerElements = xElm.getInnerElements();
+            
+        assertEquals(1, innerElements.size());
+        XMLElement itemElm = innerElements.get(0);
+        assertEquals("item", itemElm.getName());
+        assertEquals(expectedItem.getJid().getFullQualifiedName(), itemElm.getAttributeValue("jid"));
+        assertEquals(expectedItem.getNick(), itemElm.getAttributeValue("nick"));
+        assertEquals(expectedItem.getAffiliation().toString(), itemElm.getAttributeValue("affiliation"));
+        assertEquals(expectedItem.getRole().toString(), itemElm.getAttributeValue("role"));
+        
+    }
+
+    protected void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedType,
+            MucUserPresenceItem expectedItem, StatusCode expectedStatus) throws Exception {
+    	List<MucUserPresenceItem> expectedItems = Arrays.asList(expectedItem);
+    	List<StatusCode> expectedStatuses = Arrays.asList(expectedStatus);
+    	assertPresenceStanza(stanza, expectedFrom, expectedTo, expectedType, expectedItems, expectedStatuses);
+    }
+    
+    protected void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedType,
+            List<MucUserPresenceItem> expectedItems, List<StatusCode> expectedStatuses) throws Exception {
+
+        assertNotNull(stanza);
+        assertEquals(expectedFrom, stanza.getFrom());
+        assertEquals(expectedTo, stanza.getTo());
+        assertEquals(expectedType, stanza.getAttributeValue("type"));
+        
+        XMLElement xElm = stanza.getFirstInnerElement();
+        assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElm.getNamespaceURI());
+        
+        Iterator<XMLElement> innerElements = xElm.getInnerElements().iterator();
+        for(MucUserPresenceItem expectedItem : expectedItems) {
+            XMLElement itemElm = innerElements.next();
+            
+            assertEquals("item", itemElm.getName());
+            if(expectedItem.getJid() != null) {
+            	assertEquals(expectedItem.getJid().getFullQualifiedName(), itemElm.getAttributeValue("jid"));
+            } else {
+            	assertNull(itemElm.getAttributeValue("jid"));
+            }
+            assertEquals(expectedItem.getNick(), itemElm.getAttributeValue("nick"));
+            assertEquals(expectedItem.getAffiliation().toString(), itemElm.getAttributeValue("affiliation"));
+            assertEquals(expectedItem.getRole().toString(), itemElm.getAttributeValue("role"));
+        }
+        
+        if(expectedStatuses != null) {
+            for(StatusCode status : expectedStatuses) {
+                XMLElement statusElm = innerElements.next();
+    
+                assertEquals("status", statusElm.getName());
+                assertEquals(status.code(), Integer.parseInt(statusElm.getAttributeValue("code")));
+    
+            }
+        }
+    }
+    
+    protected Stanza sendIq(Entity from, Entity to, IQStanzaType type, String id, String namespaceUri, 
+    		XMLElement item) throws ProtocolException {
+    	StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(from, to, type, id);
+
+    	stanzaBuilder.startInnerElement("query", namespaceUri);
+    	stanzaBuilder.addPreparedElement(item);
+    	stanzaBuilder.endInnerElement();
+    	
+        Stanza iqStanza = stanzaBuilder.build();
+        ResponseStanzaContainer container = handler.execute(iqStanza,
+                sessionContext.getServerRuntimeContext(), true, sessionContext,
+                null);
+        if (container != null) {
+            return container.getResponseStanza();
+        } else {
+            return null;
+        }
+    }
+
+
+
 }

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java Sun May 16 20:39:29 2010
@@ -27,9 +27,12 @@ import org.apache.vysper.xml.fragment.XM
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
 import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.MessageStanza;
 import org.apache.vysper.xmpp.stanza.MessageStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -51,7 +54,7 @@ public abstract class AbstractMUCMessage
         StanzaBuilder stanzaBuilder = StanzaBuilder.createMessageStanza(from,
                 to, type, null, body);
         if(subject != null) {
-            stanzaBuilder.startInnerElement("subject").addText(subject).endInnerElement();
+            stanzaBuilder.startInnerElement("subject", NamespaceURIs.JABBER_CLIENT).addText(subject).endInnerElement();
         }
         if(x != null) {
             stanzaBuilder.addPreparedElement(x);
@@ -68,6 +71,8 @@ public abstract class AbstractMUCMessage
         }
     }
 
+
+    
     protected void assertMessageErrorStanza(Stanza response, Entity from,
             Entity to, String type, String errorName,
             XMLElement... expectedInnerElements) {
@@ -92,31 +97,9 @@ public abstract class AbstractMUCMessage
         assertNull(occupant2Queue.getNext());
     }
 
-    protected void assertMessageStanza(Entity from, Entity to, String type,
-            String body, Stanza stanza) throws XMLSemanticError {
-        assertMessageStanza(from, to, type, body, null, null, stanza);
-    }
-    
-    protected void assertMessageStanza(Entity from, Entity to, String type,
-            String expectedBody, String expectedSubject, X expectedX, Stanza stanza) throws XMLSemanticError {
-        assertNotNull(stanza);
-        MessageStanza msgStanza = (MessageStanza) MessageStanza.getWrapper(stanza);
-        
-        assertEquals(from, stanza.getFrom());
-        assertEquals(to, stanza.getTo());
-        if (type != null) {
-            assertEquals(type, stanza.getAttributeValue("type"));
-        }
 
-        assertEquals(expectedBody, msgStanza.getBody(null));
-        assertEquals(expectedSubject, msgStanza.getSubject(null));
-
-        if(expectedX != null) {
-            X actualX = X.fromStanza(stanza);
-            assertEquals(expectedX, actualX);
-        }
-    }
 
+    
     @Override
     protected StanzaHandler createHandler() {
         return new MUCMessageHandler(conference, MODULE_JID);

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java Sun May 16 20:39:29 2010
@@ -30,7 +30,7 @@ import org.apache.vysper.xmpp.modules.ex
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Item;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
@@ -73,13 +73,13 @@ public class MUCPresenceHandlerChangeNic
         Occupant occupant = room.findOccupantByJID(OCCUPANT1_JID);
         assertEquals("new nick", occupant.getName());
 
-        Item unavailbleItem = new Item(OCCUPANT1_JID, "new nick", Affiliation.None, Role.Participant);
+        MucUserPresenceItem unavailbleItem = new MucUserPresenceItem(OCCUPANT1_JID, "new nick", Affiliation.None, Role.Participant);
         assertPresenceStanza(occupant1Queue.getNext(), new EntityImpl(ROOM1_JID, "nick"), OCCUPANT1_JID, "unavailable", 
                 Arrays.asList(unavailbleItem), Arrays.asList(StatusCode.NEW_NICK, StatusCode.OWN_PRESENCE));
         assertPresenceStanza(occupant2Queue.getNext(), new EntityImpl(ROOM1_JID, "nick"), OCCUPANT2_JID, "unavailable", 
                 Arrays.asList(unavailbleItem), Arrays.asList(StatusCode.NEW_NICK));
 
-        Item availbleItem = new Item(OCCUPANT1_JID, null, Affiliation.None, Role.Participant);
+        MucUserPresenceItem availbleItem = new MucUserPresenceItem(OCCUPANT1_JID, null, Affiliation.None, Role.Participant);
         assertPresenceStanza(occupant1Queue.getNext(), new EntityImpl(ROOM1_JID, "new nick"), OCCUPANT1_JID, null, 
                 Arrays.asList(availbleItem), Arrays.asList(StatusCode.OWN_PRESENCE));
         assertPresenceStanza(occupant2Queue.getNext(), new EntityImpl(ROOM1_JID, "new nick"), OCCUPANT2_JID, null, 
@@ -96,37 +96,5 @@ public class MUCPresenceHandlerChangeNic
         assertNotNull(error);
     }
 
-    private void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedType,
-            List<Item> expectedItems, List<StatusCode> expectedStatuses) throws Exception {
-
-        assertNotNull(stanza);
-        assertEquals(expectedFrom, stanza.getFrom());
-        assertEquals(expectedTo, stanza.getTo());
-        assertEquals(expectedType, stanza.getAttributeValue("type"));
-        
-        XMLElement xElm = stanza.getFirstInnerElement();
-        assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElm.getNamespaceURI());
-        
-        Iterator<XMLElement> innerElements = xElm.getInnerElements().iterator();
-        for(Item item : expectedItems) {
-            XMLElement itemElm = innerElements.next();
-            
-            assertEquals("item", itemElm.getName());
-            assertEquals(item.getJid().getFullQualifiedName(), itemElm.getAttributeValue("jid"));
-            assertEquals(item.getNick(), itemElm.getAttributeValue("nick"));
-            assertEquals(item.getAffiliation().toString(), itemElm.getAttributeValue("affiliation"));
-            assertEquals(item.getRole().toString(), itemElm.getAttributeValue("role"));
-        }
-        
-        if(expectedStatuses != null) {
-            for(StatusCode status : expectedStatuses) {
-                XMLElement statusElm = innerElements.next();
-    
-                assertEquals("status", statusElm.getName());
-                assertEquals(status.code(), Integer.parseInt(statusElm.getAttributeValue("code")));
-    
-            }
-        }
-    }
     
 }

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeStatusTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeStatusTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeStatusTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeStatusTestCase.java Sun May 16 20:39:29 2010
@@ -19,20 +19,14 @@
  */
 package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
 
-import java.util.List;
-
-import org.apache.vysper.xml.fragment.XMLElement;
-import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Item;
-import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
 import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
-import org.apache.vysper.xmpp.stanza.PresenceStanza;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 
@@ -65,7 +59,7 @@ public class MUCPresenceHandlerChangeSta
 
         assertNull(changeStatus(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, "xa", "Gone"));
         
-        Item item = new Item(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
+        MucUserPresenceItem item = new MucUserPresenceItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
         assertPresenceStanza(occupant1Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT1_JID, "xa", "Gone",
                 item);
         assertPresenceStanza(occupant2Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "xa", "Gone", 
@@ -80,7 +74,7 @@ public class MUCPresenceHandlerChangeSta
 
         assertNull(changeStatus(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, "xa", null));
         
-        Item item = new Item(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
+        MucUserPresenceItem item = new MucUserPresenceItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
         assertPresenceStanza(occupant1Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT1_JID, "xa", null,
                 item);
         assertPresenceStanza(occupant2Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT2_JID, "xa", null, 
@@ -95,37 +89,12 @@ public class MUCPresenceHandlerChangeSta
 
         assertNull(changeStatus(OCCUPANT1_JID, ROOM1_JID_WITH_NICK, null, "Gone"));
         
-        Item item = new Item(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
+        MucUserPresenceItem item = new MucUserPresenceItem(OCCUPANT1_JID, "nick", Affiliation.None, Role.Participant);
         assertPresenceStanza(occupant1Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT1_JID, null, "Gone",
                 item);
         assertPresenceStanza(occupant2Queue.getNext(), ROOM1_JID_WITH_NICK, OCCUPANT2_JID, null, "Gone", 
                 item);
     }
     
-    private void assertPresenceStanza(Stanza stanza, Entity expectedFrom, Entity expectedTo, String expectedShow,
-            String expectedStatus,
-            Item expectedItem) throws XMLSemanticError, Exception {
-
-        PresenceStanza presenceStanza = (PresenceStanza) PresenceStanza.getWrapper(stanza);
-        assertNotNull(stanza);
-        assertEquals(expectedFrom, stanza.getFrom());
-        assertEquals(expectedTo, stanza.getTo());
-        assertEquals(expectedShow, presenceStanza.getShow());
-        assertEquals(expectedStatus, presenceStanza.getStatus(null));
-        
-        XMLElement xElm = stanza.getSingleInnerElementsNamed("x");
-        assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElm.getNamespaceURI());
-        
-        List<XMLElement> innerElements = xElm.getInnerElements();
-            
-        assertEquals(1, innerElements.size());
-        XMLElement itemElm = innerElements.get(0);
-        assertEquals("item", itemElm.getName());
-        assertEquals(expectedItem.getJid().getFullQualifiedName(), itemElm.getAttributeValue("jid"));
-        assertEquals(expectedItem.getNick(), itemElm.getAttributeValue("nick"));
-        assertEquals(expectedItem.getAffiliation().toString(), itemElm.getAttributeValue("affiliation"));
-        assertEquals(expectedItem.getRole().toString(), itemElm.getAttributeValue("role"));
-        
-    }
     
 }

Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ModeratorKickOccupantTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ModeratorKickOccupantTestCase.java?rev=944906&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ModeratorKickOccupantTestCase.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ModeratorKickOccupantTestCase.java Sun May 16 20:39:29 2010
@@ -0,0 +1,70 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
+
+import static org.apache.vysper.xmpp.stanza.IQStanzaType.SET;
+
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.IqAdminItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.protocol.StanzaHandler;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+
+
+/**
+ */
+public class ModeratorKickOccupantTestCase extends AbstractMUCHandlerTestCase {
+
+    public void testChangeSubject() throws Exception {
+        Room room = conference.findOrCreateRoom(ROOM2_JID, "Room 2");
+        room.addOccupant(OCCUPANT1_JID, "nick").setRole(Role.Moderator);
+        room.addOccupant(OCCUPANT2_JID, "Nick 2");
+
+        assertNotNull(room.findOccupantByNick("Nick 2"));
+        
+        // send message to room
+        IQStanza result = (IQStanza) IQStanza.getWrapper(sendIq(OCCUPANT1_JID, ROOM2_JID, SET, "id1", NamespaceURIs.XEP0045_MUC_ADMIN, new IqAdminItem("Nick 2", Role.None)));
+        
+        assertIqResultStanza(ROOM2_JID, OCCUPANT1_JID, "id1", result);
+        
+        assertNull(room.findOccupantByNick("Nick 2"));
+
+        // verify that kicked user got presence
+        assertPresenceStanza(occupant2Queue.getNext(), new EntityImpl(ROOM2_JID, "Nick 2"), OCCUPANT2_JID, "unavailable", 
+        		new MucUserPresenceItem(null, null, Affiliation.None, Role.None),
+        		StatusCode.BEEN_KICKED);
+
+        // verify that remaining users got presence
+        assertPresenceStanza(occupant1Queue.getNext(), new EntityImpl(ROOM2_JID, "Nick 2"), OCCUPANT1_JID, "unavailable", 
+        		new MucUserPresenceItem(null, null, Affiliation.None, Role.None),
+        		StatusCode.BEEN_KICKED);
+    }
+
+	@Override
+	protected StanzaHandler createHandler() {
+		return new MUCIqAdminHandler(conference);
+	}
+
+}

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionHistoryTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionHistoryTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionHistoryTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionHistoryTestCase.java Sun May 16 20:39:29 2010
@@ -28,6 +28,7 @@ import junit.framework.TestCase;
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.History;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.stanza.MessageStanza;
 import org.apache.vysper.xmpp.stanza.MessageStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -73,7 +74,7 @@ public class DiscussionHistoryTestCase e
         // add a subject message
         history.append(
                 StanzaBuilder.createMessageStanza(FROM, ROOM_JID, MessageStanzaType.GROUPCHAT, null, null).
-                startInnerElement("subject").addText(SUBJECT).endInnerElement().build(),
+                startInnerElement("subject", NamespaceURIs.JABBER_CLIENT).addText(SUBJECT).endInnerElement().build(),
                 FROM_OCCUPANT);
     }
 

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessageTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessageTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessageTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/model/DiscussionMessageTestCase.java Sun May 16 20:39:29 2010
@@ -28,6 +28,7 @@ import org.apache.vysper.xml.fragment.XM
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.datetime.DateTimeProfile;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.stanza.MessageStanza;
 import org.apache.vysper.xmpp.stanza.MessageStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -52,7 +53,7 @@ public class DiscussionMessageTestCase e
     
     public void testSubjectMessage() {
         StanzaBuilder builder = StanzaBuilder.createMessageStanza(FROM, ROOM_JID, null, null);
-        builder.startInnerElement("subject").addText(SUBJECT).endInnerElement();
+        builder.startInnerElement("subject", NamespaceURIs.JABBER_CLIENT).addText(SUBJECT).endInnerElement();
         
         DiscussionMessage item = new DiscussionMessage(builder.build(), FROM_OCCUPANT, TIMESTAMP);
         assertEquals(NICK, item.getNick());

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/XTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/XTestCase.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/XTestCase.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/XTestCase.java Sun May 16 20:39:29 2010
@@ -37,7 +37,7 @@ public class XTestCase extends TestCase 
     public void testFromStanza() {
         StanzaBuilder builder = StanzaBuilder.createMessageStanza(JID, JID, null, "Foo");
         builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC);
-        builder.startInnerElement("password").addText("secret").endInnerElement();
+        builder.startInnerElement("password", NamespaceURIs.XEP0045_MUC).addText("secret").endInnerElement();
         builder.endInnerElement();
         
         X x = X.fromStanza(builder.build());

Modified: mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/SubscriberPayloadNotificationVisitor.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/SubscriberPayloadNotificationVisitor.java?rev=944906&r1=944905&r2=944906&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/SubscriberPayloadNotificationVisitor.java (original)
+++ mina/vysper/trunk/server/extensions/xep0060-pubsub/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/SubscriberPayloadNotificationVisitor.java Sun May 16 20:39:29 2010
@@ -93,8 +93,8 @@ public class SubscriberPayloadNotificati
         stanzaBuilder.addAttribute("from", serverJID.getFullQualifiedName());
         stanzaBuilder.addAttribute("to", to.getFullQualifiedName());
         stanzaBuilder.addAttribute(NamespaceURIs.XML, "lang", lang);
-        stanzaBuilder.startInnerElement("event");
-        stanzaBuilder.startInnerElement("items");
+        stanzaBuilder.startInnerElement("event", NamespaceURIs.XEP0060_PUBSUB_EVENT);
+        stanzaBuilder.startInnerElement("items", NamespaceURIs.XEP0060_PUBSUB_EVENT);
         stanzaBuilder.addAttribute("node", nodeName);
         stanzaBuilder.addPreparedElement(item);
         stanzaBuilder.endInnerElement(); // items