Recently I updated Rhino Service Bus code and suddenly my code
failed :-D After investigating a bit, I found out it is broken
because of this commit:
Revision: 2168
Author: ayenderahien
Date: 1:26:43 AM, Tuesday, June 02, 2009
Message:
Patch from João P. Bragança - for Version Information Included
with Generic Types
----
Modified : /trunk/esb/Rhino.ServiceBus/Impl/DefaultReflection.cs
Modified : /trunk/esb/Rhino.ServiceBus.Tests/
DefaultReflectionTests.cs
The case is simple: I have a SerializableDictionary which is defined
in the "AAAAA.Common" assembly.
defaultReflection.GetAssemblyQualifiedNameWithoutVersion(typeof
(SerializableDictionary<string,string>)) returns:
"System.Collections.SerializableDictionary`2[[string],[string]],
AAAAA.Common"
but the correct one should be:
"System.Collections.SerializableDictionary`2[[System.String],
[System.String]], AAAAA.Common"
You can use Type.GetType() to test: the former returns null while the
latter returns the correct Type object.
Below is the quick fix I made which work for me. However, as I pointed
out in
Gets_assembly_name_without_version_for_generic_types_with_more_than_one_type_parameter_in_local_assemblies
test case, this is not a complete fix.
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------//
Index: D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Convertors/ThrowingWireEcryptedStringConvertor.cs
===================================================================
--- D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Convertors/ThrowingWireEcryptedStringConvertor.cs
(revision 2203)
+++ D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Convertors/ThrowingWireEcryptedStringConvertor.cs
(working copy)
@@ -17,7 +17,7 @@
public WireEcryptedString FromElement(XElement element)
{
- var value = element.Element(XName.Get("Value",
"string"));
+ var value = element.Element(XName.Get("Value",
"System.String"));
if(value==null)
throw new SerializationException("<WireEcryptedString>
did not have mandatory <Value> element");
return new WireEcryptedString
Index: D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Convertors/WireEcryptedStringConvertor.cs
===================================================================
--- D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Convertors/WireEcryptedStringConvertor.cs (revision
2203)
+++ D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Convertors/WireEcryptedStringConvertor.cs (working
copy)
@@ -24,7 +24,7 @@
public WireEcryptedString FromElement(XElement element)
{
- var value = element.Element(XName.Get("Value","string"));
+ var value = element.Element(XName.Get
("Value","System.String"));
if(value==null)
throw new ArgumentException("element must contain
<value> element");
Index: D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Impl/DefaultReflection.cs
===================================================================
--- D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Impl/DefaultReflection.cs (revision 2203)
+++ D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus/Impl/DefaultReflection.cs (working copy)
@@ -29,20 +29,20 @@
wellKnownTypeNameToType = new Dictionary<string, Type>();
typeToWellKnownTypeName = new Dictionary<Type, string>
{
- {typeof (string), "string"},
- {typeof (int), "int"},
- {typeof (byte), "byte"},
- {typeof (bool), "bool"},
- {typeof (DateTime), "datetime"},
- {typeof (TimeSpan), "timespan"},
- {typeof (decimal), "decimal"},
- {typeof (float), "float"},
- {typeof (double), "double"},
- {typeof (char), "char"},
- {typeof (Guid), "guid"},
- {typeof (Uri), "uri"},
- {typeof (short), "short"},
- {typeof (long), "long"},
+ {typeof (string), typeof (string).FullName},
+ {typeof (int), typeof (int).FullName},
+ {typeof (byte), typeof (byte).FullName},
+ {typeof (bool), typeof (bool).FullName},
+ {typeof (DateTime), typeof (DateTime).FullName},
+ {typeof (TimeSpan), typeof (TimeSpan).FullName},
+ {typeof (decimal), typeof (decimal).FullName},
+ {typeof (float), typeof (float).FullName},
+ {typeof (double), typeof (double).FullName},
+ {typeof (char), typeof (char).FullName},
+ {typeof (Guid), typeof (Guid).FullName},
+ {typeof (Uri), typeof (Uri).FullName},
+ {typeof (short), typeof (short).FullName},
+ {typeof (long), typeof (long).FullName},
{typeof(byte[]), "binary"}
};
foreach (var pair in typeToWellKnownTypeName)
Index: D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus.Tests/DefaultReflectionTests.cs
===================================================================
--- D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus.Tests/DefaultReflectionTests.cs (revision 2203)
+++ D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus.Tests/DefaultReflectionTests.cs (working copy)
@@ -78,6 +78,7 @@
var output =
reflection.GetAssemblyQualifiedNameWithoutVersion(typeof
(GenericConsumer<SomeMsg>));
Assert.DoesNotContain
("Rhino.ServiceBus.Tests,Version=", output.Replace(" ", ""));
+ Assert.NotNull(Type.GetType(output)); // still
fail!!!
}
[Fact]
public void
Gets_assembly_name_with_more_than_one_type_parameter()
@@ -86,7 +87,18 @@
Assert.Equal(
typeof(Dictionary<object,
object>).AssemblyQualifiedName,
name);
+ var type = Type.GetType(name);
}
+
+ [Fact]
+ public void
Gets_assembly_name_without_version_for_generic_types_with_more_than_one_type_parameter_in_local_assemblies
()
+ {
+ string name =
reflection.GetAssemblyQualifiedNameWithoutVersion(typeof
(TestDictionary<string, string>));
+ var type = Type.GetType(name);
+ Assert.NotNull(type); // fail if not apply my fix!!!
+ }
+
+
public class SomeMsg{}
public class SomeMsgConsumer:GenericConsumer<SomeMsg>{}
public class GenericConsumer<T>:ConsumerOf<T>
@@ -148,6 +160,10 @@
}
}
}
+ public class TestDictionary<T, TK> : Dictionary<T, TK>
+ {
+ }
+
}
Index: D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus.Tests/When_Security_Is_Specified_In_Config.cs
===================================================================
--- D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus.Tests/When_Security_Is_Specified_In_Config.cs
(revision 2203)
+++ D:/CatGlobe/SOURCES/CatTask-references/Rhino tools/esb/
Rhino.ServiceBus.Tests/When_Security_Is_Specified_In_Config.cs
(working copy)
@@ -54,7 +54,7 @@
public const string encryptedMessage =
@"<?xml version=""1.0"" encoding=""utf-8""?>
-<esb:messages xmlns:esb=""http://servicebus.hibernatingrhinos.com/
2008/12/20/esb""
xmlns:tests.classwithsecretfield=""Rhino.ServiceBus.Tests.When_Security_Is_Specified_In_Config
+ClassWithSecretField, Rhino.ServiceBus.Tests""
xmlns:datastructures.wireecryptedstring=""Rhino.ServiceBus.DataStructures.WireEcryptedString,
Rhino.ServiceBus"" xmlns:string=""string"">
+<esb:messages xmlns:esb=""http://servicebus.hibernatingrhinos.com/
2008/12/20/esb""
xmlns:tests.classwithsecretfield=""Rhino.ServiceBus.Tests.When_Security_Is_Specified_In_Config
+ClassWithSecretField, Rhino.ServiceBus.Tests""
xmlns:datastructures.wireecryptedstring=""Rhino.ServiceBus.DataStructures.WireEcryptedString,
Rhino.ServiceBus"" xmlns:string=""System.String"">
<tests.classwithsecretfield:ClassWithSecretField>
<datastructures.wireecryptedstring:ShouldBeEncrypted>
<string:Value
iv=""0yL9+t0uyDy9NeP7CU1Wow=="">q9a10IFuRxrzFoZewfdOyg==</
string:Value>
@@ -84,7 +84,7 @@
.Element(XName.Get("messages", "http://
servicebus.hibernatingrhinos.com/2008/12/20/esb"))
.Element(XName.Get
("ClassWithSecretField","Rhino.ServiceBus.Tests.When_Security_Is_Specified_In_Config
+ClassWithSecretField, Rhino.ServiceBus.Tests"))
.Element(XName.Get
("ShouldBeEncrypted","Rhino.ServiceBus.DataStructures.WireEcryptedString,
Rhino.ServiceBus"))
- .Element(XName.Get("Value","string"))
+ .Element(XName.Get("Value","System.String"))
.Value;
Assert.NotEqual("abc", actual);
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Rhino Tools Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---