https://issues.apache.org/jira/browse/AMQCPP-591

Perform a complete conversion on the composite elements of a destination
passing through the STOMP wireFormat converter.
(cherry picked from commit c1c1aecc61f1adfdd8bb52ec06a4bb8fce7fa105)
diff --git a/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.cpp b/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.cpp
index a8945ea..01f8354 100644
--- a/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.cpp
+++ b/activemq-cpp/src/main/activemq/wireformat/stomp/StompHelper.cpp
@@ -36,6 +36,36 @@
 using namespace decaf::util;
 
 ////////////////////////////////////////////////////////////////////////////////
+namespace {
+
+    std::string doConvertDestination(StompWireFormat* wireFormat, Pointer<ActiveMQDestination> destination) {
+        switch (destination->getDestinationType()) {
+
+        case cms::Destination::TOPIC:
+            return std::string(wireFormat->getTopicPrefix()) + destination->getPhysicalName();
+        case cms::Destination::TEMPORARY_TOPIC:
+
+            if (destination->getPhysicalName().find("/remote-temp-topic/") == 0) {
+                return destination->getPhysicalName();
+            } else {
+                return std::string(wireFormat->getTempTopicPrefix()) + destination->getPhysicalName();
+            }
+
+        case cms::Destination::TEMPORARY_QUEUE:
+
+            if (destination->getPhysicalName().find("/remote-temp-queue/") == 0) {
+                return destination->getPhysicalName();
+            } else {
+                return std::string(wireFormat->getTempQueuePrefix()) + destination->getPhysicalName();
+            }
+
+        default:
+            return std::string(wireFormat->getQueuePrefix()) + destination->getPhysicalName();
+        }
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
 StompHelper::StompHelper(StompWireFormat* wireformat) : messageIdGenerator(), wireFormat(wireformat) {
 }
 
@@ -159,34 +189,29 @@
 ////////////////////////////////////////////////////////////////////////////////
 std::string StompHelper::convertDestination(const Pointer<ActiveMQDestination>& destination) {
 
-    if (destination == NULL) {
-        return "";
-    } else {
+    std::string result = "";
 
-        switch (destination->getDestinationType()) {
+    if (destination != NULL) {
 
-        case cms::Destination::TOPIC:
-            return std::string(wireFormat->getTopicPrefix()) + destination->getPhysicalName();
-        case cms::Destination::TEMPORARY_TOPIC:
+        if (destination->isComposite()) {
+            ArrayList< Pointer<ActiveMQDestination> > destinations = destination->getCompositeDestinations();
 
-            if (destination->getPhysicalName().find("/remote-temp-topic/") == 0) {
-                return destination->getPhysicalName();
-            } else {
-                return std::string(wireFormat->getTempTopicPrefix()) + destination->getPhysicalName();
+            Pointer<Iterator< Pointer<ActiveMQDestination> > > destIter(destinations.iterator());
+            while (destIter->hasNext()) {
+                Pointer<ActiveMQDestination> composite = destIter->next();
+
+                if (!result.empty()) {
+                    result.append(",");
+                }
+
+                result += doConvertDestination(wireFormat, composite);
             }
-
-        case cms::Destination::TEMPORARY_QUEUE:
-
-            if (destination->getPhysicalName().find("/remote-temp-queue/") == 0) {
-                return destination->getPhysicalName();
-            } else {
-                return std::string(wireFormat->getTempQueuePrefix()) + destination->getPhysicalName();
-            }
-
-        default:
-            return std::string(wireFormat->getQueuePrefix()) + destination->getPhysicalName();
+        } else {
+            result += doConvertDestination(wireFormat, destination);
         }
     }
+
+    return result;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/activemq-cpp/src/test-integration/Makefile.am b/activemq-cpp/src/test-integration/Makefile.am
index 38e31bf..021f55e 100644
--- a/activemq-cpp/src/test-integration/Makefile.am
+++ b/activemq-cpp/src/test-integration/Makefile.am
@@ -17,6 +17,7 @@
 
 cc_sources = \
     TestRegistry.cpp \
+    activemq/test/AdvisoryTest.cpp \
     activemq/test/AsyncSenderTest.cpp \
     activemq/test/BulkMessageTest.cpp \
     activemq/test/CmsConnectionStartStopTest.cpp \
@@ -37,7 +38,7 @@
     activemq/test/openwire/OpenWireCmsSendWithAsyncCallbackTest.cpp \
     activemq/test/openwire/OpenWireMessageListenerRedeliveryTest.cpp \
     activemq/test/openwire/OpenWireRedeliveryPolicyTest.cpp \
-    activemq/test/openwire/OpenwireAdvisorysTest.cpp \
+    activemq/test/openwire/OpenwireAdvisoryTest.cpp \
     activemq/test/openwire/OpenwireAsyncSenderTest.cpp \
     activemq/test/openwire/OpenwireClientAckTest.cpp \
     activemq/test/openwire/OpenwireCmsConnectionStartStopTest.cpp \
@@ -61,6 +62,7 @@
     activemq/test/openwire/OpenwireTransactionTest.cpp \
     activemq/test/openwire/OpenwireVirtualTopicTest.cpp \
     activemq/test/openwire/OpenwireXATransactionsTest.cpp \
+    activemq/test/stomp/StompAdvisoryTest.cpp \
     activemq/test/stomp/StompAsyncSenderTest.cpp \
     activemq/test/stomp/StompBulkMessageTest.cpp \
     activemq/test/stomp/StompCmsConnectionStartStopTest.cpp \
@@ -80,6 +82,7 @@
 
 
 h_sources = \
+    activemq/test/AdvisoryTest.h \
     activemq/test/AsyncSenderTest.h \
     activemq/test/BulkMessageTest.h \
     activemq/test/CMSTestFixture.h \
@@ -101,7 +104,7 @@
     activemq/test/openwire/OpenWireCmsSendWithAsyncCallbackTest.h \
     activemq/test/openwire/OpenWireMessageListenerRedeliveryTest.h \
     activemq/test/openwire/OpenWireRedeliveryPolicyTest.h \
-    activemq/test/openwire/OpenwireAdvisorysTest.h \
+    activemq/test/openwire/OpenwireAdvisoryTest.h \
     activemq/test/openwire/OpenwireAsyncSenderTest.h \
     activemq/test/openwire/OpenwireClientAckTest.h \
     activemq/test/openwire/OpenwireCmsConnectionStartStopTest.h \
@@ -125,6 +128,7 @@
     activemq/test/openwire/OpenwireTransactionTest.h \
     activemq/test/openwire/OpenwireVirtualTopicTest.h \
     activemq/test/openwire/OpenwireXATransactionsTest.h \
+    activemq/test/stomp/StompAdvisoryTest.h \
     activemq/test/stomp/StompAsyncSenderTest.h \
     activemq/test/stomp/StompBulkMessageTest.h \
     activemq/test/stomp/StompCmsConnectionStartStopTest.h \
diff --git a/activemq-cpp/src/test-integration/TestRegistry.cpp b/activemq-cpp/src/test-integration/TestRegistry.cpp
index 5ac2c56..292cded 100644
--- a/activemq-cpp/src/test-integration/TestRegistry.cpp
+++ b/activemq-cpp/src/test-integration/TestRegistry.cpp
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-#include "activemq/test/openwire/OpenwireAdvisorysTest.h"
+#include "activemq/test/openwire/OpenwireAdvisoryTest.h"
 #include "activemq/test/openwire/OpenwireAsyncSenderTest.h"
 #include "activemq/test/openwire/OpenwireClientAckTest.h"
 #include "activemq/test/openwire/OpenwireCmsConnectionStartStopTest.h"
@@ -42,6 +42,7 @@
 #include "activemq/test/openwire/OpenwireSlowListenerTest.h"
 #include "activemq/test/openwire/OpenwireVirtualTopicTest.h"
 #include "activemq/test/openwire/OpenwireXATransactionsTest.h"
+#include "activemq/test/stomp/StompAdvisoryTest.h"
 #include "activemq/test/stomp/StompAsyncSenderTest.h"
 #include "activemq/test/stomp/StompBulkMessageTest.h"
 #include "activemq/test/stomp/StompCmsTemplateTest.h"
@@ -55,7 +56,7 @@
 #include "activemq/test/stomp/StompJmsMessageGroupsTest.h"
 
 // Openwire Tests
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::openwire::OpenwireAdvisorysTest );
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::openwire::OpenwireAdvisoryTest );
 CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::openwire::OpenwireAsyncSenderTest );
 CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::openwire::OpenwireClientAckTest );
 CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::openwire::OpenwireCmsConnectionStartStopTest );
@@ -84,6 +85,7 @@
 CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::openwire::OpenwireXATransactionsTest );
 
 // Stomp Tests
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::stomp::StompAdvisoryTest );
 //CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::stomp::StompAsyncSenderTest );
 //CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::stomp::StompBulkMessageTest );
 //CPPUNIT_TEST_SUITE_REGISTRATION( activemq::test::stomp::StompCmsTemplateTest );
diff --git a/activemq-cpp/src/test-integration/activemq/test/AdvisoryTest.cpp b/activemq-cpp/src/test-integration/activemq/test/AdvisoryTest.cpp
new file mode 100644
index 0000000..7b3db25
--- /dev/null
+++ b/activemq-cpp/src/test-integration/activemq/test/AdvisoryTest.cpp
@@ -0,0 +1,128 @@
+/*
+ * 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.
+ */
+
+#include "AdvisoryTest.h"
+
+#include <activemq/core/ActiveMQConnectionFactory.h>
+#include <activemq/core/ActiveMQConnection.h>
+#include <activemq/core/ActiveMQSession.h>
+#include <activemq/commands/ActiveMQTempTopic.h>
+#include <activemq/commands/ActiveMQTempQueue.h>
+#include <activemq/commands/ActiveMQMessage.h>
+#include <activemq/commands/ConnectionInfo.h>
+#include <activemq/commands/DestinationInfo.h>
+#include <activemq/exceptions/ActiveMQException.h>
+#include <activemq/util/CMSListener.h>
+#include <activemq/util/IntegrationCommon.h>
+#include <activemq/util/AdvisorySupport.h>
+
+#include <decaf/lang/exceptions/ClassCastException.h>
+#include <decaf/lang/Pointer.h>
+#include <decaf/lang/Thread.h>
+#include <decaf/lang/Runnable.h>
+#include <decaf/util/concurrent/TimeUnit.h>
+#include <decaf/util/UUID.h>
+
+#include <cms/ConnectionFactory.h>
+#include <cms/Connection.h>
+#include <cms/Session.h>
+#include <cms/MessageConsumer.h>
+#include <cms/MessageProducer.h>
+#include <cms/MessageListener.h>
+#include <cms/ConnectionFactory.h>
+#include <cms/Connection.h>
+#include <cms/Message.h>
+#include <cms/Destination.h>
+#include <cms/TextMessage.h>
+
+#include <memory>
+
+using namespace cms;
+using namespace std;
+using namespace decaf;
+using namespace decaf::lang;
+using namespace decaf::lang::exceptions;
+using namespace decaf::util;
+using namespace decaf::util::concurrent;
+using namespace activemq;
+using namespace activemq::core;
+using namespace activemq::util;
+using namespace activemq::commands;
+using namespace activemq::exceptions;
+using namespace activemq::test;
+
+////////////////////////////////////////////////////////////////////////////////
+AdvisoryTest::AdvisoryTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+AdvisoryTest::~AdvisoryTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void AdvisoryTest::testTempDestinationCompositeAdvisoryTopic() {
+
+    std::auto_ptr<ConnectionFactory> factory(
+        ConnectionFactory::createCMSConnectionFactory(getBrokerURL()));
+    CPPUNIT_ASSERT(factory.get() != NULL);
+
+    std::auto_ptr<Connection> connection(factory->createConnection());
+    CPPUNIT_ASSERT(connection.get() != NULL);
+
+    std::auto_ptr<Session> session(connection->createSession());
+    CPPUNIT_ASSERT(session.get() != NULL);
+
+    std::auto_ptr<ActiveMQDestination> composite(
+        AdvisorySupport::getTempDestinationCompositeAdvisoryTopic());
+
+    std::auto_ptr<MessageConsumer> consumer(session->createConsumer(dynamic_cast<Topic*>(composite.get())));
+
+    connection->start();
+
+    // Create one of each
+    std::auto_ptr<Topic> tempTopic(session->createTemporaryTopic());
+    std::auto_ptr<Queue> tempQueue(session->createTemporaryQueue());
+
+    // Create a consumer to ensure destination creation based on protocol.
+    std::auto_ptr<MessageConsumer> tempTopicConsumer(session->createConsumer(tempTopic.get()));
+    std::auto_ptr<MessageConsumer> tempQueueConsumer(session->createConsumer(tempQueue.get()));
+
+    // Should be an advisory for each
+    std::auto_ptr<cms::Message> advisory1(consumer->receive(2000));
+    CPPUNIT_ASSERT(advisory1.get() != NULL);
+    std::auto_ptr<cms::Message> advisory2(consumer->receive(2000));
+    CPPUNIT_ASSERT(advisory2.get() != NULL);
+
+    ActiveMQMessage* tempTopicAdvisory = dynamic_cast<ActiveMQMessage*>(advisory1.get());
+    ActiveMQMessage* tempQueueAdvisory = dynamic_cast<ActiveMQMessage*>(advisory2.get());
+
+    // Create one of each
+    std::auto_ptr<Topic> topic(session->createTopic(UUID::randomUUID().toString()));
+    std::auto_ptr<Queue> queue(session->createQueue(UUID::randomUUID().toString()));
+
+    // Create a producer to ensure destination creation based on protocol.
+    std::auto_ptr<MessageProducer> topicProducer(session->createProducer(topic.get()));
+    std::auto_ptr<MessageProducer> queueProducer(session->createProducer(queue.get()));
+
+    // Should not be an advisory for each
+    std::auto_ptr<cms::Message> advisory3(consumer->receive(500));
+    CPPUNIT_ASSERT(advisory3.get() == NULL);
+    std::auto_ptr<cms::Message> advisory4(consumer->receive(500));
+    CPPUNIT_ASSERT(advisory4.get() == NULL);
+
+    connection->close();
+}
diff --git a/activemq-cpp/src/test-integration/activemq/test/AdvisoryTest.h b/activemq-cpp/src/test-integration/activemq/test/AdvisoryTest.h
new file mode 100644
index 0000000..dd694a4
--- /dev/null
+++ b/activemq-cpp/src/test-integration/activemq/test/AdvisoryTest.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+
+#ifndef _ACTIVEMQ_TEST_ADVISORYTEST_H_
+#define _ACTIVEMQ_TEST_ADVISORYTEST_H_
+
+#include <activemq/test/CMSTestFixture.h>
+
+namespace activemq {
+namespace test {
+
+    class AdvisoryTest : public CMSTestFixture {
+    public:
+
+        AdvisoryTest();
+        virtual ~AdvisoryTest();
+
+        void testTempDestinationCompositeAdvisoryTopic();
+
+    };
+
+}}
+
+#endif /*_ACTIVEMQ_TEST_ADVISORYTEST_H_*/
diff --git a/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisorysTest.cpp b/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisoryTest.cpp
similarity index 76%
rename from activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisorysTest.cpp
rename to activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisoryTest.cpp
index 9edd9f9..5890c8b 100644
--- a/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisorysTest.cpp
+++ b/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisoryTest.cpp
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-#include "OpenwireAdvisorysTest.h"
-
 #include <activemq/core/ActiveMQConnectionFactory.h>
 #include <activemq/core/ActiveMQConnection.h>
 #include <activemq/core/ActiveMQSession.h>
@@ -43,6 +41,7 @@
 #include <cms/TextMessage.h>
 
 #include <memory>
+#include "OpenwireAdvisoryTest.h"
 
 using namespace cms;
 using namespace std;
@@ -59,58 +58,57 @@
 using namespace activemq::test::openwire;
 
 ////////////////////////////////////////////////////////////////////////////////
-OpenwireAdvisorysTest::OpenwireAdvisorysTest() {
+OpenwireAdvisoryTest::OpenwireAdvisoryTest() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-OpenwireAdvisorysTest::~OpenwireAdvisorysTest() {
+OpenwireAdvisoryTest::~OpenwireAdvisoryTest() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void OpenwireAdvisorysTest::testConnectionAdvisories() {
+void OpenwireAdvisoryTest::testConnectionAdvisories() {
 
-    std::auto_ptr<ConnectionFactory> factory(
-        ConnectionFactory::createCMSConnectionFactory( getBrokerURL() ) );
-    CPPUNIT_ASSERT( factory.get() != NULL );
+    std::auto_ptr<ConnectionFactory> factory(ConnectionFactory::createCMSConnectionFactory(getBrokerURL()));
+    CPPUNIT_ASSERT(factory.get() != NULL);
 
-    std::auto_ptr<Connection> connection( factory->createConnection() );
-    CPPUNIT_ASSERT( connection.get() != NULL );
+    std::auto_ptr<Connection> connection(factory->createConnection());
+    CPPUNIT_ASSERT(connection.get() != NULL);
 
-    std::auto_ptr<Session> session( connection->createSession() );
-    CPPUNIT_ASSERT( session.get() != NULL );
+    std::auto_ptr<Session> session(connection->createSession());
+    CPPUNIT_ASSERT(session.get() != NULL);
 
-    std::auto_ptr<Destination> destination( session->createTopic("ActiveMQ.Advisory.Connection") );
-    std::auto_ptr<MessageConsumer> consumer( session->createConsumer( destination.get() ) );
+    std::auto_ptr<Destination> destination(session->createTopic("ActiveMQ.Advisory.Connection"));
+    std::auto_ptr<MessageConsumer> consumer(session->createConsumer(destination.get()));
 
     connection->start();
 
-    std::auto_ptr<Connection> otherConnection( factory->createConnection() );
-    CPPUNIT_ASSERT( otherConnection.get() != NULL );
+    std::auto_ptr<Connection> otherConnection(factory->createConnection());
+    CPPUNIT_ASSERT(otherConnection.get() != NULL);
     otherConnection->start();
 
     std::auto_ptr<cms::Message> message;
     int connectionInfoCount = 0;
 
     do {
-        message.reset( consumer->receive(3000) );
+        message.reset(consumer->receive(3000));
 
-        commands::Message* amqMessage = dynamic_cast<commands::Message*>( message.get() );
-        if(amqMessage != NULL) {
+        commands::Message* amqMessage = dynamic_cast<commands::Message*>(message.get());
+        if (amqMessage != NULL) {
             try {
                 Pointer<ConnectionInfo> connectionInfo =
                     amqMessage->getDataStructure().dynamicCast<commands::ConnectionInfo>();
 
-                if(connectionInfo != NULL) {
+                if (connectionInfo != NULL) {
                     connectionInfoCount++;
                 }
 
-            } catch(ClassCastException& ex) {
+            } catch (ClassCastException& ex) {
             }
         }
 
-    } while(message.get() != NULL);
+    } while (message.get() != NULL);
 
-    CPPUNIT_ASSERT_EQUAL(2, connectionInfoCount);
+    CPPUNIT_ASSERT(connectionInfoCount >= 2);
 
     otherConnection->close();
     connection->close();
@@ -162,10 +160,10 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void OpenwireAdvisorysTest::testConcurrentTempDestCreation() {
+void OpenwireAdvisoryTest::testConcurrentTempDestCreation() {
 
     std::auto_ptr<ConnectionFactory> factory(
-        ConnectionFactory::createCMSConnectionFactory( getBrokerURL() ) );
+        ConnectionFactory::createCMSConnectionFactory(getBrokerURL()));
 
     ConnectionLoadThread thread1(factory.get());
     ConnectionLoadThread thread2(factory.get());
diff --git a/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisorysTest.h b/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisoryTest.h
similarity index 71%
rename from activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisorysTest.h
rename to activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisoryTest.h
index c92ebc3..bf0c509 100644
--- a/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisorysTest.h
+++ b/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAdvisoryTest.h
@@ -15,38 +15,33 @@
  * limitations under the License.
  */
 
-#ifndef _ACTIVEMQ_TEST_OPENWIRE_OPENWIREADVISORYSTEST_H_
-#define _ACTIVEMQ_TEST_OPENWIRE_OPENWIREADVISORYSTEST_H_
+#ifndef _ACTIVEMQ_TEST_OPENWIRE_OPENWIREADVISORYTEST_H_
+#define _ACTIVEMQ_TEST_OPENWIRE_OPENWIREADVISORYTEST_H_
 
-#include <cppunit/TestFixture.h>
-#include <cppunit/extensions/HelperMacros.h>
-
+#include <activemq/test/AdvisoryTest.h>
 #include <activemq/util/IntegrationCommon.h>
 
 namespace activemq {
 namespace test {
 namespace openwire {
 
-    class OpenwireAdvisorysTest : public CppUnit::TestFixture {
+    class OpenwireAdvisoryTest : public AdvisoryTest {
 
-        CPPUNIT_TEST_SUITE( OpenwireAdvisorysTest );
+        CPPUNIT_TEST_SUITE( OpenwireAdvisoryTest );
         CPPUNIT_TEST( testConnectionAdvisories );
         CPPUNIT_TEST( testConcurrentTempDestCreation );
+        CPPUNIT_TEST( testTempDestinationCompositeAdvisoryTopic );
         CPPUNIT_TEST_SUITE_END();
 
     public:
 
-        OpenwireAdvisorysTest();
-
-        virtual ~OpenwireAdvisorysTest();
+        OpenwireAdvisoryTest();
+        virtual ~OpenwireAdvisoryTest();
 
         virtual std::string getBrokerURL() const {
             return activemq::util::IntegrationCommon::getInstance().getOpenwireURL();
         }
 
-        virtual void setUp() {}
-        virtual void tearDown() {}
-
         void testConnectionAdvisories();
         void testConcurrentTempDestCreation();
 
@@ -54,4 +49,4 @@
 
 }}}
 
-#endif /* _ACTIVEMQ_TEST_OPENWIRE_OPENWIREADVISORYSTEST_H_ */
+#endif /* _ACTIVEMQ_TEST_OPENWIRE_OPENWIREADVISORYTEST_H_ */
diff --git a/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAsyncSenderTest.h b/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAsyncSenderTest.h
index 54a95c9..0f8ad1c 100644
--- a/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAsyncSenderTest.h
+++ b/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireAsyncSenderTest.h
@@ -21,9 +21,9 @@
 #include <activemq/test/AsyncSenderTest.h>
 #include <activemq/util/IntegrationCommon.h>
 
-namespace activemq{
-namespace test{
-namespace openwire{
+namespace activemq {
+namespace test {
+namespace openwire {
 
     class OpenwireAsyncSenderTest : public AsyncSenderTest {
 
diff --git a/activemq-cpp/src/test-integration/activemq/test/stomp/StompAdvisoryTest.cpp b/activemq-cpp/src/test-integration/activemq/test/stomp/StompAdvisoryTest.cpp
new file mode 100644
index 0000000..2555a41
--- /dev/null
+++ b/activemq-cpp/src/test-integration/activemq/test/stomp/StompAdvisoryTest.cpp
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+#include <activemq/core/ActiveMQConnectionFactory.h>
+#include <activemq/core/ActiveMQConnection.h>
+#include <activemq/core/ActiveMQSession.h>
+#include <activemq/commands/Message.h>
+#include <activemq/commands/ConnectionInfo.h>
+#include <activemq/exceptions/ActiveMQException.h>
+
+#include <decaf/lang/exceptions/ClassCastException.h>
+#include <decaf/lang/Pointer.h>
+#include <decaf/lang/Thread.h>
+#include <decaf/lang/Runnable.h>
+#include <decaf/util/concurrent/TimeUnit.h>
+#include <decaf/util/UUID.h>
+
+#include <cms/ConnectionFactory.h>
+#include <cms/Connection.h>
+#include <cms/Session.h>
+#include <cms/MessageConsumer.h>
+#include <cms/MessageProducer.h>
+#include <cms/MessageListener.h>
+#include <cms/ConnectionFactory.h>
+#include <cms/Connection.h>
+#include <cms/Message.h>
+#include <cms/TextMessage.h>
+
+#include <memory>
+#include "StompAdvisoryTest.h"
+
+using namespace cms;
+using namespace std;
+using namespace decaf;
+using namespace decaf::lang;
+using namespace decaf::lang::exceptions;
+using namespace decaf::util;
+using namespace decaf::util::concurrent;
+using namespace activemq;
+using namespace activemq::core;
+using namespace activemq::commands;
+using namespace activemq::exceptions;
+using namespace activemq::test;
+using namespace activemq::test::stomp;
+
+////////////////////////////////////////////////////////////////////////////////
+StompAdvisoryTest::StompAdvisoryTest() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+StompAdvisoryTest::~StompAdvisoryTest() {
+}
diff --git a/activemq-cpp/src/test-integration/activemq/test/stomp/StompAdvisoryTest.h b/activemq-cpp/src/test-integration/activemq/test/stomp/StompAdvisoryTest.h
new file mode 100644
index 0000000..ca09455
--- /dev/null
+++ b/activemq-cpp/src/test-integration/activemq/test/stomp/StompAdvisoryTest.h
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+#ifndef _ACTIVEMQ_TEST_STOMP_STOMPADVISORYTEST_H_
+#define _ACTIVEMQ_TEST_STOMP_STOMPADVISORYTEST_H_
+
+#include <activemq/test/AdvisoryTest.h>
+#include <activemq/util/IntegrationCommon.h>
+
+namespace activemq {
+namespace test {
+namespace stomp {
+
+    class StompAdvisoryTest : public AdvisoryTest {
+
+        CPPUNIT_TEST_SUITE( StompAdvisoryTest );
+        CPPUNIT_TEST( testTempDestinationCompositeAdvisoryTopic );
+        CPPUNIT_TEST_SUITE_END();
+
+    public:
+
+        StompAdvisoryTest();
+        virtual ~StompAdvisoryTest();
+
+        virtual std::string getBrokerURL() const {
+            return activemq::util::IntegrationCommon::getInstance().getStompURL();
+        }
+
+    };
+
+}}}
+
+#endif /* _ACTIVEMQ_TEST_STOMP_STOMPADVISORYTEST_H_ */