Skip to content

How to compare spring xml configuration

kimi edited this page Nov 17, 2015 · 1 revision
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.SimpleBeanDefinitionRegistry;
import org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver;
import org.springframework.beans.factory.xml.ResourceEntityResolver;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.Resource;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class CompareSpringXmlConfiguration {

    SimpleBeanDefinitionRegistry origin;
    SimpleBeanDefinitionRegistry refactor;

    @Before
    public void before() throws Throwable {
        origin = new SimpleBeanDefinitionRegistry();
        refactor = new SimpleBeanDefinitionRegistry();
    }

    @Test
    public void test_compare() throws Throwable {
        Resource[] originResources = new Resource[]{ /* TODO */ };
        Resource[] refactorResources = new Resource[]{ /* TODO */ };
        for (Resource r : originResources) {
            load(r, origin, true);
        }
        for (Resource r : refactorResources) {
            load(r, refactor, true)
        }
        String[] originNames = origin.getBeanDefinitionNames();
        String[] refactorNames = refactor.getBeanDefinitionNames();
        assertEquals(originNames.length, refactorNames.length);
        System.out.println("Read " + originNames.length + " beans");
        List<String> oriList = Arrays.asList(originNames);
        List<String> refList = Arrays.asList(originNames);
        Collections.sort(oriList);
        Collections.sort(refList);
        assertTrue(Arrays.equals(oriList.toArray(new String[0]),
                                 refList.toArray(new String[0])));
        for (String name : originNames) {
            BeanDefinition originBean = origin.getBeanDefinition(name);
            BeanDefinition refactorBean = refactor.getBeanDefinition(name);
            try {
                assertEquals(originBean, refactorBean);
            } catch (Throwable t) {
                System.out.println("Assert equals failed bean name [" + name + "]");
                throw t;
            }
        }
    }

    int load(Resource resource, BeanDefinitionRegistry registry, boolean xsd) {
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(registry);
        reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
        reader.setNamespaceAware(true);
        reader.setEntityResolver(new ResourceEntityResolver(reader.getResourceLoader()));
        reader.setNamespaceHandlerResolver(new DefaultNamespaceHandlerResolver());
        if (xsd) {
            reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_XSD);
        }
        return reader.loadBeanDefinitions(resource);
    }

}
Clone this wiki locally