Repository: knox
Updated Branches:
  refs/heads/master 1f7e67efe -> 86babd32d


KNOX-1624 - Ensure streams and readers are properly closed

Signed-off-by: Kevin Risden <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/86babd32
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/86babd32
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/86babd32

Branch: refs/heads/master
Commit: 86babd32d62b2cbea0c866b3c037c9b288f2e1bb
Parents: 1f7e67e
Author: Kevin Risden <[email protected]>
Authored: Mon Nov 26 12:57:37 2018 -0500
Committer: Kevin Risden <[email protected]>
Committed: Mon Nov 26 15:20:43 2018 -0500

----------------------------------------------------------------------
 .../ambari/AmbariConfigurationMonitor.java      | 37 ++-------------
 .../ambari/AmbariDynamicServiceURLCreator.java  |  5 +-
 .../org/apache/knox/gateway/GatewayServer.java  | 20 +++-----
 .../org/apache/knox/gateway/GatewayServlet.java |  4 +-
 .../simple/SimpleDescriptorHandler.java         | 24 ++++------
 .../gateway/util/ServiceDefinitionsLoader.java  |  5 +-
 .../apache/knox/gateway/shell/KnoxSession.java  |  9 ++--
 .../gateway/dispatch/HadoopAuthCookieStore.java |  5 +-
 .../security/impl/BaseKeystoreService.java      | 48 +++++---------------
 .../correlation/Log4jCorrelationService.java    | 23 ++--------
 10 files changed, 48 insertions(+), 132 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
index 3b1cc6a..2d61280 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariConfigurationMonitor.java
@@ -116,9 +116,7 @@ class AmbariConfigurationMonitor implements 
ClusterConfigurationMonitor {
             Collection<File> persistedConfigs = 
FileUtils.listFiles(persistenceDir, new String[]{"conf"}, false);
             for (File persisted : persistedConfigs) {
                 Properties props = new Properties();
-                FileInputStream in = null;
-                try {
-                    in = new FileInputStream(persisted);
+                try (FileInputStream in = new FileInputStream(persisted)) {
                     props.load(in);
 
                     addDiscoveryConfig(props.getProperty(PROP_CLUSTER_NAME), 
new ServiceDiscoveryConfig() {
@@ -139,14 +137,6 @@ class AmbariConfigurationMonitor implements 
ClusterConfigurationMonitor {
                                                         });
                 } catch (IOException e) {
                     
log.failedToLoadClusterMonitorServiceDiscoveryConfig(getType(), e);
-                } finally {
-                    if (in != null) {
-                        try {
-                            in.close();
-                        } catch (IOException e) {
-                            //
-                        }
-                    }
                 }
             }
         }
@@ -162,9 +152,7 @@ class AmbariConfigurationMonitor implements 
ClusterConfigurationMonitor {
             Collection<File> persistedConfigs = 
FileUtils.listFiles(persistenceDir, new String[]{"ver"}, false);
             for (File persisted : persistedConfigs) {
                 Properties props = new Properties();
-                FileInputStream in = null;
-                try {
-                    in = new FileInputStream(persisted);
+                try (FileInputStream in = new FileInputStream(persisted)) {
                     props.load(in);
 
                     String source = props.getProperty(PROP_CLUSTER_SOURCE);
@@ -179,17 +167,8 @@ class AmbariConfigurationMonitor implements 
ClusterConfigurationMonitor {
 
                     // Map the config versions to the cluster name
                     addClusterConfigVersions(source, clusterName, 
configVersions);
-
                 } catch (IOException e) {
                     log.failedToLoadClusterMonitorConfigVersions(getType(), e);
-                } finally {
-                    if (in != null) {
-                        try {
-                            in.close();
-                        } catch (IOException e) {
-                            //
-                        }
-                    }
                 }
             }
         }
@@ -231,21 +210,11 @@ class AmbariConfigurationMonitor implements 
ClusterConfigurationMonitor {
     }
 
     private void persist(Properties props, File dest) {
-        FileOutputStream out = null;
-        try {
-            out = new FileOutputStream(dest);
+        try (FileOutputStream out = new FileOutputStream(dest)) {
             props.store(out, PERSISTED_FILE_COMMENT);
             out.flush();
         } catch (Exception e) {
             log.failedToPersistClusterMonitorData(getType(), 
dest.getAbsolutePath(), e);
-        } finally {
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e) {
-                    //
-                }
-            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
index dc929f7..b81a53a 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
@@ -23,6 +23,7 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -51,7 +52,9 @@ class AmbariDynamicServiceURLCreator implements 
ServiceURLCreator {
 
     AmbariDynamicServiceURLCreator(AmbariCluster cluster, File 
mappingConfiguration) throws IOException {
         this.cluster = cluster;
-        config = new ServiceURLPropertyConfig(new 
FileInputStream(mappingConfiguration));
+        try (InputStream inputStream = new 
FileInputStream(mappingConfiguration)) {
+          config = new ServiceURLPropertyConfig(inputStream);
+        }
     }
 
     AmbariDynamicServiceURLCreator(AmbariCluster cluster, String mappings) {

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
index 52ca3fd..002be67 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServer.java
@@ -22,7 +22,6 @@ import net.lingala.zip4j.exception.ZipException;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.knox.gateway.audit.api.Action;
 import org.apache.knox.gateway.audit.api.ActionOutcome;
@@ -85,6 +84,7 @@ import java.io.FileOutputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Serializable;
 import java.net.InetSocketAddress;
@@ -92,7 +92,6 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.net.UnknownHostException;
 import java.nio.charset.StandardCharsets;
 import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
@@ -624,19 +623,11 @@ public class GatewayServer {
    * @return true if port in use else false
    */
   public static boolean isPortInUse(final int port) {
-
-    Socket socket = null;
-    try {
-      socket = new Socket("localhost", port);
+    try (Socket socket = new Socket("localhost", port)){
       return true;
-    } catch (final UnknownHostException e) {
-      return false;
     } catch (final IOException e) {
       return false;
-    } finally {
-      IOUtils.closeQuietly(socket);
     }
-
   }
 
   /**
@@ -734,8 +725,11 @@ public class GatewayServer {
           originalRoot.appendChild( importedNode );
         }
       }
-      
-      XmlUtils.writeXml( webXmlDoc, new OutputStreamWriter(new 
FileOutputStream(webXmlFile), StandardCharsets.UTF_8) );
+
+      try (OutputStream outputStream = new FileOutputStream(webXmlFile);
+           OutputStreamWriter outputStreamWriter = new 
OutputStreamWriter(outputStream, StandardCharsets.UTF_8)) {
+        XmlUtils.writeXml(webXmlDoc, outputStreamWriter);
+      }
     }
   }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
index 2374ba3..ef2a27d 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
@@ -214,8 +214,8 @@ public class GatewayServlet implements Servlet, Filter {
     try {
       GatewayFilter filter = null;
       if( stream != null ) {
-        try {
-          GatewayDescriptor descriptor = GatewayDescriptorFactory.load("xml", 
new InputStreamReader(stream, StandardCharsets.UTF_8));
+        try (InputStreamReader reader = new InputStreamReader(stream, 
StandardCharsets.UTF_8)){
+          GatewayDescriptor descriptor = GatewayDescriptorFactory.load("xml", 
reader);
           filter = GatewayFactory.create( descriptor );
         } finally {
           stream.close();

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
index a7bbbbd..4df2cf1 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java
@@ -32,6 +32,7 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.StringWriter;
 import java.net.URI;
@@ -362,10 +363,8 @@ public class SimpleDescriptorHandler {
                                                       final Map<String, 
List<String>> serviceURLs,
                                                       final Map<String, 
Map<String, String>> serviceParams) {
         Map<String, File> result = new HashMap<>();
-
-        BufferedWriter fw = null;
         File topologyDescriptor = null;
-        try {
+        try (StringWriter sw = new StringWriter()) {
             // Handle the referenced provider configuration
             File providerConfigFile = null;
             ProviderConfiguration providerConfiguration = null;
@@ -410,8 +409,6 @@ public class SimpleDescriptorHandler {
             }
 
             // Generate the topology content
-            StringWriter sw = new StringWriter();
-
             sw.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
             
sw.write("<!--==============================================-->\n");
             sw.write("<!-- DO NOT EDIT. This is an auto-generated file. 
-->\n");
@@ -577,20 +574,15 @@ public class SimpleDescriptorHandler {
             }
             topologyDescriptor = new File(destDirectory, topologyFilename + 
".xml");
 
-            fw = new BufferedWriter(new OutputStreamWriter(new 
FileOutputStream(topologyDescriptor), StandardCharsets.UTF_8));
-            fw.write(sw.toString());
-            fw.flush();
+            try (OutputStream outputStream = new 
FileOutputStream(topologyDescriptor);
+                 OutputStreamWriter outputStreamWriter = new 
OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
+                 BufferedWriter fw = new BufferedWriter(outputStreamWriter)) {
+              fw.write(sw.toString());
+              fw.flush();
+            }
         } catch (IOException e) {
             
log.failedToGenerateTopologyFromSimpleDescriptor(topologyDescriptor.getName(), 
e);
             topologyDescriptor.delete();
-        } finally {
-            if (fw != null) {
-                try {
-                    fw.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
         }
 
         result.put(RESULT_TOPOLOGY, topologyDescriptor);

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
----------------------------------------------------------------------
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
index d2687ec..63283cb 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/util/ServiceDefinitionsLoader.java
@@ -58,8 +58,7 @@ public class ServiceDefinitionsLoader {
         Unmarshaller unmarshaller = context.createUnmarshaller();
 
         for ( File file : getFileList(servicesDir) ) {
-          try {
-            FileInputStream inputStream = new FileInputStream(file);
+          try (InputStream inputStream = new FileInputStream(file)) {
             ServiceDefinition definition = (ServiceDefinition) 
unmarshaller.unmarshal(inputStream);
             //look for rewrite rules as a sibling (for now)
             UrlRewriteRulesDescriptor rewriteRulesDescriptor = 
loadRewriteRules(file.getParentFile());
@@ -67,6 +66,8 @@ public class ServiceDefinitionsLoader {
             log.addedServiceDefinition(definition.getName(), 
definition.getRole(), definition.getVersion());
           } catch ( FileNotFoundException e ) {
             log.failedToFindServiceDefinitionFile(file.getAbsolutePath(), e);
+          } catch (IOException e) {
+            log.failedToLoadServiceDefinition(file.getAbsolutePath(), e);
           }
         }
       } catch ( JAXBException e ) {

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java
----------------------------------------------------------------------
diff --git 
a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java 
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java
index 3bf9836..da57946 100644
--- a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java
+++ b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/KnoxSession.java
@@ -17,7 +17,6 @@
  */
 package org.apache.knox.gateway.shell;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
 import org.apache.http.auth.AuthScope;
@@ -201,7 +200,6 @@ public class KnoxSession implements Closeable {
 
     discoverTruststoreDetails(clientContext);
 
-    InputStream is = null;
     try {
       ks = KeyStore.getInstance("JKS");
       File file = new File(clientContext.connection().truststoreLocation());
@@ -219,8 +217,9 @@ public class KnoxSession implements Closeable {
       }
 
       if (file.exists()) {
-        is = new FileInputStream(file);
-        ks.load(is, truststorePass.toCharArray());
+        try (InputStream is = new FileInputStream(file)) {
+          ks.load(is, truststorePass.toCharArray());
+        }
       }
       else {
         throw new KnoxShellException("Unable to find a truststore for secure 
login."
@@ -244,8 +243,6 @@ public class KnoxSession implements Closeable {
     } catch (IOException e) {
       throw new KnoxShellException("Unable to load truststore."
           + " May be related to password setting or truststore format.", e);
-    } finally {
-       IOUtils.closeQuietly(is);
     }
 
     return ks;

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
index b8aa618..f921b3a 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/HadoopAuthCookieStore.java
@@ -19,6 +19,7 @@ package org.apache.knox.gateway.dispatch;
 
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.util.Date;
 import java.util.Properties;
@@ -74,8 +75,8 @@ public class HadoopAuthCookieStore extends BasicCookieStore {
             String krb5Config = config.getKerberosLoginConfig();
             if (krb5Config != null && !krb5Config.isEmpty()) {
               Properties p = new Properties();
-              try {
-                p.load(new FileInputStream(krb5Config));
+              try (InputStream in = new FileInputStream(krb5Config)){
+                p.load(in);
                 String configuredPrincipal = p.getProperty("principal");
                 // Strip off enclosing quotes, if present
                 if (configuredPrincipal.startsWith("\"")) {

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
----------------------------------------------------------------------
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
index 57d7884..720e4c3 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/services/security/impl/BaseKeystoreService.java
@@ -29,6 +29,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.security.Key;
 import java.security.KeyStore;
@@ -50,18 +51,11 @@ public class BaseKeystoreService {
       NoSuchAlgorithmException {     
       
        final KeyStore  keyStore = KeyStore.getInstance(storeType);
-       if ( keyStoreFile.exists() )
-       {
-           final FileInputStream   input = new FileInputStream( keyStoreFile );
-           try {
+       if ( keyStoreFile.exists() ) {
+           try (FileInputStream input = new FileInputStream( keyStoreFile )) {
                keyStore.load( input, masterPassword );
            }
-           finally {
-               input.close();
-           }
-       }
-       else
-       {
+       } else {
            keyStore.load( null, masterPassword );
        }
       
@@ -84,17 +78,14 @@ public class BaseKeystoreService {
         }
       }
     }
-    FileOutputStream stream = new FileOutputStream( file );
-    return stream;
+    return new FileOutputStream( file );
   }
 
   protected void createKeystore(String filename, String keystoreType) throws 
KeystoreServiceException {
-    try {
-      FileOutputStream out = createKeyStoreFile( filename );
+    try (FileOutputStream out = createKeyStoreFile( filename )) {
       KeyStore ks = KeyStore.getInstance(keystoreType);  
       ks.load( null, null );  
       ks.store( out, masterService.getMasterSecret() );
-      out.close();
     } catch (KeyStoreException e) {
       LOG.failedToCreateKeystore( filename, keystoreType, e );
       throw new KeystoreServiceException(e);
@@ -114,33 +105,16 @@ public class BaseKeystoreService {
   }
 
   protected boolean isKeystoreAvailable(final File keyStoreFile, String 
storeType) throws KeyStoreException, IOException {
-    if ( keyStoreFile.exists() )
-    {
-      FileInputStream input = null;
-      try {
-        final KeyStore  keyStore = KeyStore.getInstance(storeType);
-        input = new FileInputStream( keyStoreFile );
+    if ( keyStoreFile.exists() ) {
+      try (InputStream input = new FileInputStream(keyStoreFile)){
+        final KeyStore keyStore = KeyStore.getInstance(storeType);
         keyStore.load( input, masterService.getMasterSecret() );
         return true;
-      } catch (NoSuchAlgorithmException e) {
+      } catch (NoSuchAlgorithmException | CertificateException e) {
         LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e );
-      } catch (CertificateException e) {
-        LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e );
-      } catch (IOException e) {
+      } catch (IOException | KeyStoreException e) {
         LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e );
         throw e;
-      } catch (KeyStoreException e) {
-        LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e );
-        throw e;
-      }
-      finally {
-          try {
-            if ( input != null ) {
-              input.close();
-            }
-          } catch (IOException e) {
-            LOG.failedToLoadKeystore( keyStoreFile.getName(), storeType, e );
-          }
       }
     }
     return false;

http://git-wip-us.apache.org/repos/asf/knox/blob/86babd32/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java
----------------------------------------------------------------------
diff --git 
a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java
 
b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java
index 4c13261..8bbfcb6 100644
--- 
a/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java
+++ 
b/gateway-util-common/src/main/java/org/apache/knox/gateway/audit/log4j/correlation/Log4jCorrelationService.java
@@ -88,27 +88,12 @@ public class Log4jCorrelationService implements 
CorrelationService {
 
   @Override
   public CorrelationContext readExternalizedContext(byte[] 
externalizedContext) {
-    ByteArrayInputStream bais = new ByteArrayInputStream( externalizedContext 
);
-    ObjectInput oi = null;
-    CorrelationContext context = null;
-    try {
-      oi = new ObjectInputStream( bais );
-      context = (CorrelationContext) oi.readObject();
-    } catch ( IOException e ) {
-      throw new IllegalArgumentException( e );
-    } catch ( ClassNotFoundException e ) {
+    try (ByteArrayInputStream bais = new ByteArrayInputStream( 
externalizedContext );
+         ObjectInput oi = new ObjectInputStream( bais )) {
+      return (CorrelationContext) oi.readObject();
+    } catch ( IOException | ClassNotFoundException e ) {
       throw new IllegalArgumentException( e );
-    } finally {
-      try {
-        bais.close();
-        if ( oi != null) {
-          oi.close();
-        }
-      } catch ( IOException e ) {
-        throw new IllegalArgumentException( e );
-      }
     }
-    return context;
   }
 
   @Override

Reply via email to