diff options
author | Charles E. Rolke <chug@apache.org> | 2010-10-27 21:10:46 +0000 |
---|---|---|
committer | Charles E. Rolke <chug@apache.org> | 2010-10-27 21:10:46 +0000 |
commit | 1ceb190917514f68141a0c6b521d97b1a1ee12a3 (patch) | |
tree | bb492d3dd3547381aee5e24793957e627c813156 /cpp | |
parent | 8b9ea977b56f460a8984ab0a698ba5d985e5a053 (diff) | |
download | qpid-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')
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;
|