You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apex.apache.org by pr...@apache.org on 2017/04/13 14:08:24 UTC

[1/2] apex-core git commit: APEXCORE-686 AppPackage fails when .apa contains zero length stored entry

Repository: apex-core
Updated Branches:
  refs/heads/master 077009e4c -> 01eb7926d


APEXCORE-686 AppPackage fails when .apa contains zero length stored entry


Project: http://git-wip-us.apache.org/repos/asf/apex-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/apex-core/commit/7420d69f
Tree: http://git-wip-us.apache.org/repos/asf/apex-core/tree/7420d69f
Diff: http://git-wip-us.apache.org/repos/asf/apex-core/diff/7420d69f

Branch: refs/heads/master
Commit: 7420d69fef5226eb83fc293bf91a4d949558fba6
Parents: 9054fd2
Author: Vlad Rozov <v....@datatorrent.com>
Authored: Thu Mar 30 18:16:03 2017 -0700
Committer: Vlad Rozov <v....@datatorrent.com>
Committed: Thu Mar 30 21:09:36 2017 -0700

----------------------------------------------------------------------
 .../datatorrent/stram/client/AppPackage.java    | 104 ++++++++++---------
 1 file changed, 55 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/apex-core/blob/7420d69f/engine/src/main/java/com/datatorrent/stram/client/AppPackage.java
----------------------------------------------------------------------
diff --git a/engine/src/main/java/com/datatorrent/stram/client/AppPackage.java b/engine/src/main/java/com/datatorrent/stram/client/AppPackage.java
index a4d0364..a606b06 100644
--- a/engine/src/main/java/com/datatorrent/stram/client/AppPackage.java
+++ b/engine/src/main/java/com/datatorrent/stram/client/AppPackage.java
@@ -35,9 +35,7 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
-import java.util.jar.JarInputStream;
 import java.util.jar.Manifest;
 
 import org.codehaus.jackson.JsonGenerator;
@@ -47,6 +45,8 @@ import org.codehaus.jackson.map.SerializerProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.exception.ExceptionUtils;
@@ -212,48 +212,49 @@ public class AppPackage implements Closeable
    */
   public AppPackage(InputStream input, File contentFolder, boolean processAppDirectory) throws IOException
   {
-    final JarInputStream jarInputStream = new JarInputStream(input);
+    try (final ZipArchiveInputStream zipArchiveInputStream =
+        new ZipArchiveInputStream(input, "UTF8", true, true)) {
 
-    if (contentFolder != null) {
-      FileUtils.forceMkdir(contentFolder);
-      cleanOnClose = false;
-    } else {
-      cleanOnClose = true;
-      contentFolder = Files.createTempDirectory("dt-appPackage-").toFile();
-    }
-    directory = contentFolder;
+      if (contentFolder != null) {
+        FileUtils.forceMkdir(contentFolder);
+        cleanOnClose = false;
+      } else {
+        cleanOnClose = true;
+        contentFolder = Files.createTempDirectory("dt-appPackage-").toFile();
+      }
+      directory = contentFolder;
 
-    Manifest manifest = jarInputStream.getManifest();
-    if (manifest == null) {
-      throw new IOException("Not a valid app package. MANIFEST.MF is not present.");
-    }
-    Attributes attr = manifest.getMainAttributes();
-    appPackageName = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_NAME);
-    appPackageVersion = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_VERSION);
-    appPackageGroupId = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_GROUP_ID);
-    dtEngineVersion = attr.getValue(ATTRIBUTE_DT_ENGINE_VERSION);
-    appPackageDisplayName = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_DISPLAY_NAME);
-    appPackageDescription = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_DESCRIPTION);
-    String classPathString = attr.getValue(ATTRIBUTE_CLASS_PATH);
-    if (appPackageName == null || appPackageVersion == null || classPathString == null) {
-      throw new IOException("Not a valid app package.  App Package Name or Version or Class-Path is missing from MANIFEST.MF");
-    }
-    classPath.addAll(Arrays.asList(StringUtils.split(classPathString, " ")));
-    extractToDirectory(directory, jarInputStream);
+      Manifest manifest = extractToDirectory(directory, zipArchiveInputStream);
+      if (manifest == null) {
+        throw new IOException("Not a valid app package. MANIFEST.MF is not present.");
+      }
+      Attributes attr = manifest.getMainAttributes();
+      appPackageName = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_NAME);
+      appPackageVersion = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_VERSION);
+      appPackageGroupId = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_GROUP_ID);
+      dtEngineVersion = attr.getValue(ATTRIBUTE_DT_ENGINE_VERSION);
+      appPackageDisplayName = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_DISPLAY_NAME);
+      appPackageDescription = attr.getValue(ATTRIBUTE_DT_APP_PACKAGE_DESCRIPTION);
+      String classPathString = attr.getValue(ATTRIBUTE_CLASS_PATH);
+      if (appPackageName == null || appPackageVersion == null || classPathString == null) {
+        throw new IOException("Not a valid app package.  App Package Name or Version or Class-Path is missing from MANIFEST.MF");
+      }
+      classPath.addAll(Arrays.asList(StringUtils.split(classPathString, " ")));
 
-    File confDirectory = new File(directory, "conf");
-    if (confDirectory.exists()) {
-      processConfDirectory(confDirectory);
-    }
-    resourcesDirectory = new File(directory, "resources");
+      File confDirectory = new File(directory, "conf");
+      if (confDirectory.exists()) {
+        processConfDirectory(confDirectory);
+      }
+      resourcesDirectory = new File(directory, "resources");
 
-    File propertiesXml = new File(directory, "META-INF/properties.xml");
-    if (propertiesXml.exists()) {
-      processPropertiesXml(propertiesXml, null);
-    }
+      File propertiesXml = new File(directory, "META-INF/properties.xml");
+      if (propertiesXml.exists()) {
+        processPropertiesXml(propertiesXml, null);
+      }
 
-    if (processAppDirectory) {
-      processAppDirectory(false);
+      if (processAppDirectory) {
+        processAppDirectory(false);
+      }
     }
   }
 
@@ -307,30 +308,35 @@ public class AppPackage implements Closeable
 
   public static void extractToDirectory(File directory, File appPackageFile) throws IOException
   {
-    extractToDirectory(directory, new JarInputStream(new FileInputStream(appPackageFile)));
+    extractToDirectory(directory, new ZipArchiveInputStream(new FileInputStream(appPackageFile), "UTF-8", true, true));
   }
 
-  private static void extractToDirectory(File directory, JarInputStream input) throws IOException
+  private static Manifest extractToDirectory(File directory, ZipArchiveInputStream input) throws IOException
   {
+    Manifest manifest = null;
     File manifestFile = new File(directory, JarFile.MANIFEST_NAME);
     manifestFile.getParentFile().mkdirs();
-    try (FileOutputStream output = new FileOutputStream(manifestFile)) {
-      input.getManifest().write(output);
-    }
 
-    JarEntry entry = input.getNextJarEntry();
+    ZipArchiveEntry entry = input.getNextZipEntry();
     while (entry != null) {
       File newFile = new File(directory, entry.getName());
       if (entry.isDirectory()) {
         newFile.mkdirs();
       } else {
-        try (FileOutputStream output = new FileOutputStream(newFile)) {
-          IOUtils.copy(input, output);
+        if (JarFile.MANIFEST_NAME.equals(entry.getName())) {
+          manifest = new Manifest(input);
+          try (FileOutputStream output = new FileOutputStream(newFile)) {
+            manifest.write(output);
+          }
+        } else {
+          try (FileOutputStream output = new FileOutputStream(newFile)) {
+            IOUtils.copy(input, output);
+          }
         }
       }
-      input.closeEntry();
-      entry = input.getNextJarEntry();
+      entry = input.getNextZipEntry();
     }
+    return manifest;
   }
 
   public static void createAppPackageFile(File fileToBeCreated, File directory) throws ZipException


[2/2] apex-core git commit: Merge branch 'APEXCORE-686' of github.com:vrozov/apex-core

Posted by pr...@apache.org.
Merge branch 'APEXCORE-686' of github.com:vrozov/apex-core


Project: http://git-wip-us.apache.org/repos/asf/apex-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/apex-core/commit/01eb7926
Tree: http://git-wip-us.apache.org/repos/asf/apex-core/tree/01eb7926
Diff: http://git-wip-us.apache.org/repos/asf/apex-core/diff/01eb7926

Branch: refs/heads/master
Commit: 01eb7926dcf9fb6ad40be010894e635bd24f37e3
Parents: 077009e 7420d69
Author: Pramod Immaneni <pr...@datatorrent.com>
Authored: Thu Apr 13 07:02:58 2017 -0700
Committer: Pramod Immaneni <pr...@datatorrent.com>
Committed: Thu Apr 13 07:02:58 2017 -0700

----------------------------------------------------------------------
 .../datatorrent/stram/client/AppPackage.java    | 104 ++++++++++---------
 1 file changed, 55 insertions(+), 49 deletions(-)
----------------------------------------------------------------------