/** * Releases the given {@link Closeable} especially if it was an instance of {@link Releasable}. * * <p>For example, the creation of a <code>ResettableInputStream</code> would entail physically * opening a file. If the opened file is meant to be closed only (in a finally block) by the very * same code block that created it, then it is necessary that the release method must not be * called while the execution is made in other stack frames. * * <p>In such case, as other stack frames may inadvertently or indirectly call the close method of * the stream, the creator of the stream would need to explicitly disable the accidental closing * via <code>ResettableInputStream#disableClose()</code>, so that the release method becomes the * only way to truly close the opened file. */ public static void release(Closeable is, Log log) { closeQuietly(is, log); if (is instanceof Releasable) { Releasable r = (Releasable) is; r.release(); } }
private static JmesPathExpression getAstFromArgument( String argument, Map<String, JmesPathExpression> argumentToAstMap) throws IOException { if (argument != null && !argumentToAstMap.containsKey(argument)) { ProcessBuilder pb = new ProcessBuilder( "/apollo/env/SDETools/bin/brazil-runtime-exec", "python3.4", System.getProperty("codeGenSourceDirectory") + "/bin/jp-to-ast.py", argument); Process p = pb.start(); JsonNode jsonNode = mapper.readTree(IOUtils.toString(p.getInputStream())); JmesPathExpression ast = fromAstJsonToAstJava(jsonNode); argumentToAstMap.put(argument, ast); IOUtils.closeQuietly(p.getInputStream(), null); return ast; } else if (argument != null) { return argumentToAstMap.get(argument); } return null; }
/** * To allow customers to override abort to just close. We can think about exposing this method as * protected to allow customers to completely prevent the abort behavior if there is a need */ private void doAbort() { if (httpRequest != null) { httpRequest.abort(); } IOUtils.closeQuietly(in, null); }