You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/07/16 07:48:06 UTC
svn commit: r794542 -
/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/Parser.java
Author: gawor
Date: Thu Jul 16 05:48:06 2009
New Revision: 794542
URL: http://svn.apache.org/viewvc?rev=794542&view=rev
Log:
ensure only one of ref attribute, value attribute or sub element is specified
Modified:
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/Parser.java
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/Parser.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/Parser.java?rev=794542&r1=794541&r2=794542&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/Parser.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/Parser.java Thu Jul 16 05:48:06 2009
@@ -1002,26 +1002,46 @@
}
private Metadata parseArgumentOrPropertyValue(Element element, ComponentMetadata enclosingComponent) {
- // TODO: we should ensure there is only a single element or ref attribute defined here
+ Metadata [] values = new Metadata[3];
+
if (element.hasAttribute(REF_ATTRIBUTE)) {
- return new RefMetadataImpl(element.getAttribute(REF_ATTRIBUTE));
- } else if (element.hasAttribute(VALUE_ATTRIBUTE)) {
- return new ValueMetadataImpl(element.getAttribute(VALUE_ATTRIBUTE));
- } else {
- NodeList nl = element.getChildNodes();
- for (int i = 0; i < nl.getLength(); i++) {
- Node node = nl.item(i);
- if (node instanceof Element) {
- Element e = (Element) node;
- if (isBlueprintNamespace(node.getNamespaceURI()) && nodeNameEquals(node, DESCRIPTION_ELEMENT)) {
- // Ignore description elements
- } else {
- return parseValueGroup(e, enclosingComponent, true);
- }
+ values[0] = new RefMetadataImpl(element.getAttribute(REF_ATTRIBUTE));
+ }
+
+ if (element.hasAttribute(VALUE_ATTRIBUTE)) {
+ values[1] = new ValueMetadataImpl(element.getAttribute(VALUE_ATTRIBUTE));
+ }
+
+ NodeList nl = element.getChildNodes();
+ for (int i = 0; i < nl.getLength(); i++) {
+ Node node = nl.item(i);
+ if (node instanceof Element) {
+ Element e = (Element) node;
+ if (isBlueprintNamespace(node.getNamespaceURI()) && nodeNameEquals(node, DESCRIPTION_ELEMENT)) {
+ // Ignore description elements
+ } else {
+ values[2] = parseValueGroup(e, enclosingComponent, true);
+ break;
}
}
}
- throw new ComponentDefinitionException("One of " + REF_ATTRIBUTE + " attribute, " + VALUE_ATTRIBUTE + " attribute or sub element must be set");
+
+ Metadata value = null;
+ for (Metadata v : values) {
+ if (v != null) {
+ if (value == null) {
+ value = v;
+ } else {
+ throw new ComponentDefinitionException("Only one of " + REF_ATTRIBUTE + " attribute, " + VALUE_ATTRIBUTE + " attribute or sub element must be set");
+ }
+ }
+ }
+
+ if (value == null) {
+ throw new ComponentDefinitionException("One of " + REF_ATTRIBUTE + " attribute, " + VALUE_ATTRIBUTE + " attribute or sub element must be set");
+ }
+
+ return value;
}
private Metadata parseValueGroup(Element element, ComponentMetadata enclosingComponent, boolean allowNull) {