1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.text.lookup;
19
20 import java.io.BufferedInputStream;
21 import java.io.InputStreamReader;
22 import java.io.StringWriter;
23 import java.net.URL;
24
25 import org.apache.commons.lang3.StringUtils;
26
27
28
29
30
31
32
33
34
35
36
37
38 final class UrlStringLookup extends AbstractStringLookup {
39
40
41
42
43 static final UrlStringLookup INSTANCE = new UrlStringLookup();
44
45
46
47
48 private UrlStringLookup() {
49
50 }
51
52
53
54
55
56
57
58
59
60
61 @Override
62 public String lookup(final String key) {
63 if (key == null) {
64 return null;
65 }
66 final String[] keys = key.split(SPLIT_STR);
67 final int keyLen = keys.length;
68 if (keyLen < 2) {
69 throw IllegalArgumentExceptions.format("Bad URL key format [%s]; expected format is DocumentPath:Key.",
70 key);
71 }
72 final String charsetName = keys[0];
73 final String urlStr = StringUtils.substringAfter(key, SPLIT_CH);
74 try {
75 final URL url = new URL(urlStr);
76 final int size = 8192;
77 final StringWriter writer = new StringWriter(size);
78 final char[] buffer = new char[size];
79 try (BufferedInputStream bis = new BufferedInputStream(url.openStream());
80 InputStreamReader reader = new InputStreamReader(bis, charsetName)) {
81 int n;
82 while (-1 != (n = reader.read(buffer))) {
83 writer.write(buffer, 0, n);
84 }
85 }
86 return writer.toString();
87 } catch (final Exception e) {
88 throw IllegalArgumentExceptions.format(e, "Error looking up URL [%s] with Charset [%s].", urlStr,
89 charsetName);
90 }
91 }
92
93 }