diff options
| author | Charles E. Rolke <chug@apache.org> | 2015-08-05 20:44:18 +0000 |
|---|---|---|
| committer | Charles E. Rolke <chug@apache.org> | 2015-08-05 20:44:18 +0000 |
| commit | ce527fbfdfe99ec862e01073c9b524c186f47e2b (patch) | |
| tree | 3448be7146cd7fc2b5f2ba2a3b0c3746d88b3dbc /qpid/cpp/bindings | |
| parent | a5bbf426a07a13c5a60acc274c08d7fd07a62b7c (diff) | |
| download | qpid-python-ce527fbfdfe99ec862e01073c9b524c186f47e2b.tar.gz | |
QPID-6680: .NET Binding allows UTF-8 string messages - patch from https://github.com/gaborsulyok
This closes #8
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1694323 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/bindings')
4 files changed, 29 insertions, 3 deletions
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp index cbf477bcaa..3409db5a63 100644 --- a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp +++ b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp @@ -441,7 +441,7 @@ namespace Messaging { try
{
- result = gcnew String(nativeObjPtr->getContent().c_str());
+ result = QpidMarshal::ToManaged(nativeObjPtr->getContent().c_str());
}
catch (const ::qpid::types::Exception & error)
{
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h b/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h index 60f40afe04..f4aa342eac 100644 --- a/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h +++ b/qpid/cpp/bindings/qpid/dotnet/src/QpidMarshal.h @@ -60,6 +60,23 @@ public: std::string native((char *) pinnedBuf, mbytes->Length);
return native;
}
+
+
+ static System::String^ ToManaged( std::string native )
+ {
+ if( native.length() == 0 )
+ {
+ return gcnew System::String( "" );
+ }
+
+ pin_ptr<unsigned char> pinnedBuf = (unsigned char *)native.c_str();
+ array<unsigned char>^ mbytes = gcnew array<unsigned char>( (int)native.length() );
+
+ for( unsigned int idx = 0; idx < native.length(); idx++ )
+ mbytes[ idx ] = pinnedBuf[ idx ];
+
+ return Encoding::UTF8->GetString( mbytes );
+ }
};
}}}}
diff --git a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp index 01ec8056c6..4f9a1638ca 100644 --- a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp +++ b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp @@ -280,7 +280,7 @@ namespace Messaging { // create a .NET object and add it to the dictionary.
for (::qpid::types::Variant::Map::const_iterator i = qpidMap.begin(); i != qpidMap.end(); ++i)
{
- System::String ^ elementName = gcnew String(i->first.c_str());
+ System::String ^ elementName = QpidMarshal::ToManaged(i->first.c_str());
::qpid::types::Variant variant = i->second;
dict[elementName] = NativeToManagedObject(variant);
}
@@ -394,7 +394,7 @@ namespace Messaging { case ::qpid::types::VAR_STRING:
{
- System::String ^ elementValue = gcnew System::String(nativeObject.asString().c_str());
+ System::String ^ elementValue = QpidMarshal::ToManaged(nativeObject.asString().c_str());
managedObject = elementValue;
break;
}
diff --git a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs index bf9620d785..eb842bb03b 100644 --- a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs +++ b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs @@ -58,6 +58,15 @@ namespace Org.Apache.Qpid.Messaging.UnitTest }
[Test]
+ public void Utf8MessageStringContent()
+ {
+ Message m2 = new Message("€");
+ string mString = m2.GetContent();
+
+ StringAssert.IsMatch("€", mString);
+ }
+
+ [Test]
public void MessageReceiveContentAsByteArray()
{
Message m2 = new Message("while");
|
