SPRNET-1277

Added additional option of <database: ... /> as well as <db: ... /> as a wellknown namespace since inconsistency between different places in the documentation mentions BOTH yet only <db: ... /> was actually a registered wellknown namespace (meaning any attempts to use <database:  ... /> namespace would only work if the parser for that namespace was explicitly configured by the user)
This commit is contained in:
sbohlen
2010-08-26 15:49:39 +00:00
parent e12262992f
commit 3e8527e160
5 changed files with 108 additions and 26 deletions

View File

@@ -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)

View File

@@ -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(
@"<?xml version='1.0' encoding='UTF-8' ?>
<objects xmlns='http://www.springframework.net'
xmlns:tx='http://www.springframework.net/tx'>
<tx:attribute-driven />
</objects>
"));
<objects xmlns='http://www.springframework.net'
xmlns:tx='http://www.springframework.net/tx'>
<tx:attribute-driven />
</objects>
"));
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
</object>
</objects>
"));
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
</object>
</objects>
"));
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
</object>
</objects>
"));
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
<objects xmlns='http://www.springframework.net'>
<INVALIDELEMENT id='test2' type='Spring.Objects.TestObject, Spring.Core.Tests' />
</objects>
"));
"));
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
<objects xmlns='http://www.springframework.net'>
<object id='test2' type='Spring.Objects.TestObject, Spring.Core.Tests' />
</objects>
"));
"));
}
[Test]
@@ -278,7 +318,7 @@ namespace Spring.Objects.Factory.Xml
</core:object>
</core:objects>
"));
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
/>
</objects>
"));
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);

View File

@@ -111,6 +111,16 @@
Name = "Spring.Core.2003"
Project = "{710961A3-0DF4-49E4-A26E-F5B9C044AC84}"
Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
/>
<Reference
Name = "Spring.Messaging.Nms.2003"
Project = "{C17B27C2-4343-45BA-9A21-73C3CEC19BAD}"
Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
/>
<Reference
Name = "Spring.Services.2003"
Project = "{B58E34CF-6E70-481D-AC87-1BC2D13C21FB}"
Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
/>
<Reference
Name = "Rhino.Mocks"

View File

@@ -924,6 +924,18 @@
<Project>{AE00E5AB-C39A-436F-86D2-33BFE33E2E40}</Project>
<Name>Spring.Data.2008</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Spring\Spring.Messaging.Nms\Spring.Messaging.Nms.2008.csproj">
<Project>{AEB1578C-9018-4D49-B440-789F38DD2F29}</Project>
<Name>Spring.Messaging.Nms.2008</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Spring\Spring.Services\Spring.Services.2008.csproj">
<Project>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Project>
<Name>Spring.Services.2008</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Spring\Spring.Template.Velocity\Spring.Template.Velocity.2008.csproj">
<Project>{BF3AB954-8375-407C-9E98-4C51D8072784}</Project>
<Name>Spring.Template.Velocity.2008</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>

View File

@@ -37,7 +37,7 @@
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;DEBUG;NET_2_0;NET_4_0;DEBUG_DYNAMIC</DefineConstants>
<DefineConstants>TRACE;DEBUG;NET_2_0;NET_3_0;NET_4_0;DEBUG_DYNAMIC</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
@@ -926,6 +926,18 @@
<Project>{AE00E5AB-C39A-436F-86D2-33BFE33E2E40}</Project>
<Name>Spring.Data.2010</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Spring\Spring.Messaging.Nms\Spring.Messaging.Nms.2010.csproj">
<Project>{AEB1578C-9018-4D49-B440-789F38DD2F29}</Project>
<Name>Spring.Messaging.Nms.2010</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Spring\Spring.Services\Spring.Services.2010.csproj">
<Project>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Project>
<Name>Spring.Services.2010</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\src\Spring\Spring.Template.Velocity\Spring.Template.Velocity.2010.csproj">
<Project>{BF3AB954-8375-407C-9E98-4C51D8072784}</Project>
<Name>Spring.Template.Velocity.2010</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>