Author: gnodet
Date: Fri Feb 16 06:56:36 2018
New Revision: 1824423

URL: http://svn.apache.org/viewvc?rev=1824423&view=rev
Log:
Upgrade blueprint-noosgi to latest blueprint-core / parser

Modified:
    aries/trunk/blueprint/blueprint-noosgi/pom.xml
    
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java
    
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java

Modified: aries/trunk/blueprint/blueprint-noosgi/pom.xml
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/pom.xml?rev=1824423&r1=1824422&r2=1824423&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/pom.xml (original)
+++ aries/trunk/blueprint/blueprint-noosgi/pom.xml Fri Feb 16 06:56:36 2018
@@ -31,7 +31,7 @@
     <groupId>org.apache.aries.blueprint</groupId>
     <artifactId>org.apache.aries.blueprint.noosgi</artifactId>
     <packaging>jar</packaging>
-    <version>1.1.3-SNAPSHOT</version>
+    <version>1.2.0-SNAPSHOT</version>
     <name>Apache Aries Blueprint no-OSGI</name>
     <description>
         This jar contains everything needed to run Blueprint outside OSGi.
@@ -45,8 +45,8 @@
 
     <properties>
         <blueprint.api.version>1.0.1</blueprint.api.version>
-        <blueprint.core.version>1.4.3</blueprint.core.version>
-        <blueprint.parser.version>1.3.1</blueprint.parser.version>
+        <blueprint.core.version>1.9.0</blueprint.core.version>
+        <blueprint.parser.version>1.5.0</blueprint.parser.version>
         <proxy.impl.version>1.0.3</proxy.impl.version>
     </properties>
 

Modified: 
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java?rev=1824423&r1=1824422&r2=1824423&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java
 Fri Feb 16 06:56:36 2018
@@ -45,8 +45,6 @@ import org.xml.sax.SAXException;
 
 public class SimpleNamespaceHandlerSet implements NamespaceHandlerSet {
 
-    public static final URI EXT_1_2_NAMESPACE = 
URI.create("http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0";);
-
     private Map<URI, URL> namespaces;
     private Map<URI, NamespaceHandler> handlers;
     private Schema schema;
@@ -54,9 +52,10 @@ public class SimpleNamespaceHandlerSet i
     public SimpleNamespaceHandlerSet() {
         this.namespaces = new LinkedHashMap<URI, URL>();
         this.handlers = new LinkedHashMap<URI, NamespaceHandler>();
-        addNamespace(EXT_1_2_NAMESPACE,
-                
getClass().getResource("/org/apache/aries/blueprint/ext/impl/blueprint-ext-1.2.xsd"),
-                new ExtNamespaceHandler());
+        ExtNamespaceHandler ext = new ExtNamespaceHandler();
+        for (String uri : ExtNamespaceHandler.EXT_URIS) {
+            addNamespace(URI.create(uri), ext.getSchemaLocation(uri), ext);
+        }
     }
 
     public Set<URI> getNamespaces() {
@@ -76,12 +75,17 @@ public class SimpleNamespaceHandlerSet i
         return handlers.get(uri);
     }
 
+    @Override
+    public Schema getSchema(Map<String, String> locations) throws 
SAXException, IOException {
+        return getSchema();
+    }
+
     public Schema getSchema() throws SAXException, IOException {
         if (schema == null) {
             final List<StreamSource> schemaSources = new 
ArrayList<StreamSource>();
             final List<InputStream> streams = new ArrayList<InputStream>();
             try {
-                InputStream is = 
getClass().getResourceAsStream("/org/apache/aries/blueprint/blueprint.xsd");
+                InputStream is = 
getClass().getResourceAsStream("/org/osgi/service/blueprint/blueprint.xsd");
                 streams.add(is);
                 schemaSources.add(new StreamSource(is));
                 for (URI uri : namespaces.keySet()) {

Modified: 
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java?rev=1824423&r1=1824422&r2=1824423&view=diff
==============================================================================
--- 
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
 (original)
+++ 
aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/ext/impl/ExtNamespaceHandler.java
 Fri Feb 16 06:56:36 2018
@@ -18,24 +18,34 @@
  */
 package org.apache.aries.blueprint.ext.impl;
 
-import org.apache.aries.blueprint.ComponentDefinitionRegistry;
-import org.apache.aries.blueprint.ExtendedBeanMetadata;
-import org.apache.aries.blueprint.ExtendedReferenceListMetadata;
-import org.apache.aries.blueprint.ParserContext;
+import java.net.URL;
+import java.util.*;
+
+import org.apache.aries.blueprint.*;
+import org.apache.aries.blueprint.container.NullProxy;
 import org.apache.aries.blueprint.ext.AbstractPropertyPlaceholder;
 import org.apache.aries.blueprint.ext.PlaceholdersUtils;
 import org.apache.aries.blueprint.ext.PropertyPlaceholder;
-import org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator;
-import org.apache.aries.blueprint.mutable.*;
+import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
+import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
+import org.apache.aries.blueprint.mutable.MutableComponentMetadata;
+import org.apache.aries.blueprint.mutable.MutableIdRefMetadata;
+import org.apache.aries.blueprint.mutable.MutableMapMetadata;
+import org.apache.aries.blueprint.mutable.MutableRefMetadata;
+import org.apache.aries.blueprint.mutable.MutableReferenceMetadata;
+import org.apache.aries.blueprint.mutable.MutableServiceReferenceMetadata;
+import org.apache.aries.blueprint.mutable.MutableValueMetadata;
 import org.osgi.service.blueprint.container.ComponentDefinitionException;
 import org.osgi.service.blueprint.reflect.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.w3c.dom.*;
+import org.w3c.dom.Attr;
 import org.w3c.dom.CharacterData;
-
-import java.net.URL;
-import java.util.*;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Element;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 /**
  * A namespace handler for Aries blueprint extensions
@@ -48,7 +58,11 @@ public class ExtNamespaceHandler impleme
     public static final String BLUEPRINT_EXT_NAMESPACE_V1_0 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";;
     public static final String BLUEPRINT_EXT_NAMESPACE_V1_1 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0";;
     public static final String BLUEPRINT_EXT_NAMESPACE_V1_2 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0";;
-    
+    public static final String BLUEPRINT_EXT_NAMESPACE_V1_3 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.3.0";;
+    public static final String BLUEPRINT_EXT_NAMESPACE_V1_4 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.4.0";;
+    public static final String BLUEPRINT_EXT_NAMESPACE_V1_5 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.5.0";;
+    public static final String BLUEPRINT_EXT_NAMESPACE_V1_6 = 
"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.6.0";;
+
     public static final String PROPERTY_PLACEHOLDER_ELEMENT = 
"property-placeholder";
     public static final String DEFAULT_PROPERTIES_ELEMENT = 
"default-properties";
     public static final String PROPERTY_ELEMENT = "property";
@@ -58,6 +72,7 @@ public class ExtNamespaceHandler impleme
     public static final String ID_ATTRIBUTE = "id";
     public static final String PLACEHOLDER_PREFIX_ATTRIBUTE = 
"placeholder-prefix";
     public static final String PLACEHOLDER_SUFFIX_ATTRIBUTE = 
"placeholder-suffix";
+    public static final String PLACEHOLDER_NULL_VALUE_ATTRIBUTE = "null-value";
     public static final String DEFAULTS_REF_ATTRIBUTE = "defaults-ref";
     public static final String IGNORE_MISSING_LOCATIONS_ATTRIBUTE = 
"ignore-missing-locations";
     public static final String EVALUATOR_ATTRIBUTE = "evaluator";
@@ -74,25 +89,61 @@ public class ExtNamespaceHandler impleme
 
     public static final String ROLE_ATTRIBUTE = "role";
     public static final String ROLE_PROCESSOR = "processor";
-    
+
     public static final String FIELD_INJECTION_ATTRIBUTE = "field-injection";
-    
+
+    public static final String NON_STANDARD_SETTERS_ATTRIBUTE = 
"non-standard-setters";
+
     public static final String DEFAULT_REFERENCE_BEAN = "default";
 
+    public static final String FILTER_ATTRIBUTE = "filter";
+
+    public static final String ADDITIONAL_INTERFACES = "additional-interfaces";
+    public static final String INTERFACE_VALUE = "value";
+
+    public static final String BEAN = "bean";
+    public static final String REFERENCE = "reference";
+    public static final String ARGUMENT = "argument";
+
+    public static final String DAMPING_ATTRIBUTE = "damping";
+
+    public static final String DAMPING_RELUCTANT = "reluctant";
+    public static final String DAMPING_GREEDY = "greedy";
+
+    public static final String LIFECYCLE_ATTRIBUTE = "lifecycle";
+
+    public static final String LIFECYCLE_DYNAMIC = "dynamic";
+    public static final String LIFECYCLE_STATIC = "static";
+
+    public static final String RAW_CONVERSION_ATTRIBUTE = "raw-conversion";
+
+    public static final String NULL_PROXY_ELEMENT = "null-proxy";
+
+    public static final Set<String> EXT_URIS = Collections.unmodifiableSet(new 
LinkedHashSet<String>(Arrays.asList(
+            BLUEPRINT_EXT_NAMESPACE_V1_0,
+            BLUEPRINT_EXT_NAMESPACE_V1_1,
+            BLUEPRINT_EXT_NAMESPACE_V1_2,
+            BLUEPRINT_EXT_NAMESPACE_V1_3,
+            BLUEPRINT_EXT_NAMESPACE_V1_4,
+            BLUEPRINT_EXT_NAMESPACE_V1_5,
+            BLUEPRINT_EXT_NAMESPACE_V1_6)));
+
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ExtNamespaceHandler.class);
 
     private int idCounter;
-    
+
     public URL getSchemaLocation(String namespace) {
-        if (BLUEPRINT_EXT_NAMESPACE_V1_0.equals(namespace)) {
-          return getClass().getResource("blueprint-ext.xsd");
-        } else if (BLUEPRINT_EXT_NAMESPACE_V1_1.equals(namespace)) {
-          return getClass().getResource("blueprint-ext-1.1.xsd");
-        } else if (BLUEPRINT_EXT_NAMESPACE_V1_2.equals(namespace)) {
-          return getClass().getResource("blueprint-ext-1.2.xsd");
-        } else {
-          return null;
+        if (isExtNamespace(namespace)) {
+            String v = 
namespace.substring("http://aries.apache.org/blueprint/xmlns/blueprint-ext/v".length());
+            return getClass().getResource("blueprint-ext-" + v + ".xsd");
+        } else if ("http://www.w3.org/XML/1998/namespace".equals(namespace)) {
+            return getClass().getResource("xml.xsd");
         }
+        return null;
+    }
+
+    public static boolean isExtNamespace(String e) {
+        return EXT_URIS.contains(e);
     }
 
     public Set<Class> getManagedClasses() {
@@ -105,6 +156,10 @@ public class ExtNamespaceHandler impleme
         LOGGER.debug("Parsing element {{}}{}", element.getNamespaceURI(), 
element.getLocalName());
         if (nodeNameEquals(element, PROPERTY_PLACEHOLDER_ELEMENT)) {
             return parsePropertyPlaceholder(context, element);
+        } else if (nodeNameEquals(element, BEAN)) {
+            return context.parseElement(BeanMetadata.class, 
context.getEnclosingComponent(), element);
+        } else if (nodeNameEquals(element, NULL_PROXY_ELEMENT)) {
+            return parseNullProxy(element, context);
         } else {
             throw new ComponentDefinitionException("Unsupported element: " + 
element.getNodeName());
         }
@@ -117,13 +172,55 @@ public class ExtNamespaceHandler impleme
             return decorateRole(node, component, context);
         } else if (node instanceof Attr && nodeNameEquals(node, 
FIELD_INJECTION_ATTRIBUTE)) {
             return decorateFieldInjection(node, component, context);
+        } else if (node instanceof Attr && nodeNameEquals(node, 
NON_STANDARD_SETTERS_ATTRIBUTE)) {
+            return decorateNonStandardSetters(node, component, context);
         } else if (node instanceof Attr && nodeNameEquals(node, 
DEFAULT_REFERENCE_BEAN)) {
             return decorateDefaultBean(node, component, context);
+        } else if (node instanceof Attr && nodeNameEquals(node, 
FILTER_ATTRIBUTE)) {
+            return decorateFilter(node, component, context);
+        } else if (node instanceof Element && nodeNameEquals(node, 
ADDITIONAL_INTERFACES)) {
+            return decorateAdditionalInterfaces(node, component, context);
+        } else if (node instanceof Element && nodeNameEquals(node, BEAN)) {
+            return context.parseElement(BeanMetadata.class, component, 
(Element) node);
+        } else if (node instanceof Attr && nodeNameEquals(node, 
DAMPING_ATTRIBUTE)) {
+            return decorateDamping(node, component, context);
+        } else if (node instanceof Attr && nodeNameEquals(node, 
LIFECYCLE_ATTRIBUTE)) {
+            return decorateLifecycle(node, component, context);
+        } else if (node instanceof Attr && nodeNameEquals(node, 
RAW_CONVERSION_ATTRIBUTE)) {
+            return decorateRawConversion(node, component, context);
+        } else if (node instanceof Element && nodeNameEquals(node, ARGUMENT)) {
+            return parseBeanArgument(context, (Element) node);
         } else {
             throw new ComponentDefinitionException("Unsupported node: " + 
node.getNodeName());
         }
     }
-    
+
+    private ComponentMetadata parseNullProxy(Element element, ParserContext 
context) {
+        MutableBeanMetadata mb = 
context.createMetadata(MutableBeanMetadata.class);
+        mb.setRuntimeClass(NullProxy.class);
+        mb.addArgument(createRef(context, "blueprintContainer"), null, -1);
+        mb.setId(element.hasAttribute(ID_ATTRIBUTE) ? 
element.getAttribute(ID_ATTRIBUTE) : "null-proxy");
+        return mb;
+    }
+
+    private ComponentMetadata decorateAdditionalInterfaces(Node node, 
ComponentMetadata component,
+                                                           ParserContext 
context) {
+        if (!(component instanceof MutableReferenceMetadata)) {
+            throw new ComponentDefinitionException("Expected an instanceof 
MutableReferenceMetadata");
+        }
+        MutableReferenceMetadata mrm = (MutableReferenceMetadata) component;
+        List<String> list = new ArrayList<String>();
+        Node nd = node.getFirstChild();
+        while (nd != null) {
+            if (nd instanceof Element && nodeNameEquals(nd, INTERFACE_VALUE)) {
+                list.add(((Element) nd).getTextContent());
+            }
+            nd = nd.getNextSibling();
+        }
+        mrm.setExtraInterfaces(list);
+        return component;
+    }
+
     private ComponentMetadata decorateDefaultBean(Node node,
         ComponentMetadata component, ParserContext context) 
     {
@@ -154,6 +251,20 @@ public class ExtNamespaceHandler impleme
         return component;
     }
 
+    private ComponentMetadata decorateNonStandardSetters(Node node, 
ComponentMetadata component, ParserContext context) {
+        if (!(component instanceof BeanMetadata)) {
+            throw new ComponentDefinitionException("Attribute " + 
node.getNodeName() + " can only be used on a <bean> element");
+        }
+
+        if (!(component instanceof MutableBeanMetadata)) {
+            throw new ComponentDefinitionException("Expected an instanceof 
MutableBeanMetadata");
+        }
+
+        String value = ((Attr) node).getValue();
+        ((MutableBeanMetadata) 
component).setNonStandardSetters("true".equals(value) || "1".equals(value));
+        return component;
+    }
+
     private ComponentMetadata decorateRole(Node node, ComponentMetadata 
component, ParserContext context) {
         if (!(component instanceof BeanMetadata)) {
             throw new ComponentDefinitionException("Attribute " + 
node.getNodeName() + " can only be used on a <bean> element");
@@ -203,6 +314,96 @@ public class ExtNamespaceHandler impleme
         return component;
     }
 
+    private ComponentMetadata decorateFilter(Node node,
+                                             ComponentMetadata component, 
ParserContext context)
+    {
+        if (!(component instanceof ServiceReferenceMetadata)) {
+            throw new ComponentDefinitionException("Attribute " + 
node.getNodeName() + " can only be used on a <reference> or <reference-list> 
element");
+        }
+
+        if (!(component instanceof MutableServiceReferenceMetadata)) {
+            throw new ComponentDefinitionException("Expected an instanceof 
MutableServiceReferenceMetadata");
+        }
+
+        String value = ((Attr) node).getValue();
+        ((MutableServiceReferenceMetadata) 
component).setExtendedFilter(createValue(context, value));
+        return component;
+    }
+
+    private ComponentMetadata decorateDamping(Node node, ComponentMetadata 
component, ParserContext context) {
+        if (!(component instanceof ReferenceMetadata)) {
+            throw new ComponentDefinitionException("Attribute " + 
node.getNodeName() + " can only be used on a <reference> element");
+        }
+        if (!(component instanceof MutableReferenceMetadata)) {
+            throw new ComponentDefinitionException("Expected an instance of 
MutableReferenceMetadata");
+        }
+        int damping = ExtendedReferenceMetadata.DAMPING_GREEDY;
+        String value = ((Attr) node).getValue();
+        if (DAMPING_RELUCTANT.equals(value)) {
+            damping = ExtendedReferenceMetadata.DAMPING_RELUCTANT;
+        } else if (!DAMPING_GREEDY.equals(value)) {
+            throw new ComponentDefinitionException("Unknown damping method: " 
+ value);
+        }
+        ((MutableReferenceMetadata) component).setDamping(damping);
+        return component;
+    }
+
+    private ComponentMetadata decorateLifecycle(Node node, ComponentMetadata 
component, ParserContext context) {
+        if (!(component instanceof ReferenceMetadata)) {
+            throw new ComponentDefinitionException("Attribute " + 
node.getNodeName() + " can only be used on a <reference> element");
+        }
+        if (!(component instanceof MutableReferenceMetadata)) {
+            throw new ComponentDefinitionException("Expected an instance of 
MutableReferenceMetadata");
+        }
+        int lifecycle = ExtendedReferenceMetadata.LIFECYCLE_DYNAMIC;
+        String value = ((Attr) node).getValue();
+        if (LIFECYCLE_STATIC.equals(value)) {
+            lifecycle = ExtendedReferenceMetadata.LIFECYCLE_STATIC;
+        } else if (!LIFECYCLE_DYNAMIC.equals(value)) {
+            throw new ComponentDefinitionException("Unknown lifecycle method: 
" + value);
+        }
+        ((MutableReferenceMetadata) component).setLifecycle(lifecycle);
+        return component;
+    }
+
+    private ComponentMetadata decorateRawConversion(Node node, 
ComponentMetadata component, ParserContext context) {
+        if (!(component instanceof BeanMetadata)) {
+            throw new ComponentDefinitionException("Attribute " + 
node.getNodeName() + " can only be used on a <bean> element");
+        }
+
+        if (!(component instanceof MutableBeanMetadata)) {
+            throw new ComponentDefinitionException("Expected an instanceof 
MutableBeanMetadata");
+        }
+
+        String value = ((Attr) node).getValue();
+        ((MutableBeanMetadata) 
component).setRawConversion("true".equals(value) || "1".equals(value));
+        return component;
+    }
+
+    private ComponentMetadata parseBeanArgument(ParserContext context, Element 
element) {
+        MutableBeanMetadata mbm = (MutableBeanMetadata) 
context.getEnclosingComponent();
+        BeanArgument arg = context.parseElement(BeanArgument.class, mbm, 
element);
+        int index = 0;
+        for (Node node = element.getPreviousSibling(); node != null; node = 
node.getPreviousSibling()) {
+            if (nodeNameEquals(node, ARGUMENT)) {
+                index++;
+            }
+        }
+        List<BeanArgument> args = new 
ArrayList<BeanArgument>(mbm.getArguments());
+        if (index == args.size()) {
+            mbm.addArgument(arg);
+        } else {
+            for (BeanArgument ba : args) {
+                mbm.removeArgument(ba);
+            }
+            args.add(index, arg);
+            for (BeanArgument ba : args) {
+                mbm.addArgument(ba);
+            }
+        }
+        return mbm;
+    }
+
     private Metadata parsePropertyPlaceholder(ParserContext context, Element 
element) {
         MutableBeanMetadata metadata = 
context.createMetadata(MutableBeanMetadata.class);
         metadata.setProcessor(true);
@@ -219,6 +420,12 @@ public class ExtNamespaceHandler impleme
                                     : "}";
         metadata.addProperty("placeholderSuffix", createValue(context, 
suffix));
         metadata.addProperty("blueprintContainer", createRef(context, 
"blueprintContainer"));
+        String nullValue = 
element.hasAttribute(PLACEHOLDER_NULL_VALUE_ATTRIBUTE)
+                ? element.getAttribute(PLACEHOLDER_NULL_VALUE_ATTRIBUTE)
+                : null;
+        if (nullValue != null) {
+            metadata.addProperty("nullValue", createValue(context, nullValue));
+        }
         String defaultsRef = element.hasAttribute(DEFAULTS_REF_ATTRIBUTE) ? 
element.getAttribute(DEFAULTS_REF_ATTRIBUTE) : null;
         if (defaultsRef != null) {
             metadata.addProperty("defaultProperties", createRef(context, 
defaultsRef));
@@ -242,9 +449,7 @@ public class ExtNamespaceHandler impleme
             Node node = nl.item(i);
             if (node instanceof Element) {
                 Element e = (Element) node;
-                if (BLUEPRINT_EXT_NAMESPACE_V1_0.equals(e.getNamespaceURI())
-                        || 
BLUEPRINT_EXT_NAMESPACE_V1_1.equals(e.getNamespaceURI())
-                        || 
BLUEPRINT_EXT_NAMESPACE_V1_2.equals(e.getNamespaceURI())) {
+                if (isExtNamespace(e.getNamespaceURI())) {
                     if (nodeNameEquals(e, DEFAULT_PROPERTIES_ELEMENT)) {
                         if (defaultsRef != null) {
                             throw new ComponentDefinitionException("Only one 
of " + DEFAULTS_REF_ATTRIBUTE + " attribute or " + DEFAULT_PROPERTIES_ELEMENT + 
" element is allowed");
@@ -261,9 +466,9 @@ public class ExtNamespaceHandler impleme
             metadata.addProperty("locations", createList(context, locations));
         }
 
-        boolean result = validatePlaceholder(metadata, 
context.getComponentDefinitionRegistry());
+        validatePlaceholder(metadata, 
context.getComponentDefinitionRegistry());
 
-        return result ? metadata : null;
+        return metadata;
     }
 
     private boolean validatePlaceholder(MutableBeanMetadata metadata, 
ComponentDefinitionRegistry registry) {
@@ -346,7 +551,6 @@ public class ExtNamespaceHandler impleme
         return null;
     }
 
-
     private Metadata parseDefaultProperties(ParserContext context, 
MutableBeanMetadata enclosingComponent, Element element) {
         MutableMapMetadata props = 
context.createMetadata(MutableMapMetadata.class);
         NodeList nl = element.getChildNodes();
@@ -354,9 +558,7 @@ public class ExtNamespaceHandler impleme
             Node node = nl.item(i);
             if (node instanceof Element) {
                 Element e = (Element) node;
-                if (BLUEPRINT_EXT_NAMESPACE_V1_0.equals(e.getNamespaceURI())
-                        || 
BLUEPRINT_EXT_NAMESPACE_V1_1.equals(e.getNamespaceURI())
-                        || 
BLUEPRINT_EXT_NAMESPACE_V1_2.equals(e.getNamespaceURI())) {
+                if (isExtNamespace(e.getNamespaceURI())) {
                     if (nodeNameEquals(e, PROPERTY_ELEMENT)) {
                         BeanProperty prop = 
context.parseElement(BeanProperty.class, enclosingComponent, e);
                         props.addEntry(createValue(context, prop.getName(), 
String.class.getName()), prop.getValue());


Reply via email to