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) {