From 3e702870b6e2ae56e6db8304d80bef785e8ef9c6 Mon Sep 17 00:00:00 2001 From: 10090474 Date: Mon, 12 Dec 2016 19:38:15 +0800 Subject: Close all InputStreams, Readers, ZipFiles while not use. Change-Id: I2e94d3fff246e250e3c192966a42ffdeba6f2a36 Issue-id: TOSCA-191 Signed-off-by: 10090474 --- .../catalog/model/common/TemplateUtils.java | 111 +++++++++++++++------ .../model/parser/yaml/aria/AriaModelParser.java | 4 +- .../model/plan/wso2/Wso2ServiceConsumer.java | 67 ++++--------- 3 files changed, 99 insertions(+), 83 deletions(-) diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateUtils.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateUtils.java index ffb4a4dc..697ca1ab 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateUtils.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/common/TemplateUtils.java @@ -15,17 +15,17 @@ */ package org.openo.commontosca.catalog.model.common; -import java.io.BufferedInputStream; import java.io.BufferedReader; -import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; +import java.io.Reader; import java.util.ArrayList; +import java.util.Enumeration; import java.util.List; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import java.util.zip.ZipInputStream; import org.openo.commontosca.catalog.db.exception.CatalogResourceException; import org.openo.commontosca.catalog.model.parser.yaml.yamlmodel.Input; @@ -69,7 +69,7 @@ public class TemplateUtils { } } } -} + } /** @@ -102,50 +102,95 @@ public class TemplateUtils { * @return * @throws CatalogResourceException */ - @SuppressWarnings("resource") public static String[] readFromZipFile(String zipFileName, String zipEntryName) throws CatalogResourceException { - ZipInputStream zipIns = null; - BufferedReader zipEntryBr = null; + ZipFile zf = null; + InputStream ins = null; try { - ZipFile zipFile = new ZipFile(zipFileName); + zf = new ZipFile(zipFileName); + ZipEntry ze = getZipEntryZipFile(zf, zipEntryName); - zipIns = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFileName))); - ZipEntry zipEntry; - while ((zipEntry = zipIns.getNextEntry()) != null) { - if (zipEntryName.equals(zipEntry.getName()) - || (zipEntryName.replaceAll("/", "\\\\")).equals(zipEntry.getName())) { - zipEntryBr = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry))); - List lineList = new ArrayList<>(); - String line; - while ((line = zipEntryBr.readLine()) != null) { - lineList.add(line); - } - - return lineList.toArray(new String[0]); - } + if (ze != null) { + ins = zf.getInputStream(ze); + return readFromInputStream(ins); } } catch (IOException e) { - throw new CatalogResourceException("Parse Tosca Meta Fail.", e); + throw new CatalogResourceException("readFromZipFile failed.", e); } finally { - closeStreamAndReader(zipIns, zipEntryBr); + closeInputStream(ins); + closeZipFile(zf); } return new String[0]; } + + public static ZipEntry getZipEntryZipFile(ZipFile zf, String zipEntryName) { + Enumeration zes = zf.entries(); + while (zes.hasMoreElements()) { + ZipEntry ze = (ZipEntry) zes.nextElement(); + if (zipEntryName.equals(ze.getName()) + || (zipEntryName.replaceAll("\\\\", "/")).equals(ze.getName())) { + return ze; + } + } + + return null; + } + + /** + * @param ins + */ + public static void closeInputStream(InputStream ins) { + if (ins != null) { + try { + ins.close(); + } catch (IOException e) { + logger.warn("closeInputStream failed.", e); + } + } + } - private static void closeStreamAndReader(ZipInputStream zin, BufferedReader br) { - if (br != null) { + /** + * @param zf + */ + public static void closeZipFile(ZipFile zf) { + if (zf != null) { try { - br.close(); - } catch (IOException e1) { - logger.error("Buffered reader close failed !"); + zf.close(); + } catch (IOException e) { + logger.warn("closeZipFile failed.", e); } } - if (zin != null) { + } + + private static String[] readFromInputStream(InputStream ins) throws CatalogResourceException { + InputStreamReader insReader = new InputStreamReader(ins); + BufferedReader reader = new BufferedReader(insReader); + + List lineList = new ArrayList<>(); + String line; + try { + while ((line = reader.readLine()) != null) { + lineList.add(line); + } + } catch (IOException e) { + throw new CatalogResourceException("readFromInputStream failed.", e); + } finally { + closeReader(reader); + closeReader(insReader); + } + + return lineList.toArray(new String[0]); + } + + /** + * @param reader + */ + private static void closeReader(Reader reader) { + if (reader != null) { try { - zin.closeEntry(); - } catch (IOException e2) { - logger.error("Zip inputStream close failed !"); + reader.close(); + } catch (IOException e) { + logger.warn("closeReader failed.", e); } } } diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java index 71372c2c..8d37319c 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/parser/yaml/aria/AriaModelParser.java @@ -60,7 +60,7 @@ public class AriaModelParser extends AbstractModelParser { logger.info("Parse begin."); String stFileLocation = parseServiceTemplateFileName(packageId, fileLocation); - AriaParserResult result = getAriaParserResult(packageId, fileLocation, stFileLocation); + AriaParserResult result = getAriaParserResult(packageId, stFileLocation); // service template ServiceTemplate st = parseServiceTemplate(result, packageId, stFileLocation); @@ -302,7 +302,7 @@ public class AriaModelParser extends AbstractModelParser { return retList.toArray(new OutputParameter[0]); } - private AriaParserResult getAriaParserResult(String packageId, String fileLocation, String stFileLocation) throws CatalogResourceException { + private AriaParserResult getAriaParserResult(String packageId, String stFileLocation) throws CatalogResourceException { CsarFileUriResponse stDownloadUri = PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileLocation); return AriaParserServiceConsumer.parseCsarPackage(stDownloadUri.getDownloadUri()); diff --git a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/plan/wso2/Wso2ServiceConsumer.java b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/plan/wso2/Wso2ServiceConsumer.java index 1d753744..67f9a9e3 100644 --- a/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/plan/wso2/Wso2ServiceConsumer.java +++ b/catalog-core/catalog-mgr/src/main/java/org/openo/commontosca/catalog/model/plan/wso2/Wso2ServiceConsumer.java @@ -15,9 +15,7 @@ */ package org.openo.commontosca.catalog.model.plan.wso2; -import java.io.BufferedInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -26,7 +24,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import java.util.zip.ZipInputStream; import lombok.AllArgsConstructor; import lombok.Data; @@ -38,6 +35,7 @@ import org.apache.http.entity.mime.MultipartEntityBuilder; import org.glassfish.jersey.client.ClientConfig; import org.openo.commontosca.catalog.common.Config; import org.openo.commontosca.catalog.db.exception.CatalogResourceException; +import org.openo.commontosca.catalog.model.common.TemplateUtils; import org.openo.commontosca.catalog.model.plan.wso2.entity.DeletePackageResponse; import org.openo.commontosca.catalog.model.plan.wso2.entity.DeployPackageResponse; import org.openo.commontosca.catalog.model.plan.wso2.entity.StartProcessRequest; @@ -49,10 +47,9 @@ import com.eclipsesource.jaxrs.consumer.ConsumerFactory; import com.google.gson.Gson; - public class Wso2ServiceConsumer { public static final String WSO2_APP_URL = "/openoapi/wso2bpel/v1/package"; - private static final Logger LOGGER = LoggerFactory.getLogger(Wso2ServiceConsumer.class); + private static final Logger logger = LoggerFactory.getLogger(Wso2ServiceConsumer.class); /** * deploy package. @@ -67,9 +64,11 @@ public class Wso2ServiceConsumer { if (ipPort == null) { throw new CatalogResourceException("getMsbServerAddr failed."); } + ZipFile zf = null; InputStream ins = null; try { - ins = getInputStream(zipFileLocation, planFilePath); + zf = new ZipFile(zipFileLocation); + ins = getInputStream(zf, planFilePath); RestResponse res = RestfulClient.post( ipPort.getIp(), ipPort.getPort(), WSO2_APP_URL, buildRequest(ins, planFilePath)); @@ -88,17 +87,14 @@ public class Wso2ServiceConsumer { } throw new CatalogResourceException( - "Deploy Package return fail. Response = " + res.getResult()); - } catch (FileNotFoundException e1) { - throw new CatalogResourceException("Deploy Package failed.", e1); + "Deploy Package return failed. Response = " + res.getResult()); + } catch (FileNotFoundException e) { + throw new CatalogResourceException("buildRequest failed.", e); + } catch (IOException e) { + throw new CatalogResourceException("ZipFile failed.", e); } finally { - if (ins != null) { - try { - ins.close(); - } catch (IOException e1) { - LOGGER.error("inputStream close failed !"); - } - } + TemplateUtils.closeInputStream(ins); + TemplateUtils.closeZipFile(zf); } } @@ -128,39 +124,14 @@ public class Wso2ServiceConsumer { return builder.build(); } - @SuppressWarnings("resource") - private static InputStream getInputStream(String zipFileLocation, String planFilePath) - throws CatalogResourceException { - ZipInputStream zin = null; - try { - InputStream in = new BufferedInputStream(new FileInputStream(zipFileLocation)); - zin = new ZipInputStream(in); - ZipEntry ze; - while ((ze = zin.getNextEntry()) != null) { - if (planFilePath.equals(ze.getName())) { - ZipFile zf = new ZipFile(zipFileLocation); - return zf.getInputStream(ze); - } - } - } catch (IOException e1) { - throw new CatalogResourceException("Get InputStream failed. planFilePath = " + planFilePath, - e1); - } finally { - closeStream(zin); - } - - throw new CatalogResourceException("Get InputStream failed. planFilePath = " + planFilePath); - } - - private static void closeStream(ZipInputStream zin) { - - if (zin != null) { - try { - zin.closeEntry(); - } catch (IOException e1) { - LOGGER.error("zip inputStream close failed !"); - } + private static InputStream getInputStream(ZipFile zf, String planFilePath) + throws CatalogResourceException, IOException { + ZipEntry ze = TemplateUtils.getZipEntryZipFile(zf, planFilePath); + + if (ze == null) { + throw new CatalogResourceException("Can't file plan file in the csar. planFilePath = " + planFilePath); } + return zf.getInputStream(ze); } /** -- cgit 1.2.3-korg