Return-Path: Delivered-To: apmail-jakarta-ant-user-archive@apache.org Received: (qmail 24210 invoked from network); 6 May 2002 19:24:26 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 6 May 2002 19:24:26 -0000 Received: (qmail 7284 invoked by uid 97); 6 May 2002 19:24:01 -0000 Delivered-To: qmlist-jakarta-archive-ant-user@jakarta.apache.org Received: (qmail 7265 invoked by uid 97); 6 May 2002 19:24:00 -0000 Mailing-List: contact ant-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Ant Users List" Reply-To: "Ant Users List" Delivered-To: mailing list ant-user@jakarta.apache.org Received: (qmail 7247 invoked by uid 98); 6 May 2002 19:23:59 -0000 X-Antivirus: nagoya (v4198 created Apr 24 2002) Message-ID: From: Alexey Solofnenko To: Ant Users List Subject: [SUBMIT] to read XML file Date: Mon, 6 May 2002 12:23:42 -0700 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C1F533.88411B70" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N ------_=_NextPart_000_01C1F533.88411B70 Content-Type: text/plain; charset="utf-8" Hello, I have tweaked task a little to load values from XML file. The loaded property names are: node1/node2/node2.Attribute or node/1/node2#TEXT. If there are several nodes with the same names the first node's value will be taken. Attached please find the source and a diff from version 1.48 . This is an example how it works: build2.xml: Basedir=${project.basedir} Target.name=${project/target.name} Message=${project/target/echo.message} Text: ${project/target/echo#TEXT} ====================================================== Basedir=${project.basedir} Target.name=${project/target.name} Message=${project/target/echo.message} Output: Buildfile: build2.xml main: [echo] Target.name=main [echo] Basedir=. [echo] Target.name=main [echo] Message=Target.name=main [echo] [echo] Text: [echo] Basedir=. [echo] Target.name=main [echo] Message=Target.name=main [echo] [echo] ====================================================== [echo] BUILD SUCCESSFUL Total time: 1 second -- { http://trelony.cjb.net/ } Alexey N. Solofnenko { http://www.inventigo.com/ } Inventigo LLC Pleasant Hill, CA (GMT-8 usually) ------_=_NextPart_000_01C1F533.88411B70 Content-Type: application/octet-stream; name="Property.java" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="Property.java" /*=0A= * The Apache Software License, Version 1.1=0A= *=0A= * Copyright (c) 2000-2002 The Apache Software Foundation. All = rights=0A= * reserved.=0A= *=0A= * Redistribution and use in source and binary forms, with or = without=0A= * modification, are permitted provided that the following = conditions=0A= * are met:=0A= *=0A= * 1. Redistributions of source code must retain the above copyright=0A= * notice, this list of conditions and the following disclaimer.=0A= *=0A= * 2. Redistributions in binary form must reproduce the above = copyright=0A= * notice, this list of conditions and the following disclaimer = in=0A= * the documentation and/or other materials provided with the=0A= * distribution.=0A= *=0A= * 3. The end-user documentation included with the redistribution, = if=0A= * any, must include the following acknowlegement:=0A= * "This product includes software developed by the=0A= * Apache Software Foundation (http://www.apache.org/)."=0A= * Alternately, this acknowlegement may appear in the software = itself,=0A= * if and wherever such third-party acknowlegements normally = appear.=0A= *=0A= * 4. The names "The Jakarta Project", "Ant", and "Apache Software=0A= * Foundation" must not be used to endorse or promote products = derived=0A= * from this software without prior written permission. For = written=0A= * permission, please contact apache@apache.org.=0A= *=0A= * 5. Products derived from this software may not be called "Apache"=0A= * nor may "Apache" appear in their names without prior written=0A= * permission of the Apache Group.=0A= *=0A= * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED=0A= * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES=0A= * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE=0A= * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR=0A= * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,=0A= * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT=0A= * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF=0A= * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED = AND=0A= * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT = LIABILITY,=0A= * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY = OUT=0A= * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY = OF=0A= * SUCH DAMAGE.=0A= * = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= *=0A= * This software consists of voluntary contributions made by many=0A= * individuals on behalf of the Apache Software Foundation. For = more=0A= * information on the Apache Software Foundation, please see=0A= * .=0A= */=0A= =0A= package org.apache.tools.ant.taskdefs;=0A= =0A= import org.apache.tools.ant.Task;=0A= import org.apache.tools.ant.BuildException;=0A= import org.apache.tools.ant.Project;=0A= import org.apache.tools.ant.AntClassLoader;=0A= import org.apache.tools.ant.ProjectHelper;=0A= import org.apache.tools.ant.types.Path;=0A= import org.apache.tools.ant.types.Reference;=0A= import java.io.File;=0A= import java.io.FileInputStream;=0A= import java.io.IOException;=0A= import java.io.InputStream;=0A= import java.util.Properties;=0A= import java.util.Vector;=0A= import java.util.Enumeration;=0A= import org.xml.sax.*;=0A= import org.xml.sax.helpers.*;=0A= =0A= /**=0A= * Will set a Project property. Used to be a hack in ProjectHelper=0A= * Will not override values set by the command line or parent = projects.=0A= *=0A= * @author costin@dnt.ro=0A= * @author Sam Ruby=0A= * @author Glenn McAllister=0A= * @since Ant 1.1=0A= */=0A= public class Property extends Task {=0A= =0A= protected String name;=0A= protected String value;=0A= protected File file;=0A= protected File xmlFile;=0A= protected String resource;=0A= protected Path classpath;=0A= protected String env;=0A= protected Reference ref;=0A= protected String prefix;=0A= =0A= protected boolean userProperty; // set read-only properties=0A= =0A= public Property() {=0A= super();=0A= }=0A= =0A= /**=0A= * @since Ant 1.5=0A= */=0A= protected Property(boolean userProperty) {=0A= this.userProperty =3D userProperty;=0A= }=0A= =0A= public void setName(String name) {=0A= this.name =3D name;=0A= }=0A= =0A= public String getName() {=0A= return name;=0A= }=0A= =0A= public void setLocation(File location) {=0A= setValue(location.getAbsolutePath());=0A= }=0A= =0A= public void setValue(String value) {=0A= this.value =3D value;=0A= }=0A= =0A= public String getValue() {=0A= return value;=0A= }=0A= =0A= public void setFile(File file) {=0A= this.file =3D file;=0A= }=0A= =0A= public File getFile() {=0A= return file;=0A= }=0A= =0A= public void setXmlFile(File xmlFile) {=0A= this.xmlFile=3DxmlFile;=0A= }=0A= =0A= public File getXmlFile() {=0A= return xmlFile;=0A= }=0A= =0A= public void setPrefix(String prefix) {=0A= this.prefix =3D prefix;=0A= if (!prefix.endsWith(".")) {=0A= this.prefix +=3D ".";=0A= }=0A= }=0A= =0A= public void setRefid(Reference ref) {=0A= this.ref =3D ref;=0A= }=0A= =0A= public Reference getRefid() {=0A= return ref;=0A= }=0A= =0A= public void setResource(String resource) {=0A= this.resource =3D resource;=0A= }=0A= =0A= public String getResource() {=0A= return resource;=0A= }=0A= =0A= public void setEnvironment(String env) {=0A= this.env =3D env;=0A= }=0A= =0A= public String getEnvironment() {=0A= return env;=0A= }=0A= =0A= public void setClasspath(Path classpath) {=0A= if (this.classpath =3D=3D null) {=0A= this.classpath =3D classpath;=0A= } else {=0A= this.classpath.append(classpath);=0A= }=0A= }=0A= =0A= public Path createClasspath() {=0A= if (this.classpath =3D=3D null) {=0A= this.classpath =3D new Path(project);=0A= }=0A= return this.classpath.createPath();=0A= }=0A= =0A= public void setClasspathRef(Reference r) {=0A= createClasspath().setRefid(r);=0A= }=0A= =0A= /**=0A= * @deprecated This was never a supported feature and has been=0A= * deprecated without replacement=0A= */=0A= public void setUserProperty(boolean userProperty) {=0A= log("DEPRECATED: Ignoring request to set user property in = Property"=0A= + " task.", Project.MSG_WARN);=0A= }=0A= =0A= public String toString() {=0A= return value =3D=3D null ? "" : value;=0A= }=0A= =0A= public void execute() throws BuildException {=0A= if (name !=3D null) {=0A= if (value =3D=3D null && ref =3D=3D null) {=0A= throw new BuildException("You must specify value, = location or "=0A= + "refid with the name = attribute",=0A= location);=0A= }=0A= } else {=0A= if (file =3D=3D null && xmlFile =3D=3D null && resource = =3D=3D null && env =3D=3D null) {=0A= throw new BuildException("You must specify file, xml = file, resource or "=0A= + "environment when not using = the "=0A= + "name attribute", = location);=0A= }=0A= }=0A= =0A= if (file =3D=3D null && xmlFile =3D=3D null && resource =3D=3D = null && prefix !=3D null) {=0A= throw new BuildException("Prefix is only valid when loading = from "=0A= + "a file or resource", = location);=0A= }=0A= =0A= if ((name !=3D null) && (value !=3D null)) {=0A= addProperty(name, value);=0A= }=0A= =0A= if (file !=3D null) {=0A= loadFile(file);=0A= }=0A= =0A= if (xmlFile !=3D null) {=0A= loadXmlFile(xmlFile);=0A= }=0A= =0A= if (resource !=3D null) {=0A= loadResource(resource);=0A= }=0A= =0A= if (env !=3D null) {=0A= loadEnvironment(env);=0A= }=0A= =0A= if ((name !=3D null) && (ref !=3D null)) {=0A= Object obj =3D ref.getReferencedObject(getProject());=0A= if (obj !=3D null) {=0A= addProperty(name, obj.toString());=0A= }=0A= }=0A= }=0A= =0A= protected void loadFile(File file) throws BuildException {=0A= Properties props =3D new Properties();=0A= log("Loading " + file.getAbsolutePath(), = Project.MSG_VERBOSE);=0A= try {=0A= if (file.exists()) {=0A= FileInputStream fis =3D new FileInputStream(file);=0A= try {=0A= props.load(fis);=0A= } finally {=0A= if (fis !=3D null) {=0A= fis.close();=0A= }=0A= }=0A= addProperties(props);=0A= } else {=0A= log("Unable to find property file: " + = file.getAbsolutePath(),=0A= Project.MSG_VERBOSE);=0A= }=0A= } catch (IOException ex) {=0A= throw new BuildException(ex, location);=0A= }=0A= }=0A= =0A= protected void loadXmlFile(File file) throws BuildException {=0A= final Properties props =3D new Properties();=0A= log("Loading " + file.getAbsolutePath(), = Project.MSG_VERBOSE);=0A= try {=0A= if (file.exists()) {=0A= XMLReader parser =3D = XMLReaderFactory.createXMLReader();=0A= parser.setContentHandler(=0A= new DefaultHandler() {=0A= private String currPath =3D "";=0A= private boolean hadText =3D false;=0A= public void startElement (String uri, String = localName, String qName, Attributes attributes) {=0A= if (currPath.length()>0) = currPath=3DcurrPath+"/";=0A= currPath=3DcurrPath+localName;=0A= for (int i=3D0, l=3Dattributes.getLength(); = i nameLength ? 1 : 0));=0A= hadText =3D false;=0A= }=0A= }=0A= );=0A= FileInputStream fis =3D new FileInputStream(file);=0A= parser.parse(new InputSource(fis));=0A= fis.close();=0A= addProperties(props);=0A= } else {=0A= log("Unable to find xml file: " + = file.getAbsolutePath(),=0A= Project.MSG_VERBOSE);=0A= }=0A= } catch (SAXException ex) {=0A= throw new BuildException(ex, location);=0A= } catch (IOException ex) {=0A= throw new BuildException(ex, location);=0A= }=0A= }=0A= =0A= protected void loadResource(String name) {=0A= Properties props =3D new Properties();=0A= log("Resource Loading " + name, Project.MSG_VERBOSE);=0A= InputStream is =3D null;=0A= try {=0A= ClassLoader cL =3D null;=0A= =0A= if (classpath !=3D null) {=0A= cL =3D new AntClassLoader(project, classpath);=0A= } else {=0A= cL =3D this.getClass().getClassLoader();=0A= }=0A= =0A= if (cL =3D=3D null) {=0A= is =3D ClassLoader.getSystemResourceAsStream(name);=0A= } else {=0A= is =3D cL.getResourceAsStream(name);=0A= }=0A= =0A= if (is !=3D null) {=0A= props.load(is);=0A= addProperties(props);=0A= } else {=0A= log("Unable to find resource " + name, = Project.MSG_WARN);=0A= }=0A= } catch (IOException ex) {=0A= throw new BuildException(ex, location);=0A= } finally {=0A= if (is !=3D null) {=0A= try {=0A= is.close();=0A= } catch (IOException e) {}=0A= }=0A= }=0A= =0A= }=0A= =0A= protected void loadEnvironment(String prefix) {=0A= Properties props =3D new Properties();=0A= if (!prefix.endsWith(".")) {=0A= prefix +=3D ".";=0A= }=0A= log("Loading Environment " + prefix, Project.MSG_VERBOSE);=0A= Vector osEnv =3D Execute.getProcEnvironment();=0A= for (Enumeration e =3D osEnv.elements(); e.hasMoreElements();) = {=0A= String entry =3D (String) e.nextElement();=0A= int pos =3D entry.indexOf('=3D');=0A= if (pos =3D=3D -1) {=0A= log("Ignoring: " + entry, Project.MSG_WARN);=0A= } else {=0A= props.put(prefix + entry.substring(0, pos),=0A= entry.substring(pos + 1));=0A= }=0A= }=0A= addProperties(props);=0A= }=0A= =0A= protected void addProperties(Properties props) {=0A= resolveAllProperties(props);=0A= Enumeration e =3D props.keys();=0A= while (e.hasMoreElements()) {=0A= String name =3D (String) e.nextElement();=0A= String value =3D props.getProperty(name);=0A= =0A= String v =3D project.replaceProperties(value);=0A= =0A= if (prefix !=3D null) {=0A= name =3D prefix + name;=0A= }=0A= =0A= addProperty(name, v);=0A= }=0A= }=0A= =0A= protected void addProperty(String n, String v) {=0A= if (userProperty) {=0A= if (project.getUserProperty(n) =3D=3D null) {=0A= project.setUserProperty(n, v);=0A= } else {=0A= log("Override ignored for " + n, = Project.MSG_VERBOSE);=0A= }=0A= } else {=0A= project.setNewProperty(n, v);=0A= }=0A= }=0A= =0A= private void resolveAllProperties(Properties props) throws = BuildException {=0A= for (Enumeration e =3D props.keys(); e.hasMoreElements();) {=0A= String name =3D (String) e.nextElement();=0A= String value =3D props.getProperty(name);=0A= =0A= boolean resolved =3D false;=0A= while (!resolved) {=0A= Vector fragments =3D new Vector();=0A= Vector propertyRefs =3D new Vector();=0A= ProjectHelper.parsePropertyString(value, fragments,=0A= propertyRefs);=0A= =0A= resolved =3D true;=0A= if (propertyRefs.size() !=3D 0) {=0A= StringBuffer sb =3D new StringBuffer();=0A= Enumeration i =3D fragments.elements();=0A= Enumeration j =3D propertyRefs.elements();=0A= while (i.hasMoreElements()) {=0A= String fragment =3D (String) = i.nextElement();=0A= if (fragment =3D=3D null) {=0A= String propertyName =3D (String) = j.nextElement();=0A= if (propertyName.equals(name)) {=0A= throw new BuildException("Property " + = name=0A= + " was = circularly "=0A= + = "defined.");=0A= }=0A= fragment =3D = getProject().getProperty(propertyName);=0A= if (fragment =3D=3D null) {=0A= if (props.containsKey(propertyName)) = {=0A= fragment =3D = props.getProperty(propertyName);=0A= resolved =3D false;=0A= } else {=0A= fragment =3D "${" + propertyName + = "}";=0A= }=0A= }=0A= }=0A= sb.append(fragment);=0A= }=0A= value =3D sb.toString();=0A= props.put(name, value);=0A= }=0A= }=0A= }=0A= }=0A= }=0A= ------_=_NextPart_000_01C1F533.88411B70 Content-Type: application/octet-stream; name="Property.java.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="Property.java.diff" Index: Property.java=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: = /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Prope= rty.java,v=0A= retrieving revision 1.48=0A= diff -c -r1.48 Property.java=0A= *** Property.java 15 Apr 2002 13:36:17 -0000 1.48=0A= --- Property.java 6 May 2002 19:19:07 -0000=0A= ***************=0A= *** 68,73 ****=0A= --- 68,75 ----=0A= import java.util.Properties;=0A= import java.util.Vector;=0A= import java.util.Enumeration;=0A= + import org.xml.sax.*;=0A= + import org.xml.sax.helpers.*;=0A= =0A= /**=0A= * Will set a Project property. Used to be a hack in ProjectHelper=0A= ***************=0A= *** 83,88 ****=0A= --- 85,91 ----=0A= protected String name;=0A= protected String value;=0A= protected File file;=0A= + protected File xmlFile;=0A= protected String resource;=0A= protected Path classpath;=0A= protected String env;=0A= ***************=0A= *** 129,135 ****=0A= public File getFile() {=0A= return file;=0A= }=0A= ! =0A= public void setPrefix(String prefix) {=0A= this.prefix =3D prefix;=0A= if (!prefix.endsWith(".")) {=0A= --- 132,146 ----=0A= public File getFile() {=0A= return file;=0A= }=0A= ! =0A= ! public void setXmlFile(File xmlFile) {=0A= ! this.xmlFile=3DxmlFile;=0A= ! }=0A= ! =0A= ! public File getXmlFile() {=0A= ! return xmlFile;=0A= ! }=0A= ! =0A= public void setPrefix(String prefix) {=0A= this.prefix =3D prefix;=0A= if (!prefix.endsWith(".")) {=0A= ***************=0A= *** 201,214 ****=0A= location);=0A= }=0A= } else {=0A= ! if (file =3D=3D null && resource =3D=3D null && env = =3D=3D null) {=0A= ! throw new BuildException("You must specify file, = resource or "=0A= + "environment when not = using the "=0A= + "name attribute", = location);=0A= }=0A= }=0A= ! =0A= ! if (file =3D=3D null && resource =3D=3D null && prefix !=3D = null) {=0A= throw new BuildException("Prefix is only valid when = loading from "=0A= + "a file or resource", = location);=0A= }=0A= --- 212,225 ----=0A= location);=0A= }=0A= } else {=0A= ! if (file =3D=3D null && xmlFile =3D=3D null && resource = =3D=3D null && env =3D=3D null) {=0A= ! throw new BuildException("You must specify file, xml = file, resource or "=0A= + "environment when not = using the "=0A= + "name attribute", = location);=0A= }=0A= }=0A= ! =0A= ! if (file =3D=3D null && xmlFile =3D=3D null && resource = =3D=3D null && prefix !=3D null) {=0A= throw new BuildException("Prefix is only valid when = loading from "=0A= + "a file or resource", = location);=0A= }=0A= ***************=0A= *** 221,226 ****=0A= --- 232,241 ----=0A= loadFile(file);=0A= }=0A= =0A= + if (xmlFile !=3D null) {=0A= + loadXmlFile(xmlFile);=0A= + }=0A= + =0A= if (resource !=3D null) {=0A= loadResource(resource);=0A= }=0A= ***************=0A= *** 260,265 ****=0A= --- 275,333 ----=0A= }=0A= }=0A= =0A= + protected void loadXmlFile(File file) throws BuildException {=0A= + final Properties props =3D new Properties();=0A= + log("Loading " + file.getAbsolutePath(), = Project.MSG_VERBOSE);=0A= + try {=0A= + if (file.exists()) {=0A= + XMLReader parser =3D = XMLReaderFactory.createXMLReader();=0A= + parser.setContentHandler(=0A= + new DefaultHandler() {=0A= + private String currPath =3D "";=0A= + private boolean hadText =3D false;=0A= + public void startElement (String uri, String = localName, String qName, Attributes attributes) {=0A= + if (currPath.length()>0) = currPath=3DcurrPath+"/";=0A= + currPath=3DcurrPath+localName;=0A= + for (int i=3D0, = l=3Dattributes.getLength(); i nameLength ? 1 : 0));=0A= + hadText =3D false;=0A= + }=0A= + }=0A= + );=0A= + FileInputStream fis =3D new FileInputStream(file);=0A= + parser.parse(new InputSource(fis));=0A= + fis.close();=0A= + addProperties(props);=0A= + } else {=0A= + log("Unable to find xml file: " + = file.getAbsolutePath(),=0A= + Project.MSG_VERBOSE);=0A= + }=0A= + } catch (SAXException ex) {=0A= + throw new BuildException(ex, location);=0A= + } catch (IOException ex) {=0A= + throw new BuildException(ex, location);=0A= + }=0A= + }=0A= + =0A= protected void loadResource(String name) {=0A= Properties props =3D new Properties();=0A= log("Resource Loading " + name, Project.MSG_VERBOSE);=0A= ***************=0A= *** 294,300 ****=0A= } catch (IOException e) {}=0A= }=0A= }=0A= ! =0A= }=0A= =0A= protected void loadEnvironment(String prefix) {=0A= --- 362,368 ----=0A= } catch (IOException e) {}=0A= }=0A= }=0A= ! =0A= }=0A= =0A= protected void loadEnvironment(String prefix) {=0A= ***************=0A= *** 355,361 ****=0A= while (!resolved) {=0A= Vector fragments =3D new Vector();=0A= Vector propertyRefs =3D new Vector();=0A= ! ProjectHelper.parsePropertyString(value, fragments, = =0A= propertyRefs);=0A= =0A= resolved =3D true;=0A= --- 423,429 ----=0A= while (!resolved) {=0A= Vector fragments =3D new Vector();=0A= Vector propertyRefs =3D new Vector();=0A= ! ProjectHelper.parsePropertyString(value, = fragments,=0A= propertyRefs);=0A= =0A= resolved =3D true;=0A= ***************=0A= *** 368,374 ****=0A= if (fragment =3D=3D null) {=0A= String propertyName =3D (String) = j.nextElement();=0A= if (propertyName.equals(name)) {=0A= ! throw new BuildException("Property " = + name =0A= + " was = circularly "=0A= + = "defined.");=0A= }=0A= --- 436,442 ----=0A= if (fragment =3D=3D null) {=0A= String propertyName =3D (String) = j.nextElement();=0A= if (propertyName.equals(name)) {=0A= ! throw new BuildException("Property " = + name=0A= + " was = circularly "=0A= + = "defined.");=0A= }=0A= ------_=_NextPart_000_01C1F533.88411B70 Content-Type: text/plain; charset=us-ascii -- To unsubscribe, e-mail: For additional commands, e-mail: ------_=_NextPart_000_01C1F533.88411B70--