< 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 >