From d0135e2a73351bdf397cc8eaf2e1ee98f2c4192b Mon Sep 17 00:00:00 2001 From: eeichinger Date: Fri, 7 Jan 2011 19:40:38 +0000 Subject: [PATCH] fix for SPRNET-1331 --- .../Context/Support/ContextHandler.cs | 2 +- .../Context/Support/WebContextHandler.cs | 16 +++-- .../Context/Support/WebContextHandlerTests.cs | 72 +++++++++++++++++++ .../Support/WebContextHandlerTests.xml | 7 ++ .../Spring.Web.Tests.2010.csproj | 2 + 5 files changed, 94 insertions(+), 5 deletions(-) create mode 100644 test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.cs create mode 100644 test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.xml diff --git a/src/Spring/Spring.Core/Context/Support/ContextHandler.cs b/src/Spring/Spring.Core/Context/Support/ContextHandler.cs index 99a3701f..0c21fed1 100644 --- a/src/Spring/Spring.Core/Context/Support/ContextHandler.cs +++ b/src/Spring/Spring.Core/Context/Support/ContextHandler.cs @@ -288,7 +288,7 @@ namespace Spring.Context.Support // finally create the context instance context = InstantiateContext(parentContext, configContext, contextName, contextType, caseSensitive, resources); // and register with global context registry - if (AutoRegisterWithContextRegistry) + if (AutoRegisterWithContextRegistry && !ContextRegistry.IsContextRegistered(context.Name)) { ContextRegistry.RegisterContext(context); } diff --git a/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs b/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs index 3a696651..a899d031 100644 --- a/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs +++ b/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs @@ -70,7 +70,7 @@ namespace Spring.Context.Support /// protected override string GetContextName(object configContext, XmlElement contextElement) { - string contextName = ((HttpConfigurationContext) configContext).VirtualPath; + string contextName = GetVirtualPath(configContext); // NET 2.0 returns "/" for root path if (contextName == "/") { @@ -104,8 +104,6 @@ namespace Spring.Context.Support string contextName, Type contextType, bool caseSensitive, string[] resources) { - HttpConfigurationContext httpConfigurationContext = (HttpConfigurationContext) configContext; - // ASP.NET may scavenge it's configuration section cache if memory usage is too high. // Thus a handler may be called more than once for the same context. // Return registered context in this case. @@ -122,7 +120,7 @@ namespace Spring.Context.Support } // for rewriting path during context instantiation - string vpath = httpConfigurationContext.VirtualPath; + string vpath = GetVirtualPath(configContext); if (!vpath.EndsWith("/")) vpath = vpath + "/"; using (new HttpContextSwitch(vpath)) { @@ -130,5 +128,15 @@ namespace Spring.Context.Support base.InstantiateContext(parent, configContext, contextName, contextType, caseSensitive, resources); } } + + private String GetVirtualPath(Object configContext) + { + HttpConfigurationContext httpConfigurationContext = (HttpConfigurationContext)configContext; + if (httpConfigurationContext != null) + { + return httpConfigurationContext.VirtualPath; + } + return String.Empty; + } } } \ No newline at end of file diff --git a/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.cs b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.cs new file mode 100644 index 00000000..0c1b00a3 --- /dev/null +++ b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.cs @@ -0,0 +1,72 @@ +#region License + +/* + * Copyright © 2002-2010 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#endregion + +#region Imports + +using System; +using System.IO; +using System.Xml; +using NUnit.Framework; +using Spring.Util; + +#endregion + + + +namespace Spring.Context.Support +{ + public class WebContextHandlerTests + { + [SetUp] + public void SetUp() + { + ContextRegistry.Clear(); + } + + [TearDown] + public void TearDown() + { + ContextRegistry.Clear(); + } + + [Test] + public void should_return_registered_context_with_ContextRegistry() + { + const string xmlData = + @" + + "; + GenericApplicationContext expectedContext = new GenericApplicationContext(null, false, null); + ContextRegistry.RegisterContext(expectedContext); + WebContextHandler webContextHandler = new WebContextHandler(); + + Object actualContext = webContextHandler.Create(null, null, CreateConfigurationElement(xmlData)); + + Assert.AreSame(expectedContext, actualContext); + } + + private XmlNode CreateConfigurationElement(string xmlData) + { + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(new StringReader(xmlData)); + return xmlDoc.DocumentElement; + } + } +} diff --git a/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.xml b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.xml new file mode 100644 index 00000000..e0045462 --- /dev/null +++ b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj b/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj index bbdd070b..8412f186 100644 --- a/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj +++ b/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj @@ -99,6 +99,7 @@ + TestForm.aspx @@ -164,6 +165,7 @@ +