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:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user