You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2006/11/13 01:46:30 UTC

svn commit: r474108 [2/10] - in /incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main: ./ activemq/connector/openwire/commands/ activemq/connector/openwire/marshal/ activemq/connector/openwire/marshal/v2/

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/DataResponse.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -45,24 +47,32 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-DataResponse* DataResponse::clone() const {
+DataStructure* DataResponse::cloneDataStructure() const {
     DataResponse* dataResponse = new DataResponse();
 
     // Copy the data from the base class or classes
-    Response::copy( dataResponse );
+    dataResponse->copyDataStructure( this );
 
-    dataResponse->data = this->getData();
-
-    return dataResponse
+    return dataResponse;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void DataResponse::copy( DataResponse* dest ) const {
+void DataResponse::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    Response::copy( dataResponse );
+    // Copy the data of the base class or classes
+    Response::copyDataStructure( src );
+
+    const DataResponse* srcPtr = dynamic_cast<const DataResponse*>( src );
 
-    dest->setData( this->getData() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "DataResponse::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setData( 
+        dynamic_cast<DataStructure*>( 
+            srcPtr->getData()->cloneDataStructure() ) );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataResponse.h Sun Nov 12 16:46:23 2006
@@ -70,14 +70,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual DataResponse* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( DataResponse* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const DataStructure* getData() const;
         virtual DataStructure* getData();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataStructure.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataStructure.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataStructure.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DataStructure.h Sun Nov 12 16:46:23 2006
@@ -46,14 +46,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual DataStructure* cloneCommand() const = 0;
+        virtual DataStructure* cloneDataStructure() const = 0;
 
         /**
          * Copy the contents of the passed object into this objects
          * members, overwriting any existing data.
          * @return src - Source Object
          */
-        virtual void copyCommand( const DataStructure* src ) = 0;
+        virtual void copyDataStructure( const DataStructure* src ) = 0;
 
     };
 

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/DestinationInfo.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -52,37 +54,40 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-DestinationInfo* DestinationInfo::clone() const {
+DataStructure* DestinationInfo::cloneDataStructure() const {
     DestinationInfo* destinationInfo = new DestinationInfo();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( destinationInfo );
+    destinationInfo->copyDataStructure( this );
 
-    destinationInfo->connectionId = this->getConnectionId();
-    destinationInfo->destination = this->getDestination();
-    destinationInfo->operationType = this->getOperationType()->clone();
-    destinationInfo->timeout = this->getTimeout()->clone();
-    for( size_t ibrokerPath = 0; ibrokerPath < brokerPath.size(); ++ibrokerPath ) {
-        destinationInfo->getBrokerPath().push_back( 
-            this->brokerPath[ibrokerPath]->clone();
-    }
-
-    return destinationInfo
+    return destinationInfo;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void DestinationInfo::copy( DestinationInfo* dest ) const {
+void DestinationInfo::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( destinationInfo );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
 
-    dest->setConnectionId( this->getConnectionId() );
-    dest->setDestination( this->getDestination() );
-    dest->setOperationType( this->getOperationType()->clone() );
-    dest->setTimeout( this->getTimeout()->clone() );
-    for( size_t ibrokerPath = 0; ibrokerPath < brokerPath.size(); ++ibrokerPath ) {
-        dest->getBrokerPath().push_back( 
-            this->brokerPath[ibrokerPath]->clone() );
+    const DestinationInfo* srcPtr = dynamic_cast<const DestinationInfo*>( src );
+
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "DestinationInfo::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setConnectionId( 
+        dynamic_cast<ConnectionId*>( 
+            srcPtr->getConnectionId()->cloneDataStructure() ) );
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setOperationType( srcPtr->getOperationType() );
+    this->setTimeout( srcPtr->getTimeout() );
+    for( size_t ibrokerPath = 0; ibrokerPath < srcPtr->getBrokerPath().size(); ++ibrokerPath ) {
+        this->getBrokerPath().push_back( 
+            srcPtr->getBrokerPath()[ibrokerPath]->cloneDataStructure() );
     }
 }
 

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DestinationInfo.h Sun Nov 12 16:46:23 2006
@@ -76,14 +76,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual DestinationInfo* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( DestinationInfo* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ConnectionId* getConnectionId() const;
         virtual ConnectionId* getConnectionId();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/DiscoveryEvent.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -45,26 +47,31 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-DiscoveryEvent* DiscoveryEvent::clone() const {
+DataStructure* DiscoveryEvent::cloneDataStructure() const {
     DiscoveryEvent* discoveryEvent = new DiscoveryEvent();
 
     // Copy the data from the base class or classes
-    BaseDataStructure::copy( discoveryEvent );
+    discoveryEvent->copyDataStructure( this );
 
-    discoveryEvent->serviceName = this->getServiceName();
-    discoveryEvent->brokerName = this->getBrokerName();
-
-    return discoveryEvent
+    return discoveryEvent;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void DiscoveryEvent::copy( DiscoveryEvent* dest ) const {
+void DiscoveryEvent::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseDataStructure::copy( discoveryEvent );
+    // Copy the data of the base class or classes
+    BaseDataStructure::copyDataStructure( src );
+
+    const DiscoveryEvent* srcPtr = dynamic_cast<const DiscoveryEvent*>( src );
 
-    dest->setServiceName( this->getServiceName() );
-    dest->setBrokerName( this->getBrokerName() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "DiscoveryEvent::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setServiceName( srcPtr->getServiceName() );
+    this->setBrokerName( srcPtr->getBrokerName() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/DiscoveryEvent.h Sun Nov 12 16:46:23 2006
@@ -70,14 +70,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual DiscoveryEvent* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( DiscoveryEvent* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const std::string& getServiceName() const;
         virtual std::string& getServiceName();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/ExceptionResponse.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -45,24 +47,32 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-ExceptionResponse* ExceptionResponse::clone() const {
+DataStructure* ExceptionResponse::cloneDataStructure() const {
     ExceptionResponse* exceptionResponse = new ExceptionResponse();
 
     // Copy the data from the base class or classes
-    Response::copy( exceptionResponse );
+    exceptionResponse->copyDataStructure( this );
 
-    exceptionResponse->exception = this->getException();
-
-    return exceptionResponse
+    return exceptionResponse;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void ExceptionResponse::copy( ExceptionResponse* dest ) const {
+void ExceptionResponse::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    Response::copy( exceptionResponse );
+    // Copy the data of the base class or classes
+    Response::copyDataStructure( src );
+
+    const ExceptionResponse* srcPtr = dynamic_cast<const ExceptionResponse*>( src );
 
-    dest->setException( this->getException() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "ExceptionResponse::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setException( 
+        dynamic_cast<BrokerError*>( 
+            srcPtr->getException()->cloneDataStructure() ) );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ExceptionResponse.h Sun Nov 12 16:46:23 2006
@@ -70,14 +70,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual ExceptionResponse* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( ExceptionResponse* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const BrokerError* getException() const;
         virtual BrokerError* getException();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/FlushCommand.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -43,22 +45,29 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-FlushCommand* FlushCommand::clone() const {
+DataStructure* FlushCommand::cloneDataStructure() const {
     FlushCommand* flushCommand = new FlushCommand();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( flushCommand );
+    flushCommand->copyDataStructure( this );
 
-
-    return flushCommand
+    return flushCommand;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void FlushCommand::copy( FlushCommand* dest ) const {
+void FlushCommand::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( flushCommand );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
+
+    const FlushCommand* srcPtr = dynamic_cast<const FlushCommand*>( src );
 
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "FlushCommand::copyDataStructure - src is NULL or invalid" );
+    }
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/FlushCommand.h Sun Nov 12 16:46:23 2006
@@ -68,14 +68,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual FlushCommand* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( FlushCommand* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
     };
 

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/IntegerResponse.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -44,24 +46,30 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-IntegerResponse* IntegerResponse::clone() const {
+DataStructure* IntegerResponse::cloneDataStructure() const {
     IntegerResponse* integerResponse = new IntegerResponse();
 
     // Copy the data from the base class or classes
-    Response::copy( integerResponse );
+    integerResponse->copyDataStructure( this );
 
-    integerResponse->result = this->getResult()->clone();
-
-    return integerResponse
+    return integerResponse;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void IntegerResponse::copy( IntegerResponse* dest ) const {
+void IntegerResponse::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    Response::copy( integerResponse );
+    // Copy the data of the base class or classes
+    Response::copyDataStructure( src );
+
+    const IntegerResponse* srcPtr = dynamic_cast<const IntegerResponse*>( src );
 
-    dest->setResult( this->getResult()->clone() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "IntegerResponse::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setResult( srcPtr->getResult() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/IntegerResponse.h Sun Nov 12 16:46:23 2006
@@ -69,14 +69,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual IntegerResponse* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( IntegerResponse* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const int getResult() const;
         virtual int getResult();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/JournalQueueAck.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -47,26 +49,35 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-JournalQueueAck* JournalQueueAck::clone() const {
+DataStructure* JournalQueueAck::cloneDataStructure() const {
     JournalQueueAck* journalQueueAck = new JournalQueueAck();
 
     // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalQueueAck );
+    journalQueueAck->copyDataStructure( this );
 
-    journalQueueAck->destination = this->getDestination();
-    journalQueueAck->messageAck = this->getMessageAck();
-
-    return journalQueueAck
+    return journalQueueAck;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void JournalQueueAck::copy( JournalQueueAck* dest ) const {
+void JournalQueueAck::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalQueueAck );
+    // Copy the data of the base class or classes
+    BaseDataStructure::copyDataStructure( src );
+
+    const JournalQueueAck* srcPtr = dynamic_cast<const JournalQueueAck*>( src );
 
-    dest->setDestination( this->getDestination() );
-    dest->setMessageAck( this->getMessageAck() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "JournalQueueAck::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setMessageAck( 
+        dynamic_cast<MessageAck*>( 
+            srcPtr->getMessageAck()->cloneDataStructure() ) );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalQueueAck.h Sun Nov 12 16:46:23 2006
@@ -72,14 +72,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual JournalQueueAck* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( JournalQueueAck* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ActiveMQDestination* getDestination() const;
         virtual ActiveMQDestination* getDestination();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/JournalTopicAck.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -52,34 +54,41 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-JournalTopicAck* JournalTopicAck::clone() const {
+DataStructure* JournalTopicAck::cloneDataStructure() const {
     JournalTopicAck* journalTopicAck = new JournalTopicAck();
 
     // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalTopicAck );
+    journalTopicAck->copyDataStructure( this );
 
-    journalTopicAck->destination = this->getDestination();
-    journalTopicAck->messageId = this->getMessageId();
-    journalTopicAck->messageSequenceId = this->getMessageSequenceId()->clone();
-    journalTopicAck->subscritionName = this->getSubscritionName();
-    journalTopicAck->clientId = this->getClientId();
-    journalTopicAck->transactionId = this->getTransactionId();
-
-    return journalTopicAck
+    return journalTopicAck;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void JournalTopicAck::copy( JournalTopicAck* dest ) const {
+void JournalTopicAck::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalTopicAck );
+    // Copy the data of the base class or classes
+    BaseDataStructure::copyDataStructure( src );
+
+    const JournalTopicAck* srcPtr = dynamic_cast<const JournalTopicAck*>( src );
 
-    dest->setDestination( this->getDestination() );
-    dest->setMessageId( this->getMessageId() );
-    dest->setMessageSequenceId( this->getMessageSequenceId()->clone() );
-    dest->setSubscritionName( this->getSubscritionName() );
-    dest->setClientId( this->getClientId() );
-    dest->setTransactionId( this->getTransactionId() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "JournalTopicAck::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setMessageId( 
+        dynamic_cast<MessageId*>( 
+            srcPtr->getMessageId()->cloneDataStructure() ) );
+    this->setMessageSequenceId( srcPtr->getMessageSequenceId() );
+    this->setSubscritionName( srcPtr->getSubscritionName() );
+    this->setClientId( srcPtr->getClientId() );
+    this->setTransactionId( 
+        dynamic_cast<TransactionId*>( 
+            srcPtr->getTransactionId()->cloneDataStructure() ) );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTopicAck.h Sun Nov 12 16:46:23 2006
@@ -77,14 +77,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual JournalTopicAck* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( JournalTopicAck* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ActiveMQDestination* getDestination() const;
         virtual ActiveMQDestination* getDestination();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/JournalTrace.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -44,24 +46,30 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-JournalTrace* JournalTrace::clone() const {
+DataStructure* JournalTrace::cloneDataStructure() const {
     JournalTrace* journalTrace = new JournalTrace();
 
     // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalTrace );
+    journalTrace->copyDataStructure( this );
 
-    journalTrace->message = this->getMessage();
-
-    return journalTrace
+    return journalTrace;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void JournalTrace::copy( JournalTrace* dest ) const {
+void JournalTrace::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalTrace );
+    // Copy the data of the base class or classes
+    BaseDataStructure::copyDataStructure( src );
+
+    const JournalTrace* srcPtr = dynamic_cast<const JournalTrace*>( src );
 
-    dest->setMessage( this->getMessage() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "JournalTrace::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setMessage( srcPtr->getMessage() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTrace.h Sun Nov 12 16:46:23 2006
@@ -69,14 +69,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual JournalTrace* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( JournalTrace* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const std::string& getMessage() const;
         virtual std::string& getMessage();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/JournalTransaction.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -47,28 +49,34 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-JournalTransaction* JournalTransaction::clone() const {
+DataStructure* JournalTransaction::cloneDataStructure() const {
     JournalTransaction* journalTransaction = new JournalTransaction();
 
     // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalTransaction );
+    journalTransaction->copyDataStructure( this );
 
-    journalTransaction->transactionId = this->getTransactionId();
-    journalTransaction->type = this->getType()->clone();
-    journalTransaction->wasPrepared = this->getWasPrepared()->clone();
-
-    return journalTransaction
+    return journalTransaction;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void JournalTransaction::copy( JournalTransaction* dest ) const {
+void JournalTransaction::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseDataStructure::copy( journalTransaction );
+    // Copy the data of the base class or classes
+    BaseDataStructure::copyDataStructure( src );
+
+    const JournalTransaction* srcPtr = dynamic_cast<const JournalTransaction*>( src );
 
-    dest->setTransactionId( this->getTransactionId() );
-    dest->setType( this->getType()->clone() );
-    dest->setWasPrepared( this->getWasPrepared()->clone() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "JournalTransaction::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setTransactionId( 
+        dynamic_cast<TransactionId*>( 
+            srcPtr->getTransactionId()->cloneDataStructure() ) );
+    this->setType( srcPtr->getType() );
+    this->setWasPrepared( srcPtr->getWasPrepared() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/JournalTransaction.h Sun Nov 12 16:46:23 2006
@@ -72,14 +72,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual JournalTransaction* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( JournalTransaction* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const TransactionId* getTransactionId() const;
         virtual TransactionId* getTransactionId();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/KeepAliveInfo.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -43,22 +45,29 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-KeepAliveInfo* KeepAliveInfo::clone() const {
+DataStructure* KeepAliveInfo::cloneDataStructure() const {
     KeepAliveInfo* keepAliveInfo = new KeepAliveInfo();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( keepAliveInfo );
+    keepAliveInfo->copyDataStructure( this );
 
-
-    return keepAliveInfo
+    return keepAliveInfo;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void KeepAliveInfo::copy( KeepAliveInfo* dest ) const {
+void KeepAliveInfo::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( keepAliveInfo );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
+
+    const KeepAliveInfo* srcPtr = dynamic_cast<const KeepAliveInfo*>( src );
 
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "KeepAliveInfo::copyDataStructure - src is NULL or invalid" );
+    }
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/KeepAliveInfo.h Sun Nov 12 16:46:23 2006
@@ -68,14 +68,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual KeepAliveInfo* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( KeepAliveInfo* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
     };
 

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/LastPartialCommand.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -43,22 +45,29 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-LastPartialCommand* LastPartialCommand::clone() const {
+DataStructure* LastPartialCommand::cloneDataStructure() const {
     LastPartialCommand* lastPartialCommand = new LastPartialCommand();
 
     // Copy the data from the base class or classes
-    PartialCommand::copy( lastPartialCommand );
+    lastPartialCommand->copyDataStructure( this );
 
-
-    return lastPartialCommand
+    return lastPartialCommand;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void LastPartialCommand::copy( LastPartialCommand* dest ) const {
+void LastPartialCommand::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    PartialCommand::copy( lastPartialCommand );
+    // Copy the data of the base class or classes
+    PartialCommand::copyDataStructure( src );
+
+    const LastPartialCommand* srcPtr = dynamic_cast<const LastPartialCommand*>( src );
 
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "LastPartialCommand::copyDataStructure - src is NULL or invalid" );
+    }
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LastPartialCommand.h Sun Nov 12 16:46:23 2006
@@ -68,14 +68,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual LastPartialCommand* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( LastPartialCommand* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
     };
 

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/LocalTransactionId.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -46,26 +48,33 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-LocalTransactionId* LocalTransactionId::clone() const {
+DataStructure* LocalTransactionId::cloneDataStructure() const {
     LocalTransactionId* localTransactionId = new LocalTransactionId();
 
     // Copy the data from the base class or classes
-    TransactionId::copy( localTransactionId );
+    localTransactionId->copyDataStructure( this );
 
-    localTransactionId->value = this->getValue()->clone();
-    localTransactionId->connectionId = this->getConnectionId();
-
-    return localTransactionId
+    return localTransactionId;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void LocalTransactionId::copy( LocalTransactionId* dest ) const {
+void LocalTransactionId::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    TransactionId::copy( localTransactionId );
+    // Copy the data of the base class or classes
+    TransactionId::copyDataStructure( src );
+
+    const LocalTransactionId* srcPtr = dynamic_cast<const LocalTransactionId*>( src );
 
-    dest->setValue( this->getValue()->clone() );
-    dest->setConnectionId( this->getConnectionId() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "LocalTransactionId::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setValue( srcPtr->getValue() );
+    this->setConnectionId( 
+        dynamic_cast<ConnectionId*>( 
+            srcPtr->getConnectionId()->cloneDataStructure() ) );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/LocalTransactionId.h Sun Nov 12 16:46:23 2006
@@ -71,14 +71,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual LocalTransactionId* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( LocalTransactionId* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const long long getValue() const;
         virtual long long getValue();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/Message.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -78,80 +80,76 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Message* Message::clone() const {
+DataStructure* Message::cloneDataStructure() const {
     Message* message = new Message();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( message );
+    message->copyDataStructure( this );
 
-    message->producerId = this->getProducerId();
-    message->destination = this->getDestination();
-    message->transactionId = this->getTransactionId();
-    message->originalDestination = this->getOriginalDestination();
-    message->messageId = this->getMessageId();
-    message->originalTransactionId = this->getOriginalTransactionId();
-    message->groupID = this->getGroupID();
-    message->groupSequence = this->getGroupSequence()->clone();
-    message->correlationId = this->getCorrelationId();
-    message->persistent = this->getPersistent()->clone();
-    message->expiration = this->getExpiration()->clone();
-    message->priority = this->getPriority()->clone();
-    message->replyTo = this->getReplyTo();
-    message->timestamp = this->getTimestamp()->clone();
-    message->type = this->getType();
-    message->content = this->getContent()->clone();
-    message->marshalledProperties = this->getMarshalledProperties()->clone();
-    message->dataStructure = this->getDataStructure();
-    message->targetConsumerId = this->getTargetConsumerId();
-    message->compressed = this->getCompressed()->clone();
-    message->redeliveryCounter = this->getRedeliveryCounter()->clone();
-    for( size_t ibrokerPath = 0; ibrokerPath < brokerPath.size(); ++ibrokerPath ) {
-        message->getBrokerPath().push_back( 
-            this->brokerPath[ibrokerPath]->clone();
-    }
-    message->arrival = this->getArrival()->clone();
-    message->userID = this->getUserID();
-    message->recievedByDFBridge = this->getRecievedByDFBridge()->clone();
-    message->droppable = this->getDroppable()->clone();
-
-    return message
+    return message;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void Message::copy( Message* dest ) const {
+void Message::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( message );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
 
-    dest->setProducerId( this->getProducerId() );
-    dest->setDestination( this->getDestination() );
-    dest->setTransactionId( this->getTransactionId() );
-    dest->setOriginalDestination( this->getOriginalDestination() );
-    dest->setMessageId( this->getMessageId() );
-    dest->setOriginalTransactionId( this->getOriginalTransactionId() );
-    dest->setGroupID( this->getGroupID() );
-    dest->setGroupSequence( this->getGroupSequence()->clone() );
-    dest->setCorrelationId( this->getCorrelationId() );
-    dest->setPersistent( this->getPersistent()->clone() );
-    dest->setExpiration( this->getExpiration()->clone() );
-    dest->setPriority( this->getPriority()->clone() );
-    dest->setReplyTo( this->getReplyTo() );
-    dest->setTimestamp( this->getTimestamp()->clone() );
-    dest->setType( this->getType() );
-    dest->setContent( this->getContent()->clone() );
-    dest->setMarshalledProperties( this->getMarshalledProperties()->clone() );
-    dest->setDataStructure( this->getDataStructure() );
-    dest->setTargetConsumerId( this->getTargetConsumerId() );
-    dest->setCompressed( this->getCompressed()->clone() );
-    dest->setRedeliveryCounter( this->getRedeliveryCounter()->clone() );
-    for( size_t ibrokerPath = 0; ibrokerPath < brokerPath.size(); ++ibrokerPath ) {
-        dest->getBrokerPath().push_back( 
-            this->brokerPath[ibrokerPath]->clone() );
+    const Message* srcPtr = dynamic_cast<const Message*>( src );
+
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "Message::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setProducerId( 
+        dynamic_cast<ProducerId*>( 
+            srcPtr->getProducerId()->cloneDataStructure() ) );
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setTransactionId( 
+        dynamic_cast<TransactionId*>( 
+            srcPtr->getTransactionId()->cloneDataStructure() ) );
+    this->setOriginalDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getOriginalDestination()->cloneDataStructure() ) );
+    this->setMessageId( 
+        dynamic_cast<MessageId*>( 
+            srcPtr->getMessageId()->cloneDataStructure() ) );
+    this->setOriginalTransactionId( 
+        dynamic_cast<TransactionId*>( 
+            srcPtr->getOriginalTransactionId()->cloneDataStructure() ) );
+    this->setGroupID( srcPtr->getGroupID() );
+    this->setGroupSequence( srcPtr->getGroupSequence() );
+    this->setCorrelationId( srcPtr->getCorrelationId() );
+    this->setPersistent( srcPtr->getPersistent() );
+    this->setExpiration( srcPtr->getExpiration() );
+    this->setPriority( srcPtr->getPriority() );
+    this->setReplyTo( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getReplyTo()->cloneDataStructure() ) );
+    this->setTimestamp( srcPtr->getTimestamp() );
+    this->setType( srcPtr->getType() );
+    this->setContent( srcPtr->getContent() );
+    this->setMarshalledProperties( srcPtr->getMarshalledProperties() );
+    this->setDataStructure( 
+        dynamic_cast<DataStructure*>( 
+            srcPtr->getDataStructure()->cloneDataStructure() ) );
+    this->setTargetConsumerId( 
+        dynamic_cast<ConsumerId*>( 
+            srcPtr->getTargetConsumerId()->cloneDataStructure() ) );
+    this->setCompressed( srcPtr->getCompressed() );
+    this->setRedeliveryCounter( srcPtr->getRedeliveryCounter() );
+    for( size_t ibrokerPath = 0; ibrokerPath < srcPtr->getBrokerPath().size(); ++ibrokerPath ) {
+        this->getBrokerPath().push_back( 
+            srcPtr->getBrokerPath()[ibrokerPath]->cloneDataStructure() );
     }
-    dest->setArrival( this->getArrival()->clone() );
-    dest->setUserID( this->getUserID() );
-    dest->setRecievedByDFBridge( this->getRecievedByDFBridge()->clone() );
-    dest->setDroppable( this->getDroppable()->clone() );
+    this->setArrival( srcPtr->getArrival() );
+    this->setUserID( srcPtr->getUserID() );
+    this->setRecievedByDFBridge( srcPtr->getRecievedByDFBridge() );
+    this->setDroppable( srcPtr->getDroppable() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/Message.h Sun Nov 12 16:46:23 2006
@@ -104,14 +104,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual Message* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( Message* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ProducerId* getProducerId() const;
         virtual ProducerId* getProducerId();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/MessageAck.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -55,36 +57,46 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-MessageAck* MessageAck::clone() const {
+DataStructure* MessageAck::cloneDataStructure() const {
     MessageAck* messageAck = new MessageAck();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( messageAck );
+    messageAck->copyDataStructure( this );
 
-    messageAck->destination = this->getDestination();
-    messageAck->transactionId = this->getTransactionId();
-    messageAck->consumerId = this->getConsumerId();
-    messageAck->ackType = this->getAckType()->clone();
-    messageAck->firstMessageId = this->getFirstMessageId();
-    messageAck->lastMessageId = this->getLastMessageId();
-    messageAck->messageCount = this->getMessageCount()->clone();
-
-    return messageAck
+    return messageAck;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void MessageAck::copy( MessageAck* dest ) const {
+void MessageAck::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( messageAck );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
+
+    const MessageAck* srcPtr = dynamic_cast<const MessageAck*>( src );
 
-    dest->setDestination( this->getDestination() );
-    dest->setTransactionId( this->getTransactionId() );
-    dest->setConsumerId( this->getConsumerId() );
-    dest->setAckType( this->getAckType()->clone() );
-    dest->setFirstMessageId( this->getFirstMessageId() );
-    dest->setLastMessageId( this->getLastMessageId() );
-    dest->setMessageCount( this->getMessageCount()->clone() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "MessageAck::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setTransactionId( 
+        dynamic_cast<TransactionId*>( 
+            srcPtr->getTransactionId()->cloneDataStructure() ) );
+    this->setConsumerId( 
+        dynamic_cast<ConsumerId*>( 
+            srcPtr->getConsumerId()->cloneDataStructure() ) );
+    this->setAckType( srcPtr->getAckType() );
+    this->setFirstMessageId( 
+        dynamic_cast<MessageId*>( 
+            srcPtr->getFirstMessageId()->cloneDataStructure() ) );
+    this->setLastMessageId( 
+        dynamic_cast<MessageId*>( 
+            srcPtr->getLastMessageId()->cloneDataStructure() ) );
+    this->setMessageCount( srcPtr->getMessageCount() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageAck.h Sun Nov 12 16:46:23 2006
@@ -80,14 +80,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual MessageAck* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( MessageAck* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ActiveMQDestination* getDestination() const;
         virtual ActiveMQDestination* getDestination();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/MessageDispatch.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -50,30 +52,39 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-MessageDispatch* MessageDispatch::clone() const {
+DataStructure* MessageDispatch::cloneDataStructure() const {
     MessageDispatch* messageDispatch = new MessageDispatch();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( messageDispatch );
+    messageDispatch->copyDataStructure( this );
 
-    messageDispatch->consumerId = this->getConsumerId();
-    messageDispatch->destination = this->getDestination();
-    messageDispatch->message = this->getMessage();
-    messageDispatch->redeliveryCounter = this->getRedeliveryCounter()->clone();
-
-    return messageDispatch
+    return messageDispatch;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void MessageDispatch::copy( MessageDispatch* dest ) const {
+void MessageDispatch::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( messageDispatch );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
+
+    const MessageDispatch* srcPtr = dynamic_cast<const MessageDispatch*>( src );
 
-    dest->setConsumerId( this->getConsumerId() );
-    dest->setDestination( this->getDestination() );
-    dest->setMessage( this->getMessage() );
-    dest->setRedeliveryCounter( this->getRedeliveryCounter()->clone() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "MessageDispatch::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setConsumerId( 
+        dynamic_cast<ConsumerId*>( 
+            srcPtr->getConsumerId()->cloneDataStructure() ) );
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setMessage( 
+        dynamic_cast<Message*>( 
+            srcPtr->getMessage()->cloneDataStructure() ) );
+    this->setRedeliveryCounter( srcPtr->getRedeliveryCounter() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatch.h Sun Nov 12 16:46:23 2006
@@ -75,14 +75,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual MessageDispatch* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( MessageDispatch* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ConsumerId* getConsumerId() const;
         virtual ConsumerId* getConsumerId();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/MessageDispatchNotification.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -50,30 +52,39 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-MessageDispatchNotification* MessageDispatchNotification::clone() const {
+DataStructure* MessageDispatchNotification::cloneDataStructure() const {
     MessageDispatchNotification* messageDispatchNotification = new MessageDispatchNotification();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( messageDispatchNotification );
+    messageDispatchNotification->copyDataStructure( this );
 
-    messageDispatchNotification->consumerId = this->getConsumerId();
-    messageDispatchNotification->destination = this->getDestination();
-    messageDispatchNotification->deliverySequenceId = this->getDeliverySequenceId()->clone();
-    messageDispatchNotification->messageId = this->getMessageId();
-
-    return messageDispatchNotification
+    return messageDispatchNotification;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void MessageDispatchNotification::copy( MessageDispatchNotification* dest ) const {
+void MessageDispatchNotification::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( messageDispatchNotification );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
+
+    const MessageDispatchNotification* srcPtr = dynamic_cast<const MessageDispatchNotification*>( src );
 
-    dest->setConsumerId( this->getConsumerId() );
-    dest->setDestination( this->getDestination() );
-    dest->setDeliverySequenceId( this->getDeliverySequenceId()->clone() );
-    dest->setMessageId( this->getMessageId() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "MessageDispatchNotification::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setConsumerId( 
+        dynamic_cast<ConsumerId*>( 
+            srcPtr->getConsumerId()->cloneDataStructure() ) );
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setDeliverySequenceId( srcPtr->getDeliverySequenceId() );
+    this->setMessageId( 
+        dynamic_cast<MessageId*>( 
+            srcPtr->getMessageId()->cloneDataStructure() ) );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageDispatchNotification.h Sun Nov 12 16:46:23 2006
@@ -75,14 +75,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual MessageDispatchNotification* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( MessageDispatchNotification* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ConsumerId* getConsumerId() const;
         virtual ConsumerId* getConsumerId();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/MessageId.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -47,28 +49,34 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-MessageId* MessageId::clone() const {
+DataStructure* MessageId::cloneDataStructure() const {
     MessageId* messageId = new MessageId();
 
     // Copy the data from the base class or classes
-    BaseDataStructure::copy( messageId );
+    messageId->copyDataStructure( this );
 
-    messageId->producerId = this->getProducerId();
-    messageId->producerSequenceId = this->getProducerSequenceId()->clone();
-    messageId->brokerSequenceId = this->getBrokerSequenceId()->clone();
-
-    return messageId
+    return messageId;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void MessageId::copy( MessageId* dest ) const {
+void MessageId::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseDataStructure::copy( messageId );
+    // Copy the data of the base class or classes
+    BaseDataStructure::copyDataStructure( src );
+
+    const MessageId* srcPtr = dynamic_cast<const MessageId*>( src );
 
-    dest->setProducerId( this->getProducerId() );
-    dest->setProducerSequenceId( this->getProducerSequenceId()->clone() );
-    dest->setBrokerSequenceId( this->getBrokerSequenceId()->clone() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "MessageId::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setProducerId( 
+        dynamic_cast<ProducerId*>( 
+            srcPtr->getProducerId()->cloneDataStructure() ) );
+    this->setProducerSequenceId( srcPtr->getProducerSequenceId() );
+    this->setBrokerSequenceId( srcPtr->getBrokerSequenceId() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.h?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessageId.h Sun Nov 12 16:46:23 2006
@@ -72,14 +72,14 @@
          * caller now owns, this will be an exact copy of this one
          * @returns new copy of this object.
          */
-        virtual MessageId* clone() const;
+        virtual DataStructure* cloneDataStructure() const;
 
         /**
-         * Copy the contents of this object and place them into the
-         * instance of this object type that was passed in.
-         * @return dest - Destination Object
+         * Copy the contents of the passed object into this objects
+         * members, overwriting any existing data.
+         * @return src - Source Object
          */
-        virtual void clone( MessageId* dest ) const;
+        virtual void copyDataStructure( const DataStructure* src );
 
         virtual const ProducerId* getProducerId() const;
         virtual ProducerId* getProducerId();

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessagePull.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessagePull.cpp?view=diff&rev=474108&r1=474107&r2=474108
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessagePull.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/MessagePull.cpp Sun Nov 12 16:46:23 2006
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 #include <activemq/connector/openwire/commands/MessagePull.h>
+#include <activemq/exceptions/NullPointerException.h>
 
 using namespace std;
 using namespace activemq;
+using namespace activemq::exceptions;
 using namespace activemq::connector;
 using namespace activemq::connector::openwire;
 using namespace activemq::connector::openwire::commands;
@@ -48,28 +50,36 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-MessagePull* MessagePull::clone() const {
+DataStructure* MessagePull::cloneDataStructure() const {
     MessagePull* messagePull = new MessagePull();
 
     // Copy the data from the base class or classes
-    BaseCommand::copy( messagePull );
+    messagePull->copyDataStructure( this );
 
-    messagePull->consumerId = this->getConsumerId();
-    messagePull->destination = this->getDestination();
-    messagePull->timeout = this->getTimeout()->clone();
-
-    return messagePull
+    return messagePull;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void MessagePull::copy( MessagePull* dest ) const {
+void MessagePull::copyDataStructure( const DataStructure* src ) {
 
-    // Copy the data from the base class or classes
-    BaseCommand::copy( messagePull );
+    // Copy the data of the base class or classes
+    BaseCommand::copyDataStructure( src );
+
+    const MessagePull* srcPtr = dynamic_cast<const MessagePull*>( src );
 
-    dest->setConsumerId( this->getConsumerId() );
-    dest->setDestination( this->getDestination() );
-    dest->setTimeout( this->getTimeout()->clone() );
+    if( srcPtr == NULL || src == NULL ) {
+    
+        throw exceptions::NullPointerException(
+            __FILE__, __LINE__,
+            "MessagePull::copyDataStructure - src is NULL or invalid" );
+    }
+    this->setConsumerId( 
+        dynamic_cast<ConsumerId*>( 
+            srcPtr->getConsumerId()->cloneDataStructure() ) );
+    this->setDestination( 
+        dynamic_cast<ActiveMQDestination*>( 
+            srcPtr->getDestination()->cloneDataStructure() ) );
+    this->setTimeout( srcPtr->getTimeout() );
 }
 
 ////////////////////////////////////////////////////////////////////////////////