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 2009/05/13 17:14:36 UTC

svn commit: r774396 - in /activemq/activemq-cpp/trunk/activemq-cpp/src: main/activemq/util/ test/activemq/util/

Author: tabish
Date: Wed May 13 15:14:35 2009
New Revision: 774396

URL: http://svn.apache.org/viewvc?rev=774396&view=rev
Log:
Adding in the skeleton implementation of StreamMessage, fixing some issues with the Primitive Collections and the exceptions that are thrown on conversion errors.

Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/PrimitiveListTest.cpp

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.cpp?rev=774396&r1=774395&r2=774396&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.cpp Wed May 13 15:14:35 2009
@@ -41,6 +41,11 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+PrimitiveList::~PrimitiveList() {
+    clear();
+}
+
+////////////////////////////////////////////////////////////////////////////////
 std::string PrimitiveList::toString() const {
 
     ostringstream stream;
@@ -59,10 +64,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 bool PrimitiveList::getBool( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getBool();
+    return converter.convert<bool>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -77,10 +82,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 unsigned char PrimitiveList::getByte( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getByte();
+    return converter.convert<unsigned char>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -95,10 +100,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 char PrimitiveList::getChar( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getChar();
+    return converter.convert<char>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -113,10 +118,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 short PrimitiveList::getShort( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getShort();
+    return converter.convert<short>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -131,10 +136,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 int PrimitiveList::getInt( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getInt();
+    return converter.convert<int>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -149,10 +154,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 long long PrimitiveList::getLong( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getLong();
+    return converter.convert<long long>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -167,10 +172,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 double PrimitiveList::getDouble( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getDouble();
+    return converter.convert<double>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -185,10 +190,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 float PrimitiveList::getFloat( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getFloat();
+    return converter.convert<float>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -203,10 +208,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 string PrimitiveList::getString( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ){
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( index );
-    return node.getString();
+    return converter.convert<std::string>( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -221,10 +226,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 std::vector<unsigned char> PrimitiveList::getByteArray( std::size_t index ) const
-    throw( IndexOutOfBoundsException, NoSuchElementException ) {
+    throw( IndexOutOfBoundsException, UnsupportedOperationException ) {
 
     PrimitiveValueNode node = this->get( index );
-    return node.getByteArray();
+    return converter.convert< std::vector<unsigned char> >( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.h?rev=774396&r1=774395&r2=774396&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveList.h Wed May 13 15:14:35 2009
@@ -21,9 +21,11 @@
 #include <string>
 #include <vector>
 #include <decaf/util/StlList.h>
-#include <decaf/lang/exceptions/NoSuchElementException.h>
+#include <decaf/lang/exceptions/UnsupportedOperationException.h>
+#include <decaf/lang/exceptions/IndexOutOfBoundsException.h>
 #include <stdio.h>
 #include <activemq/util/PrimitiveValueNode.h>
+#include <activemq/util/PrimitiveValueConverter.h>
 
 namespace activemq{
 namespace util{
@@ -32,16 +34,18 @@
      * List of primitives.
      */
     class AMQCPP_API PrimitiveList : public decaf::util::StlList<PrimitiveValueNode> {
+    private:
+
+        PrimitiveValueConverter converter;
+
     public:
 
         /**
-         * Default Constructor, creates an Empry list.
+         * Default Constructor, creates an Empty list.
          */
         PrimitiveList();
 
-        virtual ~PrimitiveList() {
-            clear();
-        }
+        virtual ~PrimitiveList();
 
         /**
          * Copy Constructor
@@ -67,12 +71,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual bool getBool( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -91,12 +95,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual unsigned char getByte( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -115,12 +119,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual char getChar( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -139,12 +143,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual short getShort( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -163,12 +167,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual int getInt( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -187,12 +191,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual long long getLong( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -211,12 +215,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual float getFloat( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -235,12 +239,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual double getDouble( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -259,12 +263,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual std::string getString( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,
@@ -283,12 +287,12 @@
          * @param index - index to get value from
          * @return value contained at the given index
          * @throw IndexOutOfBoundsException if index is > size()
-         * @throw NoSuchElementException if the type at index is not of the
-         * type that this method is to return.
+         * @throw UnsupportedOperationException if the type at index is not of the
+         * type that this method is to return or can convert to.
          */
         virtual std::vector<unsigned char> getByteArray( std::size_t index ) const
             throw( decaf::lang::exceptions::IndexOutOfBoundsException,
-                   decaf::lang::exceptions::NoSuchElementException );
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at the given index to the new value specified,

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.cpp?rev=774396&r1=774395&r2=774396&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.cpp Wed May 13 15:14:35 2009
@@ -32,6 +32,10 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+PrimitiveMap::~PrimitiveMap(){
+}
+
+////////////////////////////////////////////////////////////////////////////////
 PrimitiveMap::PrimitiveMap( const decaf::util::Map<std::string, PrimitiveValueNode>& src )
   : decaf::util::StlMap<std::string, PrimitiveValueNode>( src ) {
 }
@@ -61,7 +65,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 bool PrimitiveMap::getBool( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<bool>( node );
@@ -78,7 +82,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 unsigned char PrimitiveMap::getByte( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<unsigned char>( node );
@@ -94,7 +98,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 char PrimitiveMap::getChar( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<char>( node );
@@ -110,7 +114,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 short PrimitiveMap::getShort( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<short>( node );
@@ -126,7 +130,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 int PrimitiveMap::getInt( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<int>( node );
@@ -142,7 +146,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 long long PrimitiveMap::getLong( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<long long>( node );
@@ -158,7 +162,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 double PrimitiveMap::getDouble( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<double>( node );
@@ -174,7 +178,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 float PrimitiveMap::getFloat( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<float>( node );
@@ -190,7 +194,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 string PrimitiveMap::getString( const string& key ) const
-    throw( NoSuchElementException ){
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
     return converter.convert<std::string>( node );
@@ -206,10 +210,10 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 std::vector<unsigned char> PrimitiveMap::getByteArray( const std::string& key ) const
-    throw( decaf::lang::exceptions::NoSuchElementException ) {
+    throw( NoSuchElementException, UnsupportedOperationException ){
 
     PrimitiveValueNode node = this->get( key );
-    return node.getByteArray();
+    return converter.convert< std::vector<unsigned char> >( node );
 }
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.h?rev=774396&r1=774395&r2=774396&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveMap.h Wed May 13 15:14:35 2009
@@ -45,7 +45,7 @@
          */
         PrimitiveMap();
 
-        virtual ~PrimitiveMap() {}
+        virtual ~PrimitiveMap();
 
         /**
          * Copy Constructor
@@ -73,11 +73,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual bool getBool( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -94,11 +96,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual unsigned char getByte( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -115,11 +119,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual char getChar( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -136,11 +142,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual short getShort( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -157,11 +165,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual int getInt( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -178,11 +188,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual long long getLong( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -199,11 +211,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual float getFloat( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -220,11 +234,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual double getDouble( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -241,11 +257,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual std::string getString( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data
@@ -262,11 +280,13 @@
          *
          * @param key - the location to return the value from.
          * @returns the value at key in the type requested.
-         * @throw NoSuchElementException if key is not in the map or cannot
-         * be returned as the requested type.
+         * @throw NoSuchElementException if key is not in the map.
+         * @throw UnSupportedOperationException if the value cannot be converted
+         *                                      to the type this method returns
          */
         virtual std::vector<unsigned char> getByteArray( const std::string& key ) const
-            throw( decaf::lang::exceptions::NoSuchElementException );
+            throw( decaf::lang::exceptions::NoSuchElementException,
+                   decaf::lang::exceptions::UnsupportedOperationException );
 
         /**
          * Sets the value at key to the specified type. Overwrites any data

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.cpp?rev=774396&r1=774395&r2=774396&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.cpp Wed May 13 15:14:35 2009
@@ -242,4 +242,18 @@
     }
 }
 
+////////////////////////////////////////////////////////////////////////////////
+template<>
+std::vector<unsigned char> PrimitiveValueConverter::convert( const PrimitiveValueNode& value ) const
+    throw( decaf::lang::exceptions::UnsupportedOperationException ) {
+
+    switch( value.getType() ) {
+        case PrimitiveValueNode::BYTE_ARRAY_TYPE:
+            return value.getByteArray();
+        default:
+            throw decaf::lang::exceptions::UnsupportedOperationException(
+                 __FILE__, __LINE__, "Unsupported Type Conversion" );
+    }
+}
+
 }}

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.h?rev=774396&r1=774395&r2=774396&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/util/PrimitiveValueConverter.h Wed May 13 15:14:35 2009
@@ -65,7 +65,6 @@
                 __FILE__, __LINE__, "Invalid Conversion" );
         }
 
-
     };
 
     template<>
@@ -95,6 +94,9 @@
     template<>
     std::string PrimitiveValueConverter::convert( const PrimitiveValueNode& value ) const
         throw( decaf::lang::exceptions::UnsupportedOperationException );
+    template<>
+    std::vector<unsigned char> PrimitiveValueConverter::convert( const PrimitiveValueNode& value ) const
+        throw( decaf::lang::exceptions::UnsupportedOperationException );
 
 }}
 

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/PrimitiveListTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/PrimitiveListTest.cpp?rev=774396&r1=774395&r2=774396&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/PrimitiveListTest.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/util/PrimitiveListTest.cpp Wed May 13 15:14:35 2009
@@ -34,69 +34,73 @@
 
     plist.add( true );
     CPPUNIT_ASSERT( plist.getBool(0) == true );
+    CPPUNIT_ASSERT( plist.getString(0) == "true" );
     plist.add( false );
     CPPUNIT_ASSERT( plist.getBool(1) == false );
+    CPPUNIT_ASSERT( plist.getString(1) == "false" );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getByte( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setByte( 0, 1 );
     CPPUNIT_ASSERT( plist.getByte(0) == 1 );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getChar( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setChar( 0, 'a' );
     CPPUNIT_ASSERT( plist.getChar(0) == 'a' );
+    CPPUNIT_ASSERT( plist.getString(0) == "a" );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getShort( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setShort( 0, 2 );
     CPPUNIT_ASSERT( plist.getShort(0) == 2 );
+    CPPUNIT_ASSERT( plist.getInt(0) == 2 );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
-        plist.getInt( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        "Should Throw UnsupportedOperationException",
+        plist.getByte( 0 ),
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setInt( 0, 3 );
     CPPUNIT_ASSERT( plist.getInt(0) == 3 );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
-        plist.getLong( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        "Should Throw UnsupportedOperationException",
+        plist.getShort( 0 ),
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setLong( 0, 4L );
     CPPUNIT_ASSERT( plist.getLong(0) == 4L );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getDouble( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setDouble( 0, 2.3 );
     CPPUNIT_ASSERT( plist.getDouble(0) == 2.3 );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getFloat( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setFloat( 0, 3.2f );
     CPPUNIT_ASSERT( plist.getFloat(0) == 3.2f );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
-        plist.getString( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        "Should Throw UnsupportedOperationException",
+        plist.getChar( 0 ),
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setString( 0, "hello" );
     CPPUNIT_ASSERT( plist.getString(0) == "hello" );
@@ -108,9 +112,9 @@
     byteArray.push_back( 'd' );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getByteArray( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.setByteArray( 0, byteArray );
     CPPUNIT_ASSERT( plist.getByteArray(0) == byteArray );
@@ -146,9 +150,9 @@
     plist.add( byteArrayValue );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getInt( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
         "Should Throw IndexOutOfBoundsException",
@@ -176,9 +180,9 @@
     plist.remove( 0 );
 
     CPPUNIT_ASSERT_THROW_MESSAGE(
-        "Should Throw NoSuchElementException",
+        "Should Throw UnsupportedOperationException",
         plist.getInt( 0 ),
-        decaf::lang::exceptions::NoSuchElementException );
+        decaf::lang::exceptions::UnsupportedOperationException );
 
     plist.remove( 0 );
     plist.remove( 0 );