alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Spring Framework example source code file (PropertyResourceConfigurerTests.java)

This example Spring Framework source code file (PropertyResourceConfigurerTests.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Spring Framework tags/keywords

beandefinitionstoreexception, beaninitializationexception, indexedtestbean, io, mutablepropertyvalues, mutablepropertyvalues, preferences, properties, properties, runtimebeanreference, should, staticapplicationcontext, staticapplicationcontext, string, testbean, testbean, util

The Spring Framework PropertyResourceConfigurerTests.java source code

/*
 * Copyright 2002-2008 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.
 */

package org.springframework.beans.factory.config;

import java.io.FileNotFoundException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.prefs.Preferences;

import junit.framework.TestCase;

import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.beans.IndexedTestBean;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.TestBean;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.support.ChildBeanDefinition;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.support.ManagedSet;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.core.JdkVersion;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.util.StringUtils;

/**
 * @author Juergen Hoeller
 * @since 02.10.2003
 */
public class PropertyResourceConfigurerTests extends TestCase {

	public void testPropertyOverrideConfigurer() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb1", TestBean.class);
		ac.registerSingleton("tb2", TestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb1.age=99\ntb2.name=test");
		ac.registerSingleton("configurer1", PropertyOverrideConfigurer.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb2.age=99\ntb2.name=test2");
		pvs.addPropertyValue("order", "0");
		ac.registerSingleton("configurer2", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		TestBean tb1 = (TestBean) ac.getBean("tb1");
		TestBean tb2 = (TestBean) ac.getBean("tb2");
		assertEquals(99, tb1.getAge());
		assertEquals(99, tb2.getAge());
		assertEquals(null, tb1.getName());
		assertEquals("test", tb2.getName());
	}

	public void testPropertyOverrideConfigurerWithNestedProperty() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb", IndexedTestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb.array[0].age=99\ntb.list[1].name=test");
		ac.registerSingleton("configurer", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		IndexedTestBean tb = (IndexedTestBean) ac.getBean("tb");
		assertEquals(99, tb.getArray()[0].getAge());
		assertEquals("test", ((TestBean) tb.getList().get(1)).getName());
	}

	public void testPropertyOverrideConfigurerWithNestedPropertyAndDotInBeanName() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("my.tb", IndexedTestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "my.tb_array[0].age=99\nmy.tb_list[1].name=test");
		pvs.addPropertyValue("beanNameSeparator", "_");
		ac.registerSingleton("configurer", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		IndexedTestBean tb = (IndexedTestBean) ac.getBean("my.tb");
		assertEquals(99, tb.getArray()[0].getAge());
		assertEquals("test", ((TestBean) tb.getList().get(1)).getName());
	}

	public void testPropertyOverrideConfigurerWithNestedMapPropertyAndDotInMapKey() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb", IndexedTestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb.map[key1]=99\ntb.map[key2.ext]=test");
		ac.registerSingleton("configurer", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		IndexedTestBean tb = (IndexedTestBean) ac.getBean("tb");
		assertEquals("99", tb.getMap().get("key1"));
		assertEquals("test", tb.getMap().get("key2.ext"));
	}

	public void testPropertyOverrideConfigurerWithJavaMailProperties() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb", JavaMailSenderImpl.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb.javaMailProperties[mail.smtp.auth]=true");
		ac.registerSingleton("configurer", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		JavaMailSenderImpl tb = (JavaMailSenderImpl) ac.getBean("tb");
		assertEquals("true", tb.getJavaMailProperties().getProperty("mail.smtp.auth"));
	}

	public void testPropertyOverrideConfigurerWithPropertiesFile() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb", IndexedTestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("location", "classpath:org/springframework/beans/factory/config/test.properties");
		ac.registerSingleton("configurer", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		IndexedTestBean tb = (IndexedTestBean) ac.getBean("tb");
		assertEquals(99, tb.getArray()[0].getAge());
		assertEquals("test", ((TestBean) tb.getList().get(1)).getName());
	}

	public void testPropertyOverrideConfigurerWithInvalidPropertiesFile() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb", IndexedTestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("locations",
				new String[] {"classpath:org/springframework/beans/factory/config/test.properties",
											"classpath:org/springframework/beans/factory/config/xtest.properties"});
		pvs.addPropertyValue("ignoreResourceNotFound", Boolean.TRUE);
		ac.registerSingleton("configurer", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		IndexedTestBean tb = (IndexedTestBean) ac.getBean("tb");
		assertEquals(99, tb.getArray()[0].getAge());
		assertEquals("test", ((TestBean) tb.getList().get(1)).getName());
	}

	public void testPropertyOverrideConfigurerWithPropertiesXmlFile() {
		// ignore for JDK < 1.5
		if (JdkVersion.getMajorJavaVersion() < JdkVersion.JAVA_15) {
			return;
		}

		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb", IndexedTestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("location", "classpath:org/springframework/beans/factory/config/test-properties.xml");
		ac.registerSingleton("configurer", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		IndexedTestBean tb = (IndexedTestBean) ac.getBean("tb");
		assertEquals(99, tb.getArray()[0].getAge());
		assertEquals("test", ((TestBean) tb.getList().get(1)).getName());
	}

	public void testPropertyOverrideConfigurerWithConvertProperties() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb", IndexedTestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb.array[0].name=99\ntb.list[1].name=test");
		ac.registerSingleton("configurer", ConvertingOverrideConfigurer.class, pvs);
		ac.refresh();
		IndexedTestBean tb = (IndexedTestBean) ac.getBean("tb");
		assertEquals("X99", tb.getArray()[0].getName());
		assertEquals("Xtest", ((TestBean) tb.getList().get(1)).getName());
	}

	public void testPropertyOverrideConfigurerWithInvalidKey() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb1", TestBean.class);
		ac.registerSingleton("tb2", TestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "argh=hgra\ntb1.age=99\ntb2.name=test");
		pvs.addPropertyValue("ignoreInvalidKeys", "true");
		ac.registerSingleton("configurer1", PropertyOverrideConfigurer.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb2.age=99\ntb2.name=test2");
		pvs.addPropertyValue("order", "0");
		ac.registerSingleton("configurer2", PropertyOverrideConfigurer.class, pvs);
		try {
			ac.refresh();
		}
		catch (BeanInitializationException ex) {
			assertTrue(ex.getMessage().toLowerCase().indexOf("argh") != -1);
		}
	}

	public void testPropertyOverrideConfigurerWithIgnoreInvalidKeys() {
		StaticApplicationContext ac = new StaticApplicationContext();
		ac.registerSingleton("tb1", TestBean.class);
		ac.registerSingleton("tb2", TestBean.class);
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "argh=hgra\ntb1.age=99\ntb2.name=test");
		pvs.addPropertyValue("ignoreInvalidKeys", "true");
		ac.registerSingleton("configurer1", PropertyOverrideConfigurer.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "tb2.age=99\ntb2.name=test2");
		pvs.addPropertyValue("order", "0");
		ac.registerSingleton("configurer2", PropertyOverrideConfigurer.class, pvs);
		ac.refresh();
		TestBean tb1 = (TestBean) ac.getBean("tb1");
		TestBean tb2 = (TestBean) ac.getBean("tb2");
		assertEquals(99, tb1.getAge());
		assertEquals(99, tb2.getAge());
		assertEquals(null, tb1.getName());
		assertEquals("test", tb2.getName());
	}

	public void testPropertyPlaceholderConfigurer() {
		doTestPropertyPlaceholderConfigurer(false);
	}

	public void testPropertyPlaceholderConfigurerWithParentChildSeparation() {
		doTestPropertyPlaceholderConfigurer(true);
	}

	private void doTestPropertyPlaceholderConfigurer(boolean parentChildSeparation) {
		StaticApplicationContext ac = new StaticApplicationContext();

		if (parentChildSeparation) {
			MutablePropertyValues pvs1 = new MutablePropertyValues();
			pvs1.addPropertyValue("age", "${age}");
			MutablePropertyValues pvs2 = new MutablePropertyValues();
			pvs2.addPropertyValue("name", "name${var}${var}${");
			pvs2.addPropertyValue("spouse", new RuntimeBeanReference("${ref}"));

			RootBeanDefinition parent = new RootBeanDefinition(TestBean.class, pvs1);
			ChildBeanDefinition bd = new ChildBeanDefinition("${parent}", pvs2);
			ac.getDefaultListableBeanFactory().registerBeanDefinition("parent1", parent);
			ac.getDefaultListableBeanFactory().registerBeanDefinition("tb1", bd);
		}
		else {
			MutablePropertyValues pvs = new MutablePropertyValues();
			pvs.addPropertyValue("age", "${age}");
			pvs.addPropertyValue("name", "name${var}${var}${");
			pvs.addPropertyValue("spouse", new RuntimeBeanReference("${ref}"));
			RootBeanDefinition bd = new RootBeanDefinition(TestBean.class, pvs);
			ac.getDefaultListableBeanFactory().registerBeanDefinition("tb1", bd);
		}

		ConstructorArgumentValues cas = new ConstructorArgumentValues();
		cas.addIndexedArgumentValue(1, "${age}");
		cas.addGenericArgumentValue("${var}name${age}");

		MutablePropertyValues pvs = new MutablePropertyValues();
		List friends = new ManagedList();
		friends.add("na${age}me");
		friends.add(new RuntimeBeanReference("${ref}"));
		pvs.addPropertyValue("friends", friends);

		Set someSet = new ManagedSet();
		someSet.add("na${age}me");
		someSet.add(new RuntimeBeanReference("${ref}"));
		someSet.add(new TypedStringValue("${age}", Integer.class));
		pvs.addPropertyValue("someSet", someSet);

		Map someMap = new ManagedMap();
		someMap.put("key1", new RuntimeBeanReference("${ref}"));
		someMap.put("key2", "${age}name");
		MutablePropertyValues innerPvs = new MutablePropertyValues();
		innerPvs.addPropertyValue("touchy", "${os.name}");
		someMap.put("key3", new RootBeanDefinition(TestBean.class, innerPvs));
		MutablePropertyValues innerPvs2 = new MutablePropertyValues(innerPvs);
		someMap.put("${key4}", new BeanDefinitionHolder(new ChildBeanDefinition("tb1", innerPvs2), "child"));
		pvs.addPropertyValue("someMap", someMap);

		RootBeanDefinition bd = new RootBeanDefinition(TestBean.class, cas, pvs);
		ac.getDefaultListableBeanFactory().registerBeanDefinition("tb2", bd);

		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "age=98\nvar=${m}var\nref=tb2\nm=my\nkey4=mykey4\nparent=parent1");
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();

		TestBean tb1 = (TestBean) ac.getBean("tb1");
		TestBean tb2 = (TestBean) ac.getBean("tb2");
		assertEquals(98, tb1.getAge());
		assertEquals(98, tb2.getAge());
		assertEquals("namemyvarmyvar${", tb1.getName());
		assertEquals("myvarname98", tb2.getName());
		assertEquals(tb2, tb1.getSpouse());
		assertEquals(2, tb2.getFriends().size());
		assertEquals("na98me", tb2.getFriends().iterator().next());
		assertEquals(tb2, tb2.getFriends().toArray()[1]);
		assertEquals(3, tb2.getSomeSet().size());
		assertTrue(tb2.getSomeSet().contains("na98me"));
		assertTrue(tb2.getSomeSet().contains(tb2));
		assertTrue(tb2.getSomeSet().contains(new Integer(98)));
		assertEquals(4, tb2.getSomeMap().size());
		assertEquals(tb2, tb2.getSomeMap().get("key1"));
		assertEquals("98name", tb2.getSomeMap().get("key2"));
		TestBean inner1 = (TestBean) tb2.getSomeMap().get("key3");
		TestBean inner2 = (TestBean) tb2.getSomeMap().get("mykey4");
		assertEquals(0, inner1.getAge());
		assertEquals(null, inner1.getName());
		assertEquals(System.getProperty("os.name"), inner1.getTouchy());
		assertEquals(98, inner2.getAge());
		assertEquals("namemyvarmyvar${", inner2.getName());
		assertEquals(System.getProperty("os.name"), inner2.getTouchy());
	}

	public void testPropertyPlaceholderConfigurerWithSystemPropertyFallback() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("touchy", "${os.name}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals(System.getProperty("os.name"), tb.getTouchy());
	}

	public void testPropertyPlaceholderConfigurerWithSystemPropertyNotUsed() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("touchy", "${os.name}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("os.name", "myos");
		pvs.addPropertyValue("properties", props);
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("myos", tb.getTouchy());
	}

	public void testPropertyPlaceholderConfigurerWithOverridingSystemProperty() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("touchy", "${os.name}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("os.name", "myos");
		pvs.addPropertyValue("properties", props);
		pvs.addPropertyValue("systemPropertiesModeName", "SYSTEM_PROPERTIES_MODE_OVERRIDE");
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals(System.getProperty("os.name"), tb.getTouchy());
	}

	public void testPropertyPlaceholderConfigurerWithUnresolvableSystemProperty() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("touchy", "${user.dir}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("systemPropertiesModeName", "SYSTEM_PROPERTIES_MODE_NEVER");
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		try {
			ac.refresh();
			fail("Should have thrown BeanDefinitionStoreException");
		}
		catch (BeanDefinitionStoreException ex) {
			// expected
			assertTrue(ex.getMessage().indexOf("user.dir") != -1);
		}
	}

	public void testPropertyPlaceholderConfigurerWithUnresolvablePlaceholder() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "${ref}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, null);
		try {
			ac.refresh();
			fail("Should have thrown BeanDefinitionStoreException");
		}
		catch (BeanDefinitionStoreException ex) {
			// expected
			assertTrue(ex.getMessage().indexOf("ref") != -1);
		}
	}

	public void testPropertyPlaceholderConfigurerWithIgnoreUnresolvablePlaceholder() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "${ref}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("ignoreUnresolvablePlaceholders", Boolean.TRUE);
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("${ref}", tb.getName());
	}

	public void testPropertyPlaceholderConfigurerWithEmptyStringAsNull() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("nullValue", "");
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertNull(tb.getName());
	}

	public void testPropertyPlaceholderConfigurerWithEmptyStringInPlaceholderAsNull() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "${ref}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("nullValue", "");
		Properties props = new Properties();
		props.put("ref", "");
		pvs.addPropertyValue("properties", props);
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertNull(tb.getName());
	}

	public void testPropertyPlaceholderConfigurerWithNestedPlaceholderInKey() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "${my${key}key}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("key", "new");
		props.put("mynewkey", "myname");
		pvs.addPropertyValue("properties", props);
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("myname", tb.getName());
	}

	public void testPropertyPlaceholderConfigurerWithSystemPropertyInLocation() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("spouse", new RuntimeBeanReference("${ref}"));
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("location", "${user.dir}/test");
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		try {
			ac.refresh();
			fail("Should have thrown BeanInitializationException");
		}
		catch (BeanInitializationException ex) {
			// expected
			assertTrue(ex.getCause() instanceof FileNotFoundException);
			// slight hack for Linux/Unix systems
			String userDir = StringUtils.cleanPath(System.getProperty("user.dir"));
			if (userDir.startsWith("/")) {
				userDir = userDir.substring(1);
			}
			assertTrue(ex.getMessage().indexOf(userDir) != -1);
		}
	}

	public void testPropertyPlaceholderConfigurerWithSystemPropertiesInLocation() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("spouse", new RuntimeBeanReference("${ref}"));
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("location", "${user.dir}/test/${user.dir}");
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		try {
			ac.refresh();
			fail("Should have thrown BeanInitializationException");
		}
		catch (BeanInitializationException ex) {
			// expected
			assertTrue(ex.getCause() instanceof FileNotFoundException);
			// slight hack for Linux/Unix systems			
			String userDir = StringUtils.cleanPath(System.getProperty("user.dir"));
			if (userDir.startsWith("/")) {
				userDir = userDir.substring(1);
			}
			/* the above hack doesn't work since the exception message is created without
			   the leading / stripped so the test fails.  Changed 17/11/04. DD */
			//assertTrue(ex.getMessage().indexOf(userDir + "/test/" + userDir) != -1);		
			assertTrue(ex.getMessage().indexOf(userDir + "/test/" + userDir) != -1 ||
			    ex.getMessage().indexOf(userDir + "/test//" + userDir) != -1);
		}
	}

	public void testPropertyPlaceholderConfigurerWithUnresolvableSystemPropertiesInLocation() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("spouse", new RuntimeBeanReference("${ref}"));
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("location", "${myprop}/test/${myprop}");
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		try {
			ac.refresh();
			fail("Should have thrown BeanDefinitionStoreException");
		}
		catch (BeanInitializationException ex) {
			// expected
			assertTrue(ex.getCause() instanceof FileNotFoundException);
			assertTrue(ex.getMessage().indexOf("myprop") != -1);
		}
	}

	public void testPropertyPlaceholderConfigurerWithCircularReference() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("age", "${age}");
		pvs.addPropertyValue("name", "name${var}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "age=99\nvar=${m}var\nm=${var}");
		ac.registerSingleton("configurer1", PropertyPlaceholderConfigurer.class, pvs);
		try {
			ac.refresh();
			fail("Should have thrown BeanDefinitionStoreException");
		}
		catch (BeanDefinitionStoreException ex) {
			// expected
		}
	}

	public void testPropertyPlaceholderConfigurerWithMultiLevelCircularReference() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "name${var}");
		ac.registerSingleton("tb1", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "var=${m}var\nm=${var2}\nvar2=${var}");
		ac.registerSingleton("configurer1", PropertyPlaceholderConfigurer.class, pvs);
		try {
			ac.refresh();
			fail("Should have thrown BeanDefinitionStoreException");
		}
		catch (BeanDefinitionStoreException ex) {
			// expected
		}
	}

	public void testPropertyPlaceholderConfigurerWithNestedCircularReference() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "name${var}");
		ac.registerSingleton("tb1", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("properties", "var=${m}var\nm=${var2}\nvar2=${m}");
		ac.registerSingleton("configurer1", PropertyPlaceholderConfigurer.class, pvs);
		try {
			ac.refresh();
			fail("Should have thrown BeanDefinitionStoreException");
		}
		catch (BeanDefinitionStoreException ex) {
			// expected
		}
	}

	public void testPropertyPlaceholderConfigurerWithDefaultProperties() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("touchy", "${test}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("test", "mytest");
		pvs.addPropertyValue("properties", new Properties(props));
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("mytest", tb.getTouchy());
	}

	public void testPropertyPlaceholderConfigurerWithAutowireByType() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("touchy", "${test}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		pvs.addPropertyValue("target", new RuntimeBeanReference("tb"));
		ac.registerSingleton("tbProxy", ProxyFactoryBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("test", "mytest");
		pvs.addPropertyValue("properties", new Properties(props));
		RootBeanDefinition ppcDef = new RootBeanDefinition(PropertyPlaceholderConfigurer.class, pvs);
		ppcDef.setAutowireMode(RootBeanDefinition.AUTOWIRE_BY_TYPE);
		ac.registerBeanDefinition("configurer", ppcDef);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("mytest", tb.getTouchy());
	}

	public void testPropertyPlaceholderConfigurerWithAliases() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("touchy", "${test}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		ac.registerAlias("tb", "${myAlias}");
		ac.registerAlias("${myTarget}", "alias2");
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("test", "mytest");
		props.put("myAlias", "alias");
		props.put("myTarget", "tb");
		pvs.addPropertyValue("properties", new Properties(props));
		ac.registerSingleton("configurer", PropertyPlaceholderConfigurer.class, pvs);
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("mytest", tb.getTouchy());
		tb = (TestBean) ac.getBean("alias");
		assertEquals("mytest", tb.getTouchy());
		tb = (TestBean) ac.getBean("alias2");
		assertEquals("mytest", tb.getTouchy());
	}

	public void testPreferencesPlaceholderConfigurer() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "${myName}");
		pvs.addPropertyValue("age", "${myAge}");
		pvs.addPropertyValue("touchy", "${myTouchy}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("myAge", "99");
		pvs.addPropertyValue("properties", props);
		ac.registerSingleton("configurer", PreferencesPlaceholderConfigurer.class, pvs);
		Preferences.systemRoot().put("myName", "myNameValue");
		Preferences.systemRoot().put("myTouchy", "myTouchyValue");
		Preferences.userRoot().put("myTouchy", "myOtherTouchyValue");
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("myNameValue", tb.getName());
		assertEquals(99, tb.getAge());
		assertEquals("myOtherTouchyValue", tb.getTouchy());
		Preferences.userRoot().remove("myTouchy");
		Preferences.systemRoot().remove("myTouchy");
		Preferences.systemRoot().remove("myName");
	}

	public void testPreferencesPlaceholderConfigurerWithCustomTreePaths() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "${myName}");
		pvs.addPropertyValue("age", "${myAge}");
		pvs.addPropertyValue("touchy", "${myTouchy}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("myAge", "99");
		pvs.addPropertyValue("properties", props);
		pvs.addPropertyValue("systemTreePath", "mySystemPath");
		pvs.addPropertyValue("userTreePath", "myUserPath");
		ac.registerSingleton("configurer", PreferencesPlaceholderConfigurer.class, pvs);
		Preferences.systemRoot().node("mySystemPath").put("myName", "myNameValue");
		Preferences.systemRoot().node("mySystemPath").put("myTouchy", "myTouchyValue");
		Preferences.userRoot().node("myUserPath").put("myTouchy", "myOtherTouchyValue");
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("myNameValue", tb.getName());
		assertEquals(99, tb.getAge());
		assertEquals("myOtherTouchyValue", tb.getTouchy());
		Preferences.userRoot().node("myUserPath").remove("myTouchy");
		Preferences.systemRoot().node("mySystemPath").remove("myTouchy");
		Preferences.systemRoot().node("mySystemPath").remove("myName");
	}

	public void testPreferencesPlaceholderConfigurerWithPathInPlaceholder() {
		StaticApplicationContext ac = new StaticApplicationContext();
		MutablePropertyValues pvs = new MutablePropertyValues();
		pvs.addPropertyValue("name", "${mypath/myName}");
		pvs.addPropertyValue("age", "${myAge}");
		pvs.addPropertyValue("touchy", "${myotherpath/myTouchy}");
		ac.registerSingleton("tb", TestBean.class, pvs);
		pvs = new MutablePropertyValues();
		Properties props = new Properties();
		props.put("myAge", "99");
		pvs.addPropertyValue("properties", props);
		pvs.addPropertyValue("systemTreePath", "mySystemPath");
		pvs.addPropertyValue("userTreePath", "myUserPath");
		ac.registerSingleton("configurer", PreferencesPlaceholderConfigurer.class, pvs);
		Preferences.systemRoot().node("mySystemPath").node("mypath").put("myName", "myNameValue");
		Preferences.systemRoot().node("mySystemPath/myotherpath").put("myTouchy", "myTouchyValue");
		Preferences.userRoot().node("myUserPath/myotherpath").put("myTouchy", "myOtherTouchyValue");
		ac.refresh();
		TestBean tb = (TestBean) ac.getBean("tb");
		assertEquals("myNameValue", tb.getName());
		assertEquals(99, tb.getAge());
		assertEquals("myOtherTouchyValue", tb.getTouchy());
		Preferences.userRoot().node("myUserPath/myotherpath").remove("myTouchy");
		Preferences.systemRoot().node("mySystemPath/myotherpath").remove("myTouchy");
		Preferences.systemRoot().node("mySystemPath/mypath").remove("myName");
	}


	private static class ConvertingOverrideConfigurer extends PropertyOverrideConfigurer {

		protected String convertPropertyValue(String originalValue) {
			return "X" + originalValue;
		}
	}

}

Other Spring Framework examples (source code examples)

Here is a short list of links related to this Spring Framework PropertyResourceConfigurerTests.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.