You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ma...@apache.org on 2012/10/24 22:13:33 UTC
svn commit: r1401854 - in /ant/ivy/core/trunk/src/java/org/apache/ivy:
plugins/parser/m2/PomReader.java util/XMLHelper.java
Author: maartenc
Date: Wed Oct 24 20:13:32 2012
New Revision: 1401854
URL: http://svn.apache.org/viewvc?rev=1401854&view=rev
Log:
Attempt to fix IVY-1378 by converting all systemIds to URI's according to RFC 2396.
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java
ant/ivy/core/trunk/src/java/org/apache/ivy/util/XMLHelper.java
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java?rev=1401854&r1=1401853&r2=1401854&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomReader.java Wed Oct 24 20:13:32 2012
@@ -48,8 +48,6 @@ import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
-
-
/**
* Provides the method to read some data out of the DOM tree of a pom
* file.
@@ -91,8 +89,10 @@ public class PomReader {
public PomReader(URL descriptorURL, Resource res) throws IOException, SAXException {
InputStream stream = new AddDTDFilterInputStream(URLHandlerRegistry.getDefault().openStream(descriptorURL));
+ InputSource source = new InputSource(stream);
+ source.setSystemId(XMLHelper.toSystemId(descriptorURL));
try {
- Document pomDomDoc = XMLHelper.parseToDom(stream, res, new EntityResolver() {
+ Document pomDomDoc = XMLHelper.parseToDom(source, new EntityResolver() {
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
if ((systemId != null) && systemId.endsWith("m2-entities.ent")) {
@@ -109,12 +109,10 @@ public class PomReader {
}
parentElement = getFirstChildElement(projectElement , PARENT);
} finally {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- // ignore
- }
+ try {
+ stream.close();
+ } catch (IOException e) {
+ // ignore
}
}
}
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/util/XMLHelper.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/util/XMLHelper.java?rev=1401854&r1=1401853&r2=1401854&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/util/XMLHelper.java (original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/util/XMLHelper.java Wed Oct 24 20:13:32 2012
@@ -19,6 +19,8 @@ package org.apache.ivy.util;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
@@ -76,6 +78,17 @@ public abstract class XMLHelper {
return parser;
}
+ /**
+ * Convert an URL to a valid systemId according to RFC 2396.
+ */
+ public static String toSystemId(URL url) {
+ try {
+ return new URI(url.toExternalForm()).toASCIIString();
+ } catch (URISyntaxException e) {
+ return url.toExternalForm();
+ }
+ }
+
// IMPORTANT: validation errors are only notified to the given handler, and
// do not cause exception
// implement warning error and fatalError methods in handler to be informed
@@ -91,7 +104,7 @@ public abstract class XMLHelper {
InputStream xmlStream = URLHandlerRegistry.getDefault().openStream(xmlURL);
try {
InputSource inSrc = new InputSource(xmlStream);
- inSrc.setSystemId(xmlURL.toExternalForm());
+ inSrc.setSystemId(toSystemId(xmlURL));
parse(inSrc, schema, handler, lHandler);
} finally {
try {
@@ -187,19 +200,10 @@ public abstract class XMLHelper {
}
- public static Document parseToDom(
- InputStream stream, Resource res, EntityResolver entityResolver)
- throws IOException, SAXException {
+ public static Document parseToDom(InputSource source, EntityResolver entityResolver)
+ throws IOException, SAXException {
DocumentBuilder docBuilder = getDocBuilder(entityResolver);
- Document pomDomDoc;
- try {
- pomDomDoc = docBuilder.parse(stream, res.getName());
- } catch (SAXException e) {
- throw e;
- } finally {
- stream.close();
- }
- return pomDomDoc;
+ return docBuilder.parse(source);
}
public static DocumentBuilder getDocBuilder(EntityResolver entityResolver) {