class FileDeploymentDescriptor extends AbstractDeploymentDescriptor {

    private final String modulePropertyName;

    public FileDeploymentDescriptor(URL url,
                                    Properties props,
                                    DeploymentDescriptorConfiguration deploymentDescriptorConfiguration,
                                    ClassLoader classLoader, String modulePropertyName) {
        super(url, props, deploymentDescriptorConfiguration, classLoader);
        this.modulePropertyName = modulePropertyName;
        loadSpringXMLs();
    }

    @Override
    public void loadSpringXMLs() {
        try {
            // When path contains special characters (e.g., white space, Chinese), URL converts them to UTF8 code point.
            // In order to process correctly, create File from URI
            URI springXmlUri = new URI("file://"
                                       + url.getFile().substring(0,
                                           url.getFile().length() - modulePropertyName.length())
                                       + DeploymentDescriptorConfiguration.SPRING_CONTEXT_PATH);
            File springXml = new File(springXmlUri);
            List<File> springFiles = new ArrayList<>();
            if (springXml.exists()) {
                listFiles(springFiles, springXml, ".xml");
            }

            for (File f : springFiles) {
                springResources.put(f.getAbsolutePath(), new FileSystemResource(f));
            }
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
    }

    private void listFiles(List<File> subFiles, File parent, String suffix) {<FILL_FUNCTION_BODY>}
}

        File[] files = parent.listFiles();
        if (files == null || files.length == 0) {
            return;
        }
        for (File f : files) {
            if (f.isFile() && f.getName().endsWith(suffix)) {
                subFiles.add(f);
            } else if (f.isDirectory()) {
                listFiles(subFiles, f, suffix);
            }
        }
    
<methods>public void <init>(java.net.URL, java.util.Properties, com.alipay.sofa.boot.isle.deployment.DeploymentDescriptorConfiguration, java.lang.ClassLoader) ,public void addInstalledSpringXml(java.lang.String) ,public int compareTo(com.alipay.sofa.boot.isle.deployment.DeploymentDescriptor) ,public void deployFinish() ,public boolean equals(java.lang.Object) ,public org.springframework.context.ApplicationContext getApplicationContext() ,public java.lang.ClassLoader getClassLoader() ,public long getElapsedTime() ,public List<java.lang.String> getInstalledSpringXml() ,public java.lang.String getModuleName() ,public java.lang.String getName() ,public java.lang.String getProperty(java.lang.String) ,public List<java.lang.String> getRequiredModules() ,public java.lang.String getSpringParent() ,public Map<java.lang.String,org.springframework.core.io.Resource> getSpringResources() ,public long getStartTime() ,public int hashCode() ,public boolean isSpringPowered() ,public void setApplicationContext(org.springframework.context.ApplicationContext) ,public void setIgnoreRequireModule(boolean) ,public void startDeploy() <variables>protected org.springframework.context.ApplicationContext applicationContext,protected final non-sealed java.lang.ClassLoader classLoader,protected final non-sealed com.alipay.sofa.boot.isle.deployment.DeploymentDescriptorConfiguration deploymentDescriptorConfiguration,protected long elapsedTime,private boolean ignoreRequireModule,protected final List<java.lang.String> installedSpringXml,protected final non-sealed java.lang.String moduleName,protected final non-sealed java.lang.String name,protected final non-sealed java.lang.String parentModule,protected final non-sealed java.util.Properties properties,protected final non-sealed List<java.lang.String> requiredModules,protected final Map<java.lang.String,org.springframework.core.io.Resource> springResources,protected long startTime,protected final non-sealed java.net.URL url