Search code examples
javaspringpropertiesapache-commons

PropertyPlaceholderConfigurer reads from XML File (Apache Commons Configuration)


Is there a possibility to configure the Spring PropertyPlaceholderConfigurer to read from properties.xml, via Apache Commons Configuration?


Solution

  • I found a solution with the help of seanizer and springmodule

    <!-- Composite configuration -->
    <bean id="configuration" class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
        <property name="configurations">
            <list>
                <!-- User specifics -->
                <bean class="org.apache.commons.configuration.XMLConfiguration">
                    <constructor-arg type="java.net.URL" value="file:cfg.xml" />
                </bean>
            </list>
        </property>
    </bean>
    
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties" ref="configuration"/>
    </bean>
    
    <bean id="testConfig" class="uvst.cfg.TestConfiguration">
        <property name="domain" value="${some.prop}"></property>
    </bean>
    

    class TestConfiguration

    public class TestConfiguration {
        private String domain;
        public String getDomain() {
            return domain;
        }
        public void setDomain(String domain) {
            this.domain = domain;
        }
    }
    

    jUnit Testclass

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration( { "/applicationContextTest.xml" })
    
    public class ApacheCommonCfg2Spring extends AbstractJUnit4SpringContextTests {
    
        private TestConfiguration tcfg;
    
        @Test
        public void configuration(){
            tcfg  = this.applicationContext.getBean("testConfig", TestConfiguration.class);
            System.out.println(tcfg.getDomain());
        }
    
    }
    

    Springmodule is rather old an it seems that it is not longer maintained, but it works with Spring 3.0.3.

    feel free to copy & paste!