diff --git a/org.springframework.aop/src/main/java/org/springframework/aop/config/ConfigBeanDefinitionParser.java b/org.springframework.aop/src/main/java/org/springframework/aop/config/ConfigBeanDefinitionParser.java index 55e24954224..a669b3b861f 100644 --- a/org.springframework.aop/src/main/java/org/springframework/aop/config/ConfigBeanDefinitionParser.java +++ b/org.springframework.aop/src/main/java/org/springframework/aop/config/ConfigBeanDefinitionParser.java @@ -106,7 +106,7 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser { for (int i = 0; i < childNodes.getLength(); i++) { Node node = childNodes.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { - String localName = node.getLocalName(); + String localName = parserContext.getDelegate().getLocalName(node); if (POINTCUT.equals(localName)) { parsePointcut((Element) node, parserContext); } @@ -216,7 +216,7 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser { boolean adviceFoundAlready = false; for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); - if (isAdviceNode(node)) { + if (isAdviceNode(node, parserContext)) { if (!adviceFoundAlready) { adviceFoundAlready = true; if (!StringUtils.hasText(aspectName)) { @@ -264,12 +264,12 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser { * 'before', 'after', 'after-returning', * 'after-throwing' or 'around'. */ - private boolean isAdviceNode(Node aNode) { + private boolean isAdviceNode(Node aNode, ParserContext parserContext) { if (!(aNode instanceof Element)) { return false; } else { - String name = aNode.getLocalName(); + String name = parserContext.getDelegate().getLocalName(aNode); return (BEFORE.equals(name) || AFTER.equals(name) || AFTER_RETURNING_ELEMENT.equals(name) || AFTER_THROWING_ELEMENT.equals(name) || AROUND.equals(name)); } @@ -317,7 +317,7 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser { List beanDefinitions, List beanReferences) { try { - this.parseState.push(new AdviceEntry(adviceElement.getLocalName())); + this.parseState.push(new AdviceEntry(parserContext.getDelegate().getLocalName(adviceElement))); // create the method factory bean RootBeanDefinition methodDefinition = new RootBeanDefinition(MethodLocatingFactoryBean.class); @@ -366,7 +366,7 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser { RootBeanDefinition methodDef, RootBeanDefinition aspectFactoryDef, List beanDefinitions, List beanReferences) { - RootBeanDefinition adviceDefinition = new RootBeanDefinition(getAdviceClass(adviceElement)); + RootBeanDefinition adviceDefinition = new RootBeanDefinition(getAdviceClass(adviceElement, parserContext)); adviceDefinition.setSource(parserContext.extractSource(adviceElement)); adviceDefinition.getPropertyValues().addPropertyValue(ASPECT_NAME_PROPERTY, aspectName); @@ -407,8 +407,8 @@ class ConfigBeanDefinitionParser implements BeanDefinitionParser { /** * Gets the advice implementation class corresponding to the supplied {@link Element}. */ - private Class getAdviceClass(Element adviceElement) { - String elementName = adviceElement.getLocalName(); + private Class getAdviceClass(Element adviceElement, ParserContext parserContext) { + String elementName = parserContext.getDelegate().getLocalName(adviceElement); if (BEFORE.equals(elementName)) { return AspectJMethodBeforeAdvice.class; } diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java index d94cb58937b..4fb7a661436 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java @@ -59,7 +59,8 @@ public abstract class AbstractBeanDefinitionParser implements BeanDefinitionPars String id = resolveId(element, definition, parserContext); if (!StringUtils.hasText(id)) { parserContext.getReaderContext().error( - "Id is required for element '" + element.getLocalName() + "' when used as a top-level tag", element); + "Id is required for element '" + parserContext.getDelegate().getLocalName(element) + + "' when used as a top-level tag", element); } BeanDefinitionHolder holder = new BeanDefinitionHolder(definition, id); registerBeanDefinition(holder, parserContext.getRegistry()); diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/SimplePropertyNamespaceHandler.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/SimplePropertyNamespaceHandler.java index 8516d37a887..dad2032796a 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/SimplePropertyNamespaceHandler.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/SimplePropertyNamespaceHandler.java @@ -63,7 +63,7 @@ public class SimplePropertyNamespaceHandler implements NamespaceHandler { public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder definition, ParserContext parserContext) { if (node instanceof Attr) { Attr attr = (Attr) node; - String propertyName = attr.getLocalName(); + String propertyName = parserContext.getDelegate().getLocalName(attr); String propertyValue = attr.getValue(); MutablePropertyValues pvs = definition.getBeanDefinition().getPropertyValues(); if (pvs.contains(propertyName)) { diff --git a/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java b/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java index 4dffba517d1..01f575fa3ab 100644 --- a/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java +++ b/org.springframework.context/src/main/java/org/springframework/scheduling/config/ScheduledTasksBeanDefinitionParser.java @@ -35,6 +35,8 @@ import org.w3c.dom.NodeList; */ public class ScheduledTasksBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { + private static final String ELEMENT_SCHEDULED = "scheduled"; + @Override protected boolean shouldGenerateId() { return true; @@ -53,7 +55,7 @@ public class ScheduledTasksBeanDefinitionParser extends AbstractSingleBeanDefini NodeList childNodes = element.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { Node child = childNodes.item(i); - if (!(child instanceof Element) || !child.getLocalName().equals("scheduled")) { + if (!isScheduledElement(child, parserContext)) { continue; } Element taskElement = (Element) child; @@ -99,6 +101,11 @@ public class ScheduledTasksBeanDefinitionParser extends AbstractSingleBeanDefini builder.addPropertyValue("fixedRateTasks", fixedRateTaskMap); } + private boolean isScheduledElement(Node node, ParserContext parserContext) { + return node.getNodeType() == Node.ELEMENT_NODE && + ELEMENT_SCHEDULED.equals(parserContext.getDelegate().getLocalName(node)); + } + private String createRunnableBean(String ref, String method, Element taskElement, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( "org.springframework.scheduling.support.MethodInvokingRunnable"); diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java b/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java index dd5776970ba..72badaad30b 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/config/AbstractListenerContainerParser.java @@ -95,7 +95,7 @@ abstract class AbstractListenerContainerParser implements BeanDefinitionParser { for (int i = 0; i < childNodes.getLength(); i++) { Node child = childNodes.item(i); if (child.getNodeType() == Node.ELEMENT_NODE) { - String localName = child.getLocalName(); + String localName = parserContext.getDelegate().getLocalName(child); if (LISTENER_ELEMENT.equals(localName)) { parseListener((Element) child, element, parserContext); }