org_apache_struts2_convention_StrutsJUnit4ConventionTestCaseTest_java
com.opensymphony.xwork2.config.providers.XmlConfigurationProvider
@Override
    public void register(ContainerBuilder containerBuilder, LocatableProperties props) throws ConfigurationException {
        LOG.trace("Parsing configuration file [{}]", (Object)this.configFileName);
        HashMap<String, Element> loadedBeans = new HashMap<String, Element>();
        for (Document doc : this.documents) {
            Element rootElement = doc.getDocumentElement();
            NodeList children = rootElement.getChildNodes();
            int childSize = children.getLength();
            for (int i = 0; i < childSize; ++i) {
                String name;
                Node childNode = children.item(i);
                if (!(childNode instanceof Element)) continue;
                Element child = (Element)childNode;
                String nodeName = child.getNodeName();
                if ("bean-selection".equals(nodeName)) {
                    name = child.getAttribute("name");
                    String impl = child.getAttribute("class");
                    try {
                        Class classImpl = ClassLoaderUtil.loadClass(impl, this.getClass());
                        if (!BeanSelectionProvider.class.isAssignableFrom(classImpl)) {
                            throw new ConfigurationException("The bean-provider: name:" + name + " class:" + impl + " does not implement " + BeanSelectionProvider.class.getName(), (Object)childNode);
                        }
                        BeanSelectionProvider provider = (BeanSelectionProvider)classImpl.newInstance();
                        provider.register(containerBuilder, props);
                        continue;
                    }
                    catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
                        throw new ConfigurationException("Unable to load bean-provider: name:" + name + " class:" + impl, e, childNode);
                    }
                }
                if ("bean".equals(nodeName)) {
                    String type = child.getAttribute("type");
                    String name2 = child.getAttribute("name");
                    String impl = child.getAttribute("class");
                    String onlyStatic = child.getAttribute("static");
                    String scopeStr = child.getAttribute("scope");
                    boolean optional = "true".equals(child.getAttribute("optional"));
                    Scope scope = "prototype".equals(scopeStr) ? Scope.PROTOTYPE : ("request".equals(scopeStr) ? Scope.REQUEST : ("session".equals(scopeStr) ? Scope.SESSION : ("singleton".equals(scopeStr) ? Scope.SINGLETON : ("thread".equals(scopeStr) ? Scope.THREAD : Scope.SINGLETON))));
                    if (StringUtils.isEmpty(name2)) {
                        name2 = "default";
                    }
                    try {
                        Class classImpl;
                        Class classType = classImpl = ClassLoaderUtil.loadClass(impl, this.getClass());
                        if (StringUtils.isNotEmpty(type)) {
                            classType = ClassLoaderUtil.loadClass(type, this.getClass());
                        }
                        if ("true".equals(onlyStatic)) {
                            classImpl.getDeclaredClasses();
                            containerBuilder.injectStatics(classImpl);
                        } else {
                            if (containerBuilder.contains(classType, name2)) {
                                Location loc = LocationUtils.getLocation(loadedBeans.get(classType.getName() + name2));
                                if (this.throwExceptionOnDuplicateBeans) {
                                    throw new ConfigurationException("Bean type " + classType + " with the name " + name2 + " has already been loaded by " + loc, (Object)child);
                                }
                            }
                            classImpl.getDeclaredConstructors();
                            LOG.debug("Loaded type: {} name: {} impl: {}", (Object)type, (Object)name2, (Object)impl);
                            containerBuilder.factory(classType, name2, new LocatableFactory(name2, classType, classImpl, scope, childNode), scope);
                        }
                        loadedBeans.put(classType.getName() + name2, child);
                    }
                    catch (Throwable ex) {
                        if (!optional) {
                            throw new ConfigurationException("Unable to load bean: type:" + type + " class:" + impl, ex, childNode);
                        }
                        LOG.debug("Unable to load optional class: {}", (Object)impl);
                    }
                    continue;
                }
                if ("constant".equals(nodeName)) {
                    name = child.getAttribute("name");
                    String value = child.getAttribute("value");
                    if (this.valueSubstitutor != null) {
                        LOG.debug("Substituting value [{}] using [{}]", (Object)value, (Object)this.valueSubstitutor.getClass().getName());
                        value = this.valueSubstitutor.substitute(value);
                    }
                    props.setProperty(name, value, childNode);
                    continue;
                }
                if (!nodeName.equals("unknown-handler-stack")) continue;
                ArrayList<UnknownHandlerConfig> unknownHandlerStack = new ArrayList<UnknownHandlerConfig>();
                NodeList unknownHandlers = child.getElementsByTagName("unknown-handler-ref");
                int unknownHandlersSize = unknownHandlers.getLength();
                for (int k = 0; k < unknownHandlersSize; ++k) {
                    Element unknownHandler = (Element)unknownHandlers.item(k);
                    Location location = LocationUtils.getLocation(unknownHandler);
                    unknownHandlerStack.add(new UnknownHandlerConfig(unknownHandler.getAttribute("name"), location));
                }
                if (unknownHandlerStack.isEmpty()) continue;
                this.configuration.setUnknownHandlerStack(unknownHandlerStack);
            }
        }
    }
 -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.getChars(int,int,char[],int): void -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.getChars(int,int,char[],int): void -> java.lang.String.length(): int -> java.util.Properties.setProperty(java.lang.String,java.lang.String): java.lang.Object -> java.lang.Integer.parseInt(java.lang.String): int -> java.lang.Integer.parseInt(java.lang.String): int -> java.lang.CharSequence.length(): int -> java.lang.String.trim(): java.lang.String -> java.lang.CharSequence.length(): int -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.getChars(int,int,char[],int): void -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.getChars(int,int,char[],int): void -> java.lang.String.length(): int -> java.util.Properties.setProperty(java.lang.String,java.lang.String): java.lang.Object -> java.lang.Integer.parseInt(java.lang.String): int -> java.lang.Integer.parseInt(java.lang.String): int -> java.lang.CharSequence.length(): int -> java.lang.String.trim(): java.lang.String -> java.lang.CharSequence.length(): int -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.String.length(): int [CALL] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.getChars(int,int,char[],int): void [EXIT] [EXIT] -> java.lang.String.length(): int [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.String.length(): int [CALL] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.getChars(int,int,char[],int): void [EXIT] [EXIT] -> java.lang.String.length(): int [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.Properties.setProperty(java.lang.String,java.lang.String): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] -> java.lang.Integer.parseInt(java.lang.String): int [EXIT] [CALL] -> java.lang.Integer.parseInt(java.lang.String): int [EXIT] [CALL] [CALL] -> java.lang.CharSequence.length(): int [EXIT] [CALL] [CALL] -> java.lang.String.trim(): java.lang.String [EXIT] [CALL] -> java.lang.CharSequence.length(): int [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Object.getClass(): java.lang.Class -> java.lang.Class.getName(): java.lang.String [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.String.length(): int [CALL] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.getChars(int,int,char[],int): void [EXIT] [EXIT] -> java.lang.String.length(): int [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.String.length(): int [CALL] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.getChars(int,int,char[],int): void [EXIT] [EXIT] -> java.lang.String.length(): int [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.Properties.setProperty(java.lang.String,java.lang.String): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] -> java.lang.Integer.parseInt(java.lang.String): int [EXIT] [CALL] -> java.lang.Integer.parseInt(java.lang.String): int [EXIT] [CALL] [CALL] -> java.lang.CharSequence.length(): int [EXIT] [CALL] [CALL] -> java.lang.String.trim(): java.lang.String [EXIT] [CALL] -> java.lang.CharSequence.length(): int [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean [EXIT]