From 3e8527e1604fd2168ee9d20b20cd89c1f96c1bf6 Mon Sep 17 00:00:00 2001 From: sbohlen Date: Thu, 26 Aug 2010 15:49:39 +0000 Subject: [PATCH] SPRNET-1277 Added additional option of as well as as a wellknown namespace since inconsistency between different places in the documentation mentions BOTH yet only was actually a registered wellknown namespace (meaning any attempts to use namespace would only work if the parser for that namespace was explicitly configured by the user) --- .../Factory/Xml/NamespaceParserRegistry.cs | 10 ++- .../Xml/XmlObjectDefinitionReaderTests.cs | 88 ++++++++++++++----- .../Spring.Core.Tests.2003.csproj | 10 +++ .../Spring.Core.Tests.2008.csproj | 12 +++ .../Spring.Core.Tests.2010.csproj | 14 ++- 5 files changed, 108 insertions(+), 26 deletions(-) diff --git a/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs b/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs index 53398c98..dea7e64f 100644 --- a/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs +++ b/src/Spring/Spring.Core/Objects/Factory/Xml/NamespaceParserRegistry.cs @@ -99,6 +99,7 @@ namespace Spring.Objects.Factory.Xml wellknownNamespaceParserTypeNames["http://www.springframework.net/tx"] = "Spring.Transaction.Config.TxNamespaceParser, Spring.Data"; wellknownNamespaceParserTypeNames["http://www.springframework.net/aop"] = "Spring.Aop.Config.AopNamespaceParser, Spring.Aop"; wellknownNamespaceParserTypeNames["http://www.springframework.net/db"] = "Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"; + wellknownNamespaceParserTypeNames["http://www.springframework.net/database"] = "Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"; wellknownNamespaceParserTypeNames["http://www.springframework.net/remoting"] = "Spring.Remoting.Config.RemotingNamespaceParser, Spring.Services"; wellknownNamespaceParserTypeNames["http://www.springframework.net/wcf"] = "Spring.ServiceModel.Config.WcfNamespaceParser, Spring.Services"; wellknownNamespaceParserTypeNames["http://www.springframework.net/nms"] = "Spring.Messaging.Nms.Config.NmsNamespaceParser, Spring.Messaging.Nms"; @@ -120,7 +121,7 @@ namespace Spring.Objects.Factory.Xml schemas = new XmlSchemaCollection(); #else schemas = new XmlSchemaSet(); - schemas.XmlResolver = new XmlResourceUrlResolver(); + schemas.XmlResolver = new XmlResourceUrlResolver(); #endif RegisterParser(new ObjectsNamespaceParser()); @@ -185,6 +186,12 @@ namespace Spring.Objects.Factory.Xml if (ok) { parser = (INamespaceParser)parsers[namespaceURI]; + + //work-around for SPRNET-1277 where we're inconsistent re: exposing /db or /database as the final namespace element + if (parser == null && namespaceURI == "http://www.springframework.net/db") + { + parser = (INamespaceParser)parsers["http://www.springframework.net/database"]; + } } } return parser; @@ -404,6 +411,7 @@ namespace Spring.Objects.Factory.Xml #else XmlTextReader schemaDocument = new XmlTextReader(schema.Uri.AbsoluteUri, schema.InputStream); schemas.Add(namespaceUri, schemaDocument); + #endif } catch (Exception e) diff --git a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectDefinitionReaderTests.cs b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectDefinitionReaderTests.cs index 55778b66..98851191 100644 --- a/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectDefinitionReaderTests.cs +++ b/test/Spring/Spring.Core.Tests/Objects/Factory/Xml/XmlObjectDefinitionReaderTests.cs @@ -68,14 +68,53 @@ namespace Spring.Objects.Factory.Xml new DefaultListableObjectFactory()); reader.LoadObjectDefinitions(new ReadOnlyXmlTestResource("/dev/null")); } +#if NET_2_0 [Test] + public void AutoRegistersAllWellknownNamespaceParsers_Common() + { + string[] namespaces = { + "http://www.springframework.net/tx", + "http://www.springframework.net/aop", + "http://www.springframework.net/db", + "http://www.springframework.net/database", + "http://www.springframework.net/remoting", + "http://www.springframework.net/nms", + "http://www.springframework.net/validation", + "http://www.springframework.net/nvelocity" }; + + foreach (string ns in namespaces) + { + Assert.IsNotNull(NamespaceParserRegistry.GetParser(ns), + string.Format("Parser for Namespace {0} could not be auto-registered.", ns)); + } + } + +#endif + +#if NET_3_0 + + [Test] + public void AutoRegistersAllWellknownNamespaceParsers_3_0() + { + string[] namespaces = { "http://www.springframework.net/wcf" }; + + foreach (string ns in namespaces) + { + Assert.IsNotNull(NamespaceParserRegistry.GetParser(ns), + string.Format("Parser for Namespace {0} could not be auto-registered.", ns)); + } + } +#endif + + [Test] + [Ignore] //this test cannot co-exist with AutoRegistersAllWellknownNamespaceParsers b/c that test will have already loaded the Spring.Data ass'y public void AutoRegistersWellknownNamespaceParser() { try { Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); - foreach(Assembly assembly in loadedAssemblies) + foreach (Assembly assembly in loadedAssemblies) { if (assembly.GetName(true).Name.StartsWith("Spring.Data")) { @@ -89,17 +128,17 @@ namespace Spring.Objects.Factory.Xml XmlObjectDefinitionReader reader = new XmlObjectDefinitionReader(of); reader.LoadObjectDefinitions(new StringResource( @" - - - -")); + + + + ")); object apc = of.GetObject(AopNamespaceUtils.AUTO_PROXY_CREATOR_OBJECT_NAME); Assert.NotNull(apc); } finally { - NamespaceParserRegistry.Reset(); + NamespaceParserRegistry.Reset(); } } @@ -135,7 +174,7 @@ namespace Spring.Objects.Factory.Xml ")); - Assert.AreEqual(" \n\r\t", ((TestObject) of.GetObject("test")).Name); + Assert.AreEqual(" \n\r\t", ((TestObject)of.GetObject("test")).Name); } [Test] @@ -157,9 +196,9 @@ namespace Spring.Objects.Factory.Xml ")); - Assert.AreEqual(string.Empty, ((TestObject) of.GetObject("test2")).Name); - Assert.AreEqual(string.Empty, ((TestObject) of.GetObject("test3")).Name); - Assert.AreEqual(string.Empty, ((TestObject) of.GetObject("test4")).Name); + Assert.AreEqual(string.Empty, ((TestObject)of.GetObject("test2")).Name); + Assert.AreEqual(string.Empty, ((TestObject)of.GetObject("test3")).Name); + Assert.AreEqual(string.Empty, ((TestObject)of.GetObject("test4")).Name); } @@ -176,13 +215,13 @@ namespace Spring.Objects.Factory.Xml ")); - Assert.AreEqual(" \n\r\t", ((TestObject) of.GetObject("test4")).Name); + Assert.AreEqual(" \n\r\t", ((TestObject)of.GetObject("test4")).Name); } [Test] public void ThrowsObjectDefinitionStoreExceptionOnValidationError() { - try + try { DefaultListableObjectFactory of = new DefaultListableObjectFactory(); XmlObjectDefinitionReader reader = new XmlObjectDefinitionReader(of); @@ -191,12 +230,12 @@ namespace Spring.Objects.Factory.Xml - ")); + ")); Assert.Fail(); } - catch(ObjectDefinitionStoreException ex) + catch (ObjectDefinitionStoreException ex) { - Assert.IsTrue( ex.Message.IndexOf("Line 3 in XML document from violates the schema.") > -1); + Assert.IsTrue(ex.Message.IndexOf("Line 3 in XML document from violates the schema.") > -1); } } @@ -215,9 +254,9 @@ namespace Spring.Objects.Factory.Xml ")); Assert.Fail(); } - catch(ObjectDefinitionStoreException ex) + catch (ObjectDefinitionStoreException ex) { - Assert.IsTrue( ex.Message.IndexOf("Line 4 in XML document from is not well formed.") > -1); + Assert.IsTrue(ex.Message.IndexOf("Line 4 in XML document from is not well formed.") > -1); } } @@ -225,8 +264,9 @@ namespace Spring.Objects.Factory.Xml private class TestXmlObjectDefinitionReader : XmlObjectDefinitionReader { - public TestXmlObjectDefinitionReader(IObjectDefinitionRegistry registry) : base(registry) - {} + public TestXmlObjectDefinitionReader(IObjectDefinitionRegistry registry) + : base(registry) + { } private class ThrowingObjectDefinitionDocumentReader : IObjectDefinitionDocumentReader { @@ -256,7 +296,7 @@ namespace Spring.Objects.Factory.Xml -")); +")); } [Test] @@ -278,7 +318,7 @@ namespace Spring.Objects.Factory.Xml ")); - TestObject test2 = (TestObject) of.GetObject("test2"); + TestObject test2 = (TestObject)of.GetObject("test2"); Assert.AreEqual(typeof(TestObject), test2.GetType()); Assert.IsNotNull(test2.Sibling); } @@ -305,12 +345,12 @@ namespace Spring.Objects.Factory.Xml /> ")); - AbstractObjectDefinition od1 = (AbstractObjectDefinition) of.GetObjectDefinition("test1"); + AbstractObjectDefinition od1 = (AbstractObjectDefinition)of.GetObjectDefinition("test1"); Assert.IsFalse(od1.IsSingleton); Assert.IsTrue(od1.IsAbstract); Assert.IsFalse(od1.IsLazyInit); - AbstractObjectDefinition od2 = (AbstractObjectDefinition) of.GetObjectDefinition("test2"); + AbstractObjectDefinition od2 = (AbstractObjectDefinition)of.GetObjectDefinition("test2"); Assert.IsTrue(od2.IsSingleton); Assert.IsFalse(od2.IsAbstract); Assert.IsTrue(od2.IsLazyInit); diff --git a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj index e7083e5d..f3028cf7 100644 --- a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj +++ b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj @@ -111,6 +111,16 @@ Name = "Spring.Core.2003" Project = "{710961A3-0DF4-49E4-A26E-F5B9C044AC84}" Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" + /> + + {AE00E5AB-C39A-436F-86D2-33BFE33E2E40} Spring.Data.2008 + + {AEB1578C-9018-4D49-B440-789F38DD2F29} + Spring.Messaging.Nms.2008 + + + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Spring.Services.2008 + + + {BF3AB954-8375-407C-9E98-4C51D8072784} + Spring.Template.Velocity.2008 + diff --git a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj index 187ab6b4..1f0aea1f 100644 --- a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj +++ b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj @@ -37,7 +37,7 @@ false - TRACE;DEBUG;NET_2_0;NET_4_0;DEBUG_DYNAMIC + TRACE;DEBUG;NET_2_0;NET_3_0;NET_4_0;DEBUG_DYNAMIC true @@ -926,6 +926,18 @@ {AE00E5AB-C39A-436F-86D2-33BFE33E2E40} Spring.Data.2010 + + {AEB1578C-9018-4D49-B440-789F38DD2F29} + Spring.Messaging.Nms.2010 + + + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Spring.Services.2010 + + + {BF3AB954-8375-407C-9E98-4C51D8072784} + Spring.Template.Velocity.2010 +