< prev index next >

src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java

Print this page

        

*** 38,47 **** --- 38,52 ---- import java.io.Reader; import java.io.StringReader; import java.lang.module.ModuleDescriptor; import java.lang.module.ModuleFinder; import java.lang.module.ModuleReference; + import java.net.URI; + import java.net.http.HttpClient; + import java.net.http.HttpRequest; + import java.net.http.HttpResponse; + import java.nio.channels.UnresolvedAddressException; import java.nio.charset.Charset; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.InvalidPathException; import java.nio.file.Path;
*** 2966,2977 **** --- 2971,3007 ---- }); return true; } private boolean cmdOpen(String filename) { + if (filename.startsWith("http://") || filename.startsWith("https://")) { + return runUrl(filename, "/open"); + } else { return runFile(filename, "/open"); } + } + + private boolean runUrl(String fileUrl, String context) { + try { + var httpClient = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL).build(); + var request = HttpRequest.newBuilder(URI.create(fileUrl)).build(); + var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + + if (response.statusCode() == 200) { + var scanner = new Scanner(response.body()); + run(new ScannerIOContext(scanner)); + return true; + } else { + errormsg("jshell.err.url.not.accessible", context, fileUrl, response.statusCode()); + return false; + } + } catch (UnresolvedAddressException | InterruptedException | IOException e) { + errormsg("jshell.err.url.exception", context, fileUrl, e); + } + + return false; + } private boolean runFile(String filename, String context) { if (!filename.isEmpty()) { try { Scanner scanner;
< prev index next >