Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 52172 invoked from network); 16 Jul 2009 05:47:26 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 16 Jul 2009 05:47:26 -0000 Received: (qmail 84170 invoked by uid 500); 16 Jul 2009 05:48:32 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 84093 invoked by uid 500); 16 Jul 2009 05:48:31 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 84084 invoked by uid 99); 16 Jul 2009 05:48:31 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 16 Jul 2009 05:48:31 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 16 Jul 2009 05:48:27 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id BF5432388872; Thu, 16 Jul 2009 05:48:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r794542 - /geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/Parser.java Date: Thu, 16 Jul 2009 05:48:06 -0000 To: scm@geronimo.apache.org From: gawor@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090716054806.BF5432388872@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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) {