You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2010/10/27 23:10:46 UTC

svn commit: r1028099 - in /qpid/trunk/qpid/cpp/bindings/qpid/dotnet: examples/csharp.map.sender/csharp.map.sender.cs src/Message.cpp src/QpidTypeCheck.h src/TypeTranslator.cpp

Author: chug
Date: Wed Oct 27 21:10:46 2010
New Revision: 1028099

URL: http://svn.apache.org/viewvc?rev=1028099&view=rev
Log:
QPID-2915 Qpid Cpp Messaging .NET Binding does not properly handle Qpid type VAR_VOID

* In C# map sender example, send null list and map values.
* In Message ToString() display "" for null list and map values.
* Do not dereference null values when determining their type.
* Properly marshal native Qpid VAR_VOID data type.

Modified:
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs?rev=1028099&r1=1028098&r2=1028099&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs Wed Oct 27 21:10:46 2010
@@ -79,6 +79,8 @@ namespace Org.Apache.Qpid.Messaging.exam
             colors.Add("red");
             colors.Add("green");
             colors.Add("white");
+            // list contains null value
+            colors.Add(null);
             content["colorsList"] = colors;
 
             // add one of each supported amqp data type
@@ -118,6 +120,8 @@ namespace Org.Apache.Qpid.Messaging.exam
             Guid myGuid = new Guid("000102030405060708090a0b0c0d0e0f");
             content["myGuid"] = myGuid;
 
+            content["myNull"] = null;
+
             //
             // Construct a message with the map content and send it synchronously
             // via the sender.

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp?rev=1028099&r1=1028098&r2=1028099&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp Wed Oct 27 21:10:46 2010
@@ -277,6 +277,12 @@ namespace Messaging {
 					ListAsString((System::Collections::ObjectModel::Collection<
 							System::Object^> ^)kvp.Value));
             }
+            else if (nullptr == kvp.Value)
+            {
+                sb->AppendFormat(
+					"{0}=", 
+					kvp.Key);
+            }
             else
                 sb->AppendFormat("{0}={1}", kvp.Key, kvp.Value);
         }
@@ -310,6 +316,10 @@ namespace Messaging {
                 sb->Append(ListAsString((System::Collections::ObjectModel::Collection<
                                 System::Object^> ^)obj));
             }
+            else if (nullptr == obj)
+            {
+                // no display for null objects
+            }
             else
                 sb->Append(obj->ToString());
         }

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h?rev=1028099&r1=1028098&r2=1028099&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h Wed Oct 27 21:10:46 2010
@@ -68,13 +68,19 @@ namespace Messaging {
     public:
 
         static bool ObjectIsMap (System::Object ^ theValue)
-        { 
-            return (*theValue).GetType() == QpidTypeCheckConstants::mapTypeP;
+        {
+            if (nullptr == theValue)
+                return false;
+            else
+                return (*theValue).GetType() == QpidTypeCheckConstants::mapTypeP;
         }
 
         static bool ObjectIsList(System::Object ^ theValue)
-        { 
-            return (*theValue).GetType() == QpidTypeCheckConstants::listTypeP;
+        {
+            if (nullptr == theValue)
+                return false;
+            else
+                return (*theValue).GetType() == QpidTypeCheckConstants::listTypeP;
         }
     };
 }}}}

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp?rev=1028099&r1=1028098&r2=1028099&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp Wed Oct 27 21:10:46 2010
@@ -91,7 +91,10 @@ namespace Messaging {
             {
                 // Add a simple native type to map
                 ::qpid::types::Variant entryValue;
-                ManagedToNativeObject(kvp.Value, entryValue);
+                if (nullptr != kvp.Value)
+                {
+                    ManagedToNativeObject(kvp.Value, entryValue);
+                }
                 std::string entryName = QpidMarshal::ToNative(kvp.Key);
                 qpidMap.insert(std::make_pair<std::string, ::qpid::types::Variant>(entryName, entryValue));
             }
@@ -144,7 +147,10 @@ namespace Messaging {
             {
                 // Add a simple native type to list
                 ::qpid::types::Variant entryValue;
-                ManagedToNativeObject(listObj, entryValue);
+                if (nullptr != listObj)
+                {
+                    ManagedToNativeObject(listObj, entryValue);
+                }
                 qpidList.push_back(entryValue);
             }
         }
@@ -265,6 +271,10 @@ namespace Messaging {
 
             switch (vType)
             {
+            case ::qpid::types::VAR_VOID:
+                dict[elementName] = nullptr;
+                break;
+
             case ::qpid::types::VAR_BOOL:
                 dict[elementName] = variant.asBool();
                 break;
@@ -358,6 +368,10 @@ namespace Messaging {
 
             switch (vType)
             {
+            case ::qpid::types::VAR_VOID:
+                (*managedList).Add(nullptr);
+                break;
+
             case ::qpid::types::VAR_BOOL:
                 (*managedList).Add(variant.asBool());
                 break;



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org