Repository: ant-ivy
Updated Branches:
  refs/heads/master 4ab65afd9 -> 658a8d80b


IVY-1448 Use the descriptor URL to construct an URI, in OSGiManifestParser, 
instead of using the descriptor resource's name


Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/b308d598
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/b308d598
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/b308d598

Branch: refs/heads/master
Commit: b308d598b603056e3ff7e8d53e099b677d4e8d38
Parents: 7a8d27f
Author: Jaikiran Pai <[email protected]>
Authored: Thu May 18 12:57:01 2017 +0530
Committer: Jaikiran Pai <[email protected]>
Committed: Thu May 18 12:57:01 2017 +0530

----------------------------------------------------------------------
 .../ivy/osgi/core/OSGiManifestParser.java       | 18 +++++++++++----
 .../parser/xml/XmlModuleDescriptorParser.java   |  2 +-
 .../ivy/osgi/core/OSGiManifestParserTest.java   | 23 ++++++++++++++++++++
 .../osgi/module1/META-INF/MANIFEST.MF           |  3 +++
 4 files changed, 41 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/b308d598/src/java/org/apache/ivy/osgi/core/OSGiManifestParser.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/ivy/osgi/core/OSGiManifestParser.java 
b/src/java/org/apache/ivy/osgi/core/OSGiManifestParser.java
index 66cced1..e331161 100644
--- a/src/java/org/apache/ivy/osgi/core/OSGiManifestParser.java
+++ b/src/java/org/apache/ivy/osgi/core/OSGiManifestParser.java
@@ -62,14 +62,24 @@ public class OSGiManifestParser implements 
ModuleDescriptorParser {
 
     public ModuleDescriptor parseDescriptor(ParserSettings ivySettings, URL 
descriptorURL,
             Resource res, boolean validate) throws ParseException, IOException 
{
-        Manifest m = new Manifest(res.openStream());
-        BundleInfo bundleInfo = ManifestParser.parseManifest(m);
+        final InputStream resourceStream = res.openStream();
+        final Manifest manifest;
         try {
-            bundleInfo.addArtifact(new BundleArtifact(false, new 
URI(res.getName()), null));
+            manifest = new Manifest(resourceStream);
+        } finally {
+            try {
+                resourceStream.close();
+            } catch (Exception e) {
+                // ignore
+            }
+        }
+        BundleInfo bundleInfo = ManifestParser.parseManifest(manifest);
+        try {
+            bundleInfo.addArtifact(new BundleArtifact(false, 
descriptorURL.toURI(), null));
         } catch (URISyntaxException e) {
             throw new RuntimeException("Unsupported repository, resources 
names are not uris", e);
         }
-        return BundleInfoAdapter.toModuleDescriptor(this, null, bundleInfo, m, 
profileProvider);
+        return BundleInfoAdapter.toModuleDescriptor(this, null, bundleInfo, 
manifest, profileProvider);
     }
 
     public void toIvyFile(InputStream is, Resource res, File destFile, 
ModuleDescriptor md)

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/b308d598/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java 
b/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
index 5e2a073..1a247bb 100644
--- a/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
+++ b/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java
@@ -699,7 +699,7 @@ public class XmlModuleDescriptorParser extends 
AbstractModuleDescriptorParser {
             FileResource res = new FileResource(null, file);
             ModuleDescriptorParser parser = 
ModuleDescriptorParserRegistry.getInstance().getParser(
                 res);
-            return parser.parseDescriptor(getSettings(), file.toURL(), res, 
isValidate());
+            return parser.parseDescriptor(getSettings(), file.toURI().toURL(), 
res, isValidate());
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/b308d598/test/java/org/apache/ivy/osgi/core/OSGiManifestParserTest.java
----------------------------------------------------------------------
diff --git a/test/java/org/apache/ivy/osgi/core/OSGiManifestParserTest.java 
b/test/java/org/apache/ivy/osgi/core/OSGiManifestParserTest.java
index 7b37ba4..e0ad9c8 100644
--- a/test/java/org/apache/ivy/osgi/core/OSGiManifestParserTest.java
+++ b/test/java/org/apache/ivy/osgi/core/OSGiManifestParserTest.java
@@ -18,12 +18,16 @@
 package org.apache.ivy.osgi.core;
 
 import java.io.File;
+import java.net.URL;
 import java.util.Arrays;
 
 import org.apache.ivy.core.module.descriptor.Configuration;
 import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
 import org.apache.ivy.core.settings.IvySettings;
 import org.apache.ivy.plugins.parser.AbstractModuleDescriptorParserTester;
+import org.apache.ivy.plugins.parser.ParserSettings;
+import org.apache.ivy.plugins.repository.Resource;
+import org.apache.ivy.plugins.repository.file.FileResource;
 import org.apache.ivy.util.DefaultMessageLogger;
 import org.apache.ivy.util.Message;
 
@@ -58,4 +62,23 @@ public class OSGiManifestParserTest extends 
AbstractModuleDescriptorParserTester
         assertNotNull(md.getDependencies());
         assertEquals(0, md.getDependencies().length);
     }
+
+    /**
+     * Tests that the {@link 
OSGiManifestParser#parseDescriptor(ParserSettings, URL, Resource, boolean)} 
works fine for descriptors
+     * that are backed by {@link FileResource}
+     *
+     * @throws Exception
+     */
+    public void testFileResource() throws Exception {
+        final File manifestFile = new 
File("test/repositories/osgi/module1/META-INF/MANIFEST.MF");
+        assertTrue("Manifest file is either missing or not a file at " + 
manifestFile.getAbsolutePath(), manifestFile.isFile());
+
+        final Resource manifestFileResource = new FileResource(null, 
manifestFile);
+        final ModuleDescriptor md = 
OSGiManifestParser.getInstance().parseDescriptor(settings, 
manifestFile.toURI().toURL(), manifestFileResource, true);
+
+        assertNotNull("Module descriptor created through a OSGi parser was 
null", md);
+        assertEquals("Unexpected organization name in module descriptor 
created through a OSGi parser", "bundle", 
md.getModuleRevisionId().getOrganisation());
+        assertEquals("Unexpected module name in module descriptor created 
through a OSGi parser", "module1", md.getModuleRevisionId().getName());
+        assertEquals("Unexpected version in module descriptor created through 
a OSGi parser", "1.2.3", md.getModuleRevisionId().getRevision());
+    }
 }

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/b308d598/test/repositories/osgi/module1/META-INF/MANIFEST.MF
----------------------------------------------------------------------
diff --git a/test/repositories/osgi/module1/META-INF/MANIFEST.MF 
b/test/repositories/osgi/module1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c2c8bfd
--- /dev/null
+++ b/test/repositories/osgi/module1/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Bundle-SymbolicName: module1
+Bundle-Version: 1.2.3
+

Reply via email to