Skip to content

Commit d2ca557

Browse files
author
Yaytay
committed
Add timeout to URL requests and report failures.
1 parent 8ae9dea commit d2ca557

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

src/main/java/uk/co/spudsoft/params4j/doclet/AsciiDocLinkMaps.java

+24-13
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@
2121
import java.io.InputStream;
2222
import java.io.InputStreamReader;
2323
import java.net.URL;
24+
import java.net.URLConnection;
2425
import java.util.ArrayList;
2526
import java.util.HashMap;
2627
import java.util.List;
2728
import java.util.Map;
29+
import javax.tools.Diagnostic;
30+
import jdk.javadoc.doclet.Reporter;
2831

2932
/**
3033
*
@@ -42,12 +45,12 @@ public void addConfiguredBaseUrl(String baseUrl) {
4245
configuredBaseUrls.add(baseUrl);
4346
}
4447

45-
public String getUrlForPackage(String packageName) {
48+
public String getUrlForPackage(Reporter reporter, String packageName) {
4649
if (!configuredBaseUrls.isEmpty() && !packageListsRead) {
4750
packageListsRead = true;
4851
for (String cofiguredBaseUrl : configuredBaseUrls) {
49-
readPackageList(baseUrlFromPackage, cofiguredBaseUrl);
50-
readElementList(baseUrlFromPackage, cofiguredBaseUrl);
52+
readPackageList(reporter, baseUrlFromPackage, cofiguredBaseUrl);
53+
readElementList(reporter, baseUrlFromPackage, cofiguredBaseUrl);
5154
}
5255
}
5356
String baseUrl = baseUrlFromPackage.get(packageName);
@@ -58,35 +61,43 @@ public String getUrlForPackage(String packageName) {
5861
}
5962
}
6063

61-
public String getUrlForType(String packageName, String className) {
62-
String packageUrl = getUrlForPackage(packageName);
64+
public String getUrlForType(Reporter reporter, String packageName, String className) {
65+
String packageUrl = getUrlForPackage(reporter, packageName);
6366
if (packageUrl == null) {
6467
return null;
6568
} else {
6669
return packageUrl + className + ".html";
6770
}
6871
}
6972

70-
static void readPackageList(Map<String, String> baseUrlFromPackage, String baseUrl) {
73+
static void readPackageList(Reporter reporter, Map<String, String> baseUrlFromPackage, String baseUrl) {
74+
String url = baseUrl.endsWith("/") ? baseUrl + "package-list" : baseUrl + "/package-list";
7175
try {
72-
URL link = new URL(baseUrl.endsWith("/") ? baseUrl + "package-list" : baseUrl + "/package-list");
73-
try (InputStream in = link.openStream()) {
76+
URL link = new URL(url);
77+
URLConnection con = link.openConnection();
78+
con.setConnectTimeout(2000);
79+
con.setReadTimeout(2000);
80+
try (InputStream in = con.getInputStream()) {
7481
readPackageList(baseUrlFromPackage, in, baseUrl);
7582
}
7683
} catch (Throwable ex) {
77-
// Silently fail, because failure is quite likely
84+
reporter.print(Diagnostic.Kind.NOTE, "Failed to download from URL " + url + " (" + ex.toString() + ")");
7885
}
7986

8087
}
8188

82-
static void readElementList(Map<String, String> baseUrlFromPackage, String baseUrl) {
89+
static void readElementList(Reporter reporter, Map<String, String> baseUrlFromPackage, String baseUrl) {
90+
String url = baseUrl.endsWith("/") ? baseUrl + "element-list" : baseUrl + "/element-list";
8391
try {
84-
URL link = new URL(baseUrl.endsWith("/") ? baseUrl + "element-list" : baseUrl + "/element-list");
85-
try (InputStream in = link.openStream()) {
92+
URL link = new URL(url);
93+
URLConnection con = link.openConnection();
94+
con.setConnectTimeout(2000);
95+
con.setReadTimeout(2000);
96+
try (InputStream in = con.getInputStream()) {
8697
readPackageList(baseUrlFromPackage, in, baseUrl);
8798
}
8899
} catch (Throwable ex) {
89-
// Silently fail, because failure is quite likely
100+
reporter.print(Diagnostic.Kind.NOTE, "Failed to download from URL " + url + " (" + ex.toString() + ")");
90101
}
91102
}
92103

src/main/java/uk/co/spudsoft/params4j/doclet/TypeWriter.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void writeReferenceTree(DocletEnvironment environment, DocTreePath curren
5454
TypeElement typeElement = (TypeElement) element.getEnclosingElement();
5555
ExecutableElement methodElement = (ExecutableElement) element;
5656

57-
String url = linkMaps.getUrlForType(TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement));
57+
String url = linkMaps.getUrlForType(reporter, TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement));
5858
if (url == null) {
5959
if (includedClasses.contains(typeElement.getQualifiedName().toString())) {
6060
write("xref:");
@@ -69,7 +69,7 @@ public void writeReferenceTree(DocletEnvironment environment, DocTreePath curren
6969
}
7070
} else {
7171
write("link:");
72-
write(linkMaps.getUrlForType(TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement)));
72+
write(linkMaps.getUrlForType(reporter, TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement)));
7373
write(TypeWriter.getMethodAnchor(methodElement));
7474
write("[");
7575
// For method links javadoc removes leading packages and type parameters
@@ -79,7 +79,7 @@ public void writeReferenceTree(DocletEnvironment environment, DocTreePath curren
7979
} else if (element instanceof TypeElement) {
8080
TypeElement typeElement = (TypeElement) element;
8181

82-
String url = linkMaps.getUrlForType(TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement));
82+
String url = linkMaps.getUrlForType(reporter, TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement));
8383
if (url == null) {
8484
if (includedClasses.contains(typeElement.getQualifiedName().toString())) {
8585
write("xref:");
@@ -94,7 +94,7 @@ public void writeReferenceTree(DocletEnvironment environment, DocTreePath curren
9494
}
9595
} else {
9696
write("link:");
97-
write(linkMaps.getUrlForType(TypeWriter.getPackage(element), TypeWriter.getClassName(element)));
97+
write(linkMaps.getUrlForType(reporter, TypeWriter.getPackage(element), TypeWriter.getClassName(element)));
9898
write("[");
9999
write(refTree.getSignature());
100100
write("] ");
@@ -107,7 +107,7 @@ public void writeDeclaredType(DeclaredType declaredType) {
107107

108108
TypeElement typeElement = (TypeElement) declaredType.asElement();
109109

110-
String url = linkMaps.getUrlForType(TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement));
110+
String url = linkMaps.getUrlForType(reporter, TypeWriter.getPackage(typeElement), TypeWriter.getClassName(typeElement));
111111

112112
if (url != null) {
113113
write("link:");

0 commit comments

Comments
 (0)