summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorCharles E. Rolke <chug@apache.org>2010-10-27 21:10:46 +0000
committerCharles E. Rolke <chug@apache.org>2010-10-27 21:10:46 +0000
commit1ceb190917514f68141a0c6b521d97b1a1ee12a3 (patch)
treebb492d3dd3547381aee5e24793957e627c813156 /cpp
parent8b9ea977b56f460a8984ab0a698ba5d985e5a053 (diff)
downloadqpid-python-1ceb190917514f68141a0c6b521d97b1a1ee12a3.tar.gz
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. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1028099 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r--cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs4
-rw-r--r--cpp/bindings/qpid/dotnet/src/Message.cpp10
-rw-r--r--cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h14
-rw-r--r--cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp18
4 files changed, 40 insertions, 6 deletions
diff --git a/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs b/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs
index c35ddf12f0..9383d125bd 100644
--- a/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs
+++ b/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs
@@ -79,6 +79,8 @@ namespace Org.Apache.Qpid.Messaging.examples
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.examples
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.
diff --git a/cpp/bindings/qpid/dotnet/src/Message.cpp b/cpp/bindings/qpid/dotnet/src/Message.cpp
index 139ecee165..a554d19370 100644
--- a/cpp/bindings/qpid/dotnet/src/Message.cpp
+++ b/cpp/bindings/qpid/dotnet/src/Message.cpp
@@ -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());
}
diff --git a/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h b/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h
index 47f391fb05..d0f410b912 100644
--- a/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h
+++ b/cpp/bindings/qpid/dotnet/src/QpidTypeCheck.h
@@ -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;
}
};
}}}}
diff --git a/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp b/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
index c4587fe0f7..b515095323 100644
--- a/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
+++ b/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp
@@ -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;