You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by xa...@apache.org on 2008/02/29 19:44:26 UTC
svn commit: r632405 - in /ant/ivy/core/trunk: ./
src/java/org/apache/ivy/plugins/parser/xml/
test/java/org/apache/ivy/plugins/parser/xml/
Author: xavier
Date: Fri Feb 29 10:44:20 2008
New Revision: 632405
URL: http://svn.apache.org/viewvc?rev=632405&view=rev
Log:
FIX: XML schema ambiguity (IVY-750)
Modified:
ant/ivy/core/trunk/CHANGES.txt
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml
Modified: ant/ivy/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=632405&r1=632404&r2=632405&view=diff
==============================================================================
--- ant/ivy/core/trunk/CHANGES.txt (original)
+++ ant/ivy/core/trunk/CHANGES.txt Fri Feb 29 10:44:20 2008
@@ -66,6 +66,7 @@
=====================================
- IMPROVEMENT: Make Ivy standalone runnable with no required dependencies (IVY-757)
+- FIX: XML schema ambiguity (IVY-750)
- FIX: ivy-resolve fails when a project has different dependencies in different branches (IVY-717)
- FIX: PublishEventsTest fails when Ivy sources are located in a directory with a + (IVY-755)
- FIX: XML entity parsing does not work properly (IVY-737) (thanks to Patrick Woodworth)
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java?rev=632405&r1=632404&r2=632405&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java Fri Feb 29 10:44:20 2008
@@ -179,6 +179,8 @@
private static final int DEPS = 10;
private static final int DESCRIPTION = 11;
+
+ private static final int EXTRA_INFO = 12;
private int state = NONE;
@@ -259,7 +261,10 @@
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
try {
- if ("ivy-module".equals(qName)) {
+ if (state == DESCRIPTION) {
+ //make sure we don't interpret any tag while in description tag
+ return;
+ } else if ("ivy-module".equals(qName)) {
ivyModuleStarted(attributes);
} else if ("info".equals(qName)) {
infoStarted(attributes);
@@ -269,8 +274,13 @@
} else if (state == INFO && "description".equals(qName)) {
md.setHomePage(ivy.substitute(attributes.getValue("homepage")));
state = DESCRIPTION;
- } else if (state == INFO) {
+ } else if (state == INFO && "ivyauthor".equals(qName)) {
+ // nothing to do, we don't store this
+ } else if (state == INFO && "repository".equals(qName)) {
+ // nothing to do, we don't store this
+ } else if (state == INFO && isOtherNamespace(qName)) {
buffer = new StringBuffer();
+ state = EXTRA_INFO;
} else if ("configurations".equals(qName)) {
configurationStarted(attributes);
} else if ("publications".equals(qName)) {
@@ -303,8 +313,8 @@
managerStarted(attributes);
} else if ("include".equals(qName) && state == CONF) {
includeConfStarted(attributes);
- } else if (validate && state != INFO) {
- addError("unknwon tag " + qName);
+ } else if (validate && state != EXTRA_INFO && state != DESCRIPTION) {
+ addError("unknown tag " + qName);
}
} catch (Exception ex) {
if (ex instanceof SAXException) {
@@ -315,6 +325,10 @@
}
}
+ private boolean isOtherNamespace(String qName) {
+ return qName.indexOf(':') != -1;
+ }
+
private void managerStarted(Attributes attributes) {
String org = ivy.substitute(attributes.getValue("org"));
org = org == null ? PatternMatcher.ANY_EXPRESSION : org;
@@ -745,20 +759,21 @@
}
confAware = null;
state = DEPS;
- } else if ("dependency".equals(qName)) {
+ } else if ("dependency".equals(qName) && state == DEP) {
if (dd.getModuleConfigurations().length == 0) {
parseDepsConfs(getDefaultConf(), dd);
}
state = DEPS;
- } else if ("dependencies".equals(qName)) {
+ } else if ("dependencies".equals(qName) && state == DEPS) {
state = NONE;
} else if (state == INFO && "info".equals(qName)) {
state = NONE;
- } else if (state == INFO && "description".equals(qName)) {
+ } else if (state == DESCRIPTION && "description".equals(qName)) {
state = INFO;
- } else if (state == INFO) {
- md.addExtraInfo(qName, buffer==null?"":buffer.toString());
+ } else if (state == EXTRA_INFO) {
+ md.addExtraInfo(qName, buffer == null ? "" : buffer.toString());
buffer = null;
+ state = INFO;
}
}
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java?rev=632405&r1=632404&r2=632405&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorWriter.java Fri Feb 29 10:44:20 2008
@@ -382,11 +382,12 @@
printExtraAttributes(md, out, "\t\t");
out.println();
}
- if (md.getExtraInfo().size()>0) {
+ if (md.getExtraInfo().size() > 0) {
out.println("\t>");
for (Iterator it = md.getExtraInfo().entrySet().iterator(); it.hasNext();) {
Map.Entry extraDescr = (Map.Entry) it.next();
- if (extraDescr.getValue()==null || ((String)extraDescr.getValue()).length()==0) {
+ if (extraDescr.getValue() == null
+ || ((String) extraDescr.getValue()).length() == 0) {
continue;
}
out.print("\t\t<");
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd?rev=632405&r1=632404&r2=632405&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/xml/ivy.xsd Fri Feb 29 10:44:20 2008
@@ -71,7 +71,7 @@
<xs:attribute name="homepage" type="xs:string"/>
</xs:complexType>
</xs:element>
- <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
+ <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:attribute name="organisation" type="xs:string" use="required"/>
<xs:attribute name="module" type="xs:string" use="required"/>
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java?rev=632405&r1=632404&r2=632405&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParserTest.java Fri Feb 29 10:44:20 2008
@@ -184,6 +184,9 @@
assertEquals("http://www.my.org/mymodule/mylicense.html", licenses[0].getUrl());
assertEquals("http://www.my.org/mymodule/", md.getHomePage());
+
+ assertEquals(1, md.getExtraInfo().size());
+ assertEquals("56576", md.getExtraInfo().get("e:someExtra"));
Configuration[] confs = md.getConfigurations();
assertNotNull(confs);
@@ -434,7 +437,15 @@
assertEquals(Arrays.asList(new String[] {"myconf1", "myconf2", "myconf3", "myconf4",
"myoldconf"}), Arrays.asList(rules[1].getConfigurations()));
}
-
+
+ public void testFullNoValidation() throws Exception {
+ ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor(settings,
+ getClass().getResource("test.xml"), false);
+ assertNotNull(md);
+ assertEquals(1, md.getExtraInfo().size());
+ assertEquals("56576", md.getExtraInfo().get("e:someExtra"));
+ }
+
public void testBug60() throws Exception {
ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor(settings,
getClass().getResource("test-bug60.xml"), true);
Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml?rev=632405&r1=632404&r2=632405&view=diff
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml (original)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/plugins/parser/xml/test.xml Fri Feb 29 10:44:20 2008
@@ -32,12 +32,12 @@
<repository name="ivyrep" url="http://www.jayasoft.fr/org/ivyrep/" pattern="[organisation]/[module]/ivy-[revision].xml" ivys="true" artifacts="false"/>
- <e:someExtra>56576</e:someExtra>
-
<description homepage="http://www.my.org/mymodule/">
This module is <b>great</b> !<br/>
You can use it especially with myconf1 and myconf2, and myconf4 is not too bad too.
</description>
+
+ <e:someExtra>56576</e:someExtra>
</info>
<configurations>
<conf name="myconf1" description="desc 1" e:attr2="value2"/>