You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ra...@apache.org on 2019/09/01 09:58:36 UTC

[mina-vysper] branch master updated: Remove ResponseStanzaContainer

This is an automated email from the ASF dual-hosted git repository.

ralaoui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-vysper.git


The following commit(s) were added to refs/heads/master by this push:
     new e843cb2  Remove ResponseStanzaContainer
e843cb2 is described below

commit e843cb2eaed107883cc15740a81d743ad449fe5c
Author: RĂ©da Housni Alaoui <re...@gmail.com>
AuthorDate: Sun Sep 1 11:58:27 2019 +0200

    Remove ResponseStanzaContainer
---
 .../modules/core/sasl/handler/AbortHandler.java    |  4 +-
 .../handler/DiscoInfoIQHandler.java                |  4 +-
 .../xmpp/protocol/ResponseStanzaContainer.java     | 45 --------------
 .../xmpp/protocol/ResponseStanzaContainerImpl.java | 69 ----------------------
 .../vysper/xmpp/protocol/ResponseWriter.java       | 24 ++------
 .../worker/InboundStanzaProtocolWorker.java        |  3 -
 .../core/bind/handler/BindIQHandlerTestCase.java   |  8 +--
 .../PresenceAvailInitialOutHandlerTestCase.java    |  7 +--
 .../SoftwareVersionIQHandlerTestCase.java          |  3 +-
 .../EntityTimeIQHandlerTestCase.java               |  3 +-
 .../EntityTimeXEP0090IQHandlerTestCase.java        |  3 +-
 .../handler/DiscoInfoIQHandlerTestCase.java        | 35 +++++------
 .../handler/ExtendedDiscoInfoTestCase.java         | 12 ++--
 .../protocol/CallTestStanzaHandlerResponse.java    |  6 +-
 .../AbstractMUCOccupantDiscoTestCase.java          |  1 -
 .../PubSubRetrieveAffiliationsTestCase.java        |  1 -
 .../xep0065_socks/Socks5IqHandlerTest.java         |  7 +--
 17 files changed, 41 insertions(+), 194 deletions(-)

diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java
index 0997036..e047440 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java
@@ -20,7 +20,6 @@
 package org.apache.vysper.xmpp.modules.core.sasl.handler;
 
 import org.apache.vysper.xmpp.modules.core.sasl.AuthorizationRetriesCounter;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.server.response.ServerResponses;
@@ -40,8 +39,7 @@ public class AbortHandler extends AbstractSASLHandler {
     }
 
     @Override
-    public Stanza executeWorker(Stanza stanza, SessionContext sessionContext,
-                                SessionStateHolder sessionStateHolder) {
+    public Stanza executeWorker(Stanza stanza, SessionContext sessionContext, SessionStateHolder sessionStateHolder) {
 
         AuthorizationRetriesCounter counter = AuthorizationRetriesCounter.getFromSession(sessionContext);
         boolean moreTriesLeft = counter.countFailedTry(); // record that client aborted
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
index 639cf07..da6bfd5 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
@@ -131,7 +131,7 @@ public class DiscoInfoIQHandler extends DefaultIQHandler {
                 // IQ-error or an IQ-result"
                 if (to.isResourceSet()) {
                     relayOrWrite(stanza, sessionContext, stanzaBroker);
-                    return null;
+                    return Collections.emptyList();
                 } else {
                     elements = serviceCollector.processInfoRequest(new InfoRequest(from, to, node, stanza.getID()));
                 }
@@ -171,7 +171,7 @@ public class DiscoInfoIQHandler extends DefaultIQHandler {
 
         if (stanza.getTo().isNodeSet()) {
             relayOrWrite(stanza, sessionContext, stanzaBroker);
-            return null;
+            return Collections.emptyList();
         } else {
             return super.handleResult(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
         }
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainer.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainer.java
deleted file mode 100644
index 234ed39..0000000
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  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.protocol;
-
-import java.util.List;
-
-import org.apache.vysper.xmpp.stanza.Stanza;
-
-/**
- * used to carry a response stanza
- *
- * @author The Apache MINA Project (dev@mina.apache.org)
- */
-public interface ResponseStanzaContainer {
-
-    List<Stanza> getResponseStanzas();
-
-    /**
-     * @return If there is exactly one response, the unique response. If there is no
-     *         response it will return null. If there is more than one response, it
-     *         will throw an exception.
-     */
-    Stanza getUniqueResponseStanza();
-
-    boolean hasResponse();
-
-    boolean hasNoResponse();
-}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainerImpl.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainerImpl.java
deleted file mode 100644
index 1fdad72..0000000
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainerImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  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.protocol;
-
-import static java.util.Optional.ofNullable;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.apache.vysper.xmpp.stanza.Stanza;
-
-/**
- *
- * @author The Apache MINA Project (dev@mina.apache.org)
- */
-public class ResponseStanzaContainerImpl implements ResponseStanzaContainer {
-    private final List<Stanza> responses;
-
-    public ResponseStanzaContainerImpl(Stanza stanza) {
-        this(Collections.singletonList(stanza));
-    }
-
-    public ResponseStanzaContainerImpl(List<Stanza> stanzas) {
-        this.responses = ofNullable(stanzas).orElse(Collections.emptyList()).stream().filter(Objects::nonNull)
-                .collect(Collectors.toList());
-    }
-
-    @Override
-    public List<Stanza> getResponseStanzas() {
-        return new ArrayList<>(responses);
-    }
-
-    @Override
-    public Stanza getUniqueResponseStanza() {
-        if (responses.size() > 1) {
-            throw new IllegalStateException("Found more than one response");
-        }
-        return responses.stream().findFirst().orElse(null);
-    }
-
-    public boolean hasResponse() {
-        return !responses.isEmpty();
-    }
-
-    public boolean hasNoResponse() {
-        return !hasResponse();
-    }
-
-}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
index 408c80d..14ba14c 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
@@ -39,9 +39,8 @@ public class ResponseWriter {
 
     public static void writeUnsupportedStanzaError(SessionContext sessionContext) {
 
-        Stanza errorStanza = ServerErrorResponses.getStreamError(
-                StreamErrorCondition.UNSUPPORTED_STANZA_TYPE, sessionContext.getXMLLang(),
-                "service unavailable at this session state", null);
+        Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
+                sessionContext.getXMLLang(), "service unavailable at this session state", null);
         Stanza streamOpener = new ServerResponses().getStreamOpenerForError(false, sessionContext.getServerJID(),
                 XMPPVersion.VERSION_1_0, errorStanza);
 
@@ -49,19 +48,7 @@ public class ResponseWriter {
     }
 
     /**
-     * writes a response in this context from the given emmitter
-     * @param sessionContext
-     * @param responseStanzaContainer
-     */
-    public static void writeResponse(SessionContext sessionContext, ResponseStanzaContainer responseStanzaContainer) {
-        responseStanzaContainer.getResponseStanzas()
-                .forEach(stanza -> writeResponse(sessionContext, stanza));
-    }
-
-    /**
      * writes a response in this context
-     * @param sessionContext
-     * @param responseStanza
      */
     public static void writeResponse(SessionContext sessionContext, Stanza responseStanza) {
         sessionContext.getResponseWriter().write(responseStanza);
@@ -81,9 +68,8 @@ public class ResponseWriter {
     }
 
     public void handleUnsupportedStanzaType(SessionContext sessionContext, Stanza receivedStanza) {
-        Stanza errorStanza = ServerErrorResponses.getStreamError(
-                StreamErrorCondition.UNSUPPORTED_STANZA_TYPE, sessionContext.getXMLLang(),
-                "could not process incoming stanza", receivedStanza);
+        Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
+                sessionContext.getXMLLang(), "could not process incoming stanza", receivedStanza);
         writeErrorAndClose(sessionContext, errorStanza);
     }
 
@@ -107,7 +93,7 @@ public class ResponseWriter {
     }
 
     public void handleParsingException(SessionContext sessionContext, ParsingException e) {
-        //TODO write the __right__ error response, not bad-format default only
+        // TODO write the __right__ error response, not bad-format default only
         if (e.getErrorCondition() != ParsingErrorCondition.BAD_FORMAT)
             throw new RuntimeException("cannot handle this error condition yet");
         Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.BAD_FORMAT,
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java
index 0699de4..a01e62f 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java
@@ -19,10 +19,7 @@
  */
 package org.apache.vysper.xmpp.protocol.worker;
 
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.ResponseWriter;
 import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory;
-import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.server.SessionState;
 
 /**
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java
index 3bc0f2d..86a6f99 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java
@@ -25,8 +25,6 @@ import org.apache.vysper.StanzaAssert;
 import org.apache.vysper.xmpp.addressing.Entity;
 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.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -140,8 +138,7 @@ public class BindIQHandlerTestCase {
                 .startInnerElement("jid", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_BIND)
                 .addText(new EntityImpl(FROM, "res").getFullQualifiedName()).build();
 
-        ResponseStanzaContainer responseStanzaContainer = new ResponseStanzaContainerImpl(responses);
-        StanzaAssert.assertEquals(expectedResponse, responseStanzaContainer.getUniqueResponseStanza());
+        StanzaAssert.assertEquals(expectedResponse, responses.get(0));
     }
 
     @Test
@@ -154,8 +151,7 @@ public class BindIQHandlerTestCase {
                 .startInnerElement("error", NamespaceURIs.JABBER_CLIENT).addAttribute("type", "cancel")
                 .startInnerElement("not-allowed", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS).build();
 
-        ResponseStanzaContainer responseStanzaContainer = new ResponseStanzaContainerImpl(responses);
-        StanzaAssert.assertEquals(expectedResponse, responseStanzaContainer.getUniqueResponseStanza());
+        StanzaAssert.assertEquals(expectedResponse, responses.get(0));
     }
 
 }
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java
index 52a5fd6..24938b7 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java
@@ -27,7 +27,6 @@ import java.util.List;
 import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.addressing.EntityFormatException;
 import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -114,7 +113,7 @@ public class PresenceAvailInitialOutHandlerTestCase extends PresenceHandlerBaseT
 
         List<Stanza> stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true,
                 sessionContext, new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
-        Stanza stanza = new ResponseStanzaContainerImpl(stanzas).getUniqueResponseStanza();
+        Stanza stanza = stanzas.get(0);
         // ... and will give an error:
         assertEquals("error", stanza.getAttribute("type").getValue());
         assertEquals(StanzaErrorCondition.UNKNOWN_SENDER.value(),
@@ -129,7 +128,7 @@ public class PresenceAvailInitialOutHandlerTestCase extends PresenceHandlerBaseT
         // 3 other resources got unbound, remaining one should now be unique
         stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
                 new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
-        stanza = new ResponseStanzaContainerImpl(stanzas).getUniqueResponseStanza();
+        stanza = stanzas.get(0);
         assertNull(stanza); // no return, esp no error stanza - all the handling is done through relays
         stanza = initiatingUser.getNextStanza();
         assertNull(stanza.getAttribute("type"));
@@ -143,7 +142,7 @@ public class PresenceAvailInitialOutHandlerTestCase extends PresenceHandlerBaseT
         assertTrue(noRemainingBinds);
         stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
                 new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
-        stanza = new ResponseStanzaContainerImpl(stanzas).getUniqueResponseStanza();
+        stanza = stanzas.get(0);
         assertEquals("error", stanza.getAttribute("type").getValue());
         assertEquals(StanzaErrorCondition.UNKNOWN_SENDER.value(),
                 stanza.getSingleInnerElementsNamed("error").getFirstInnerElement().getName());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java
index ddbc55b..0762bdd 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java
@@ -26,7 +26,6 @@ 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.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -131,7 +130,7 @@ public class SoftwareVersionIQHandlerTestCase {
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         
         // <iq xmlns="jabber:client" type="result" id="1">
         // <query xmlns="jabber:iq:version"><name>Apache Vysper XMPP Server</name>
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java
index 2730ba2..7a30c92 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java
@@ -27,7 +27,6 @@ import junit.framework.Assert;
 import org.apache.vysper.xml.fragment.XMLElement;
 import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -122,7 +121,7 @@ public class EntityTimeIQHandlerTestCase {
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         
         Assert.assertNotNull(response);
         Assert.assertEquals("iq", response.getName());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java
index 722ccc5..a847951 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java
@@ -27,7 +27,6 @@ import junit.framework.Assert;
 import org.apache.vysper.xml.fragment.XMLElement;
 import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -122,7 +121,7 @@ public class EntityTimeXEP0090IQHandlerTestCase {
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         
         Assert.assertNotNull(response);
         Assert.assertEquals("iq", response.getName());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java
index 253588c..39ff493 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java
@@ -34,7 +34,6 @@ import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.StanzaBroker;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
@@ -51,6 +50,8 @@ import org.mockito.Mockito;
 
 import junit.framework.Assert;
 
+import static org.junit.Assert.assertTrue;
+
 /**
  */
 public class DiscoInfoIQHandlerTestCase extends Mockito {
@@ -172,7 +173,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
         when(serviceCollector.processServerInfoRequest(any(InfoRequest.class))).thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         StanzaAssert.assertEquals(createExpectedResponse(SERVER), response);
     }
 
@@ -186,7 +187,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
                 .thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         StanzaAssert.assertEquals(createExpectedResponse(COMPONENT), response);
     }
@@ -198,7 +199,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
         when(serviceCollector.processInfoRequest(any(InfoRequest.class))).thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         StanzaAssert.assertEquals(createExpectedResponse(USER), response);
     }
@@ -210,9 +211,8 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
         IQStanza stanza = createRequest(USER_WITH_RESOURCE);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
 
-        Assert.assertNull(response);
+        assertTrue(responses.isEmpty());
 
         verify(stanzaBroker).write(eq(USER_WITH_RESOURCE), eq(stanza), any(DeliveryFailureStrategy.class));
     }
@@ -224,9 +224,8 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
         IQStanza stanza = createRequest(USER_WITH_RESOURCE);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
 
-        Assert.assertNull(response);
+        assertTrue(responses.isEmpty());
 
         verify(stanzaBroker).writeToSession(stanza);
     }
@@ -240,7 +239,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
                 .thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(COMPONENT, "item-not-found");
 
@@ -255,7 +254,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
                 ServiceDiscoveryRequestListenerRegistry.SERVICE_DISCOVERY_REQUEST_LISTENER_REGISTRY)).thenReturn(null);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(SERVER, "internal-server-error");
 
@@ -270,7 +269,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
                 .thenThrow(new ServiceDiscoveryRequestException(StanzaErrorCondition.INTERNAL_SERVER_ERROR));
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(SERVER, "internal-server-error");
 
@@ -286,7 +285,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
                 .thenThrow(new ServiceDiscoveryRequestException(StanzaErrorCondition.INTERNAL_SERVER_ERROR));
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(COMPONENT, "internal-server-error");
 
@@ -301,7 +300,7 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
                 .thenThrow(new ServiceDiscoveryRequestException(StanzaErrorCondition.INTERNAL_SERVER_ERROR));
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(SERVER, "internal-server-error");
 
@@ -315,10 +314,9 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
         IQStanza stanza = createRequest(USER, IQStanzaType.RESULT);
 
         List<Stanza> responses = handler.handleResult(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
-
-        Assert.assertNull(response);
 
+        assertTrue(responses.isEmpty());
+        
         verify(stanzaBroker).write(eq(USER), eq(stanza), any(DeliveryFailureStrategy.class));
     }
 
@@ -329,10 +327,9 @@ public class DiscoInfoIQHandlerTestCase extends Mockito {
         IQStanza stanza = createRequest(USER, IQStanzaType.RESULT);
 
         List<Stanza> responses = handler.handleResult(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
-
-        Assert.assertNull(response);
 
+        assertTrue(responses.isEmpty());
+        
         verify(stanzaBroker).writeToSession(stanza);
     }
 
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
index 0a41b4d..494291d 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
@@ -38,8 +38,6 @@ import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
 import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
 import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
@@ -78,7 +76,8 @@ public class ExtendedDiscoInfoTestCase extends TestCase {
             }
         });
 
-        DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(EntityImpl.parse("vysper.org"), mock(StanzaRelay.class));
+        DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(EntityImpl.parse("vysper.org"),
+                mock(StanzaRelay.class));
         runtimeContext.registerServerRuntimeContextService(serviceCollector);
 
         DiscoInfoIQHandler infoIQHandler = new DiscoInfoIQHandler();
@@ -91,13 +90,12 @@ public class ExtendedDiscoInfoTestCase extends TestCase {
         SessionContext sessionContext = new TestSessionContext(runtimeContext, new SessionStateHolder(),
                 runtimeContext.getStanzaRelay());
 
-        List<Stanza> resultStanza = infoIQHandler.handleGet(finalStanza, runtimeContext, sessionContext,
+        List<Stanza> resultStanzas = infoIQHandler.handleGet(finalStanza, runtimeContext, sessionContext,
                 new SimpleStanzaBroker(runtimeContext.getStanzaRelay(), sessionContext));
 
-        ResponseStanzaContainer responseStanzaContainer = new ResponseStanzaContainerImpl(resultStanza);
-        assertTrue(responseStanzaContainer.getUniqueResponseStanza().getVerifier().onlySubelementEquals("query",
+        assertTrue(resultStanzas.get(0).getVerifier().onlySubelementEquals("query",
                 NamespaceURIs.XEP0030_SERVICE_DISCOVERY_INFO));
-        XMLElement queryElement = responseStanzaContainer.getUniqueResponseStanza().getFirstInnerElement();
+        XMLElement queryElement = resultStanzas.get(0).getFirstInnerElement();
         XMLElementVerifier queryVerifier = queryElement.getVerifier();
         assertTrue(queryVerifier.subElementsPresentExact(4));
         List<XMLElement> innerElements = queryElement.getInnerElements();
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java
index 724c02f..da5a02a 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java
@@ -29,7 +29,7 @@ import org.apache.vysper.xmpp.stanza.Stanza;
 
 /**
  */
-public class CallTestStanzaHandlerResponse extends CallTestStanzaHandler implements ResponseStanzaContainer {
+public class CallTestStanzaHandlerResponse extends CallTestStanzaHandler {
     private Stanza response;
 
     public CallTestStanzaHandlerResponse(String name) {
@@ -52,7 +52,6 @@ public class CallTestStanzaHandlerResponse extends CallTestStanzaHandler impleme
         return Collections.singletonList(response);
     }
 
-    @Override
     public Stanza getUniqueResponseStanza() {
         return response;
     }
@@ -61,7 +60,4 @@ public class CallTestStanzaHandlerResponse extends CallTestStanzaHandler impleme
         return response != null;
     }
 
-    public boolean hasNoResponse() {
-        return !hasResponse();
-    }
 }
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java
index b7f8c35..02f3f6c 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java
@@ -26,7 +26,6 @@ import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.ConferenceTest
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
diff --git a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java
index 2826436..b312c3b 100644
--- a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java
+++ b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java
@@ -26,7 +26,6 @@ import org.apache.vysper.xmpp.modules.core.base.handler.IQHandler;
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.AbstractPublishSubscribeTestCase;
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.LeafNode;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.stanza.IQStanza;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
diff --git a/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java b/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
index 360fd42..689d38c 100644
--- a/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
+++ b/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
@@ -27,7 +27,6 @@ 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.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -137,7 +136,7 @@ public class Socks5IqHandlerTest extends Mockito {
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = StanzaBuilder
                 .createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID())
@@ -154,7 +153,7 @@ public class Socks5IqHandlerTest extends Mockito {
         proxyAddress = new InetSocketAddress(12345);
         handler = new Socks5IqHandler(jid, proxyAddress, connectionsRegistry);
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = StanzaBuilder
                 .createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID())
@@ -178,7 +177,7 @@ public class Socks5IqHandlerTest extends Mockito {
         when(connectionsRegistry.activate(hash)).thenReturn(true);
 
         List<Stanza> responses = handler.handleSet(request, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = StanzaBuilder.createIQStanza(TO, FROM, IQStanzaType.RESULT, "id1").build();